/// <summary> /// Main function for Steam Account Switcher. Run on load. /// Collects accounts from Steam's loginusers.vdf /// Prepares images and VAC/Limited status /// Prepares HTML Elements string for insertion into the account switcher GUI. /// </summary> /// <returns>Whether account loading is successful, or a path reset is needed (invalid dir saved)</returns> public static async Task LoadProfiles() { Globals.DebugWriteLine(@"[Func:Steam\SteamSwitcherFuncs.LoadProfiles] Loading Steam profiles"); var userAccounts = GetSteamUsers(SteamSettings.LoginUsersVdf()); var vacStatusList = new List <VacStatus>(); var loadedVacCache = LoadVacInfo(ref vacStatusList); // Order if (File.Exists("LoginCache\\Steam\\order.json")) { var savedOrder = JsonConvert.DeserializeObject <List <string> >(await File.ReadAllTextAsync("LoginCache\\Steam\\order.json").ConfigureAwait(false)); if (savedOrder != null) { var index = 0; if (savedOrder is { Count : > 0 })
// Checks if Steam path set properly, and can load. public static bool SteamSettingsValid() => SteamSettings.LoginUsersVdf() != "RESET_PATH";
public static async Task <string> GiExportAccountList(string platform) { Globals.DebugWriteLine(@$ "[Func:Pages\General\GeneralInvocableFuncs.GiExportAccountList] platform={platform}"); platform = BasicPlatforms.PlatformFullName(platform); if (!Directory.Exists(Path.Join("LoginCache", platform))) { _ = ShowToast("error", Lang["Toast_AddAccountsFirst"], Lang["Toast_AddAccountsFirstTitle"], "toastarea"); return(""); } var s = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator; // Different regions use different separators in csv files. List <string> allAccountsTable = new(); if (platform == "Steam") { // Add headings and separator for programs like Excel allAccountsTable.Add("SEP=,"); allAccountsTable.Add("Account name:,Community name:,SteamID:,VAC status:,Last login:,Saved profile image:"); var userAccounts = SteamSwitcherFuncs.GetSteamUsers(SteamSettings.LoginUsersVdf()); var vacStatusList = new List <SteamSwitcherFuncs.VacStatus>(); var loadedVacCache = SteamSwitcherFuncs.LoadVacInfo(ref vacStatusList); foreach (var ua in userAccounts) { var vacInfo = ""; // Get VAC/Limited info if (loadedVacCache) { foreach (var vsi in vacStatusList.Where(vsi => vsi.SteamId == ua.SteamId)) { if (vsi.Vac && vsi.Ltd) { vacInfo += "VAC + Limited"; } else { vacInfo += (vsi.Vac ? "VAC" : "") + (vsi.Ltd ? "Limited" : ""); } break; } } else { vacInfo += "N/A"; } var imagePath = Path.GetFullPath($"{SteamSettings.SteamImagePath + ua.SteamId}.jpg"); allAccountsTable.Add(ua.AccName + s + ua.Name + s + ua.SteamId + s + vacInfo + s + SteamSwitcherFuncs.UnixTimeStampToDateTime(ua.LastLogin) + s + (File.Exists(imagePath) ? imagePath : "Missing from disk")); } } else if (platform == "BattleNet") { // Add headings and separator for programs like Excel allAccountsTable.Add("SEP=,"); allAccountsTable.Add("Email:,BattleTag:,Overwatch Support SR:,Overwatch DPS SR:,Overwatch Tank SR:,Saved profile image:"); await BattleNetSwitcherFuncs.LoadProfiles(); foreach (var ba in BattleNetSettings.Accounts) { var imagePath = Path.GetFullPath($"wwwroot\\img\\profiles\\battlenet\\{ba.Email}.png"); allAccountsTable.Add(ba.Email + s + ba.BTag + s + (ba.OwSupportSr != 0 ? ba.OwSupportSr : "") + s + (ba.OwDpsSr != 0 ? ba.OwDpsSr : "") + s + (ba.OwTankSr != 0 ? ba.OwTankSr : "") + s + (File.Exists(imagePath) ? imagePath : "Missing from disk")); } } else { // Platform does not have specific details other than usernames saved. allAccountsTable.Add("Account name:"); foreach (var accDirectory in Directory.GetDirectories(Path.Join("LoginCache", platform))) { allAccountsTable.Add(Path.GetFileName(accDirectory)); } } var outputFolder = Path.Join("wwwroot", "Exported"); _ = Directory.CreateDirectory(outputFolder); var outputFile = Path.Join(outputFolder, platform + ".csv"); await File.WriteAllLinesAsync(outputFile, allAccountsTable).ConfigureAwait(false); return(Path.Join("Exported", platform + ".csv")); }