using System.Text.RegularExpressions;
namespace XFEEDToolBox.Services;
public sealed record LocalUserProfile(string Name,string Avatar)
{
public static LocalUserProfile Read()
{
var fallback=new LocalUserProfile(Environment.UserName,Path.Combine(AppContext.BaseDirectory,"Assets","avatar.png"));
try
{
var steam=Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Valve\Steam","SteamPath",null) as string;
if(steam is null)return fallback;
var path=Path.Combine(steam,"config","loginusers.vdf");if(!File.Exists(path))return fallback;
var users=Regex.Matches(File.ReadAllText(path),"\"(\\d{17})\"\\s*\\{(.*?)\\}",RegexOptions.Singleline).Cast<Match>().ToArray();
var user=users.FirstOrDefault(m=>Regex.IsMatch(m.Groups[2].Value,"\"MostRecent\"\\s*\"1\""))??users.FirstOrDefault();
if(user is null)return fallback;
var name=Regex.Match(user.Groups[2].Value,"\"PersonaName\"\\s*\"([^\"]*)\"").Groups[1].Value;
var avatar=Path.Combine(steam,"config","avatarcache",user.Groups[1].Value+".png");
return new(name.Length>0?name:fallback.Name,File.Exists(avatar)?avatar:fallback.Avatar);
}
catch(IOException){return fallback;}catch(UnauthorizedAccessException){return fallback;}
}
}
using System.Text.RegularExpressions;
namespace XFEEDToolBox.Services;
public sealed record LocalUserProfile(string Name,string Avatar)
{
public static LocalUserProfile Read()
{
var fallback=new LocalUserProfile(Environment.UserName,Path.Combine(AppContext.BaseDirectory,"Assets","avatar.png"));
try
{
var steam=Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Valve\Steam","SteamPath",null) as string;
if(steam is null)return fallback;
var path=Path.Combine(steam,"config","loginusers.vdf");if(!File.Exists(path))return fallback;
var users=Regex.Matches(File.ReadAllText(path),"\"(\\d{17})\"\\s*\\{(.*?)\\}",RegexOptions.Singleline).Cast<Match>().ToArray();
var user=users.FirstOrDefault(m=>Regex.IsMatch(m.Groups[2].Value,"\"MostRecent\"\\s*\"1\""))??users.FirstOrDefault();
if(user is null)return fallback;
var name=Regex.Match(user.Groups[2].Value,"\"PersonaName\"\\s*\"([^\"]*)\"").Groups[1].Value;
var avatar=Path.Combine(steam,"config","avatarcache",user.Groups[1].Value+".png");
return new(name.Length>0?name:fallback.Name,File.Exists(avatar)?avatar:fallback.Avatar);
}
catch(IOException){return fallback;}catch(UnauthorizedAccessException){return fallback;}
}
}