XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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;}
    }
}