public static IEnumerable<SteamProfile> TryToFind() {
// TODO: if (OptionForceValue != null) return OptionForceValue;
Vdf parsed;
try {
var regKey = Registry.CurrentUser.OpenSubKey(@"Software\Valve\Steam");
if (regKey == null) yield break;
var steamPath = regKey.GetValue("SteamPath").ToString();
var config = File.ReadAllText(Path.Combine(steamPath, @"config", @"loginusers.vdf"));
parsed = Vdf.Parse(config).Children.GetValueOrDefault("users");
if (parsed == null) {
throw new Exception("Config is invalid");
}
} catch (Exception e) {
NonfatalError.Notify("Can’t get Steam ID from its config", e);
yield break;
}
string selectedId = null;
try {
var selectedKey = new IniFile(FileUtils.GetRaceIniFilename());
selectedId = selectedKey["REMOTE"].GetNonEmpty("GUID");
} catch (Exception) {
// ignored
}
Vdf selectedSection;
if (selectedId != null && parsed.Children.TryGetValue(selectedId, out selectedSection)) {
yield return new SteamProfile(selectedId, selectedSection.Values.GetValueOrDefault("PersonaName"));
}
foreach (var pair in parsed.Children.Where(x => x.Key != selectedId)) {
yield return new SteamProfile(pair.Key, pair.Value.Values.GetValueOrDefault("PersonaName"));
}
}