private static BindingList <Library> DetectSteamLibraries(string steamPath, BindingList <Library> libraryList) { SteamConfigFile steamConfigFile = SteamConfigFileReader.ReadLibraryList(steamPath + "\\steamapps\\libraryfolders.vdf"); if (steamConfigFile.ConfigType != "LibraryFolders") { ErrorHandler.Instance.ShowCriticalErrorMessage(steamPath + "\\steamapps\\libraryfolders.vdf has wrong format or it is not supported anymore. Try running steam once to fix corrupted file."); } //Adds Main Steam Library Library library = new Library(); library.LibraryDirectory = steamPath; libraryList.Add(library); //Adds Other Steam Libraries foreach (SteamConfigFileProperty steamConfigFileProperty in steamConfigFile.SteamConfigFilePropertyList) { if (steamConfigFileProperty.Name.Equals("TimeNextStatsReport") || steamConfigFileProperty.Name.Equals("ContentStatsID")) { continue; } if (!Directory.Exists(steamConfigFileProperty.Value + "\\SteamApps")) { ErrorHandler.Instance.Log(steamConfigFileProperty.Value + "\\SteamApps" + "does not exist. Removed from list of libraries."); continue; } library = new Library(); library.LibraryDirectory = steamConfigFileProperty.Value; libraryList.Add(library); } bool isLibraryChaged = false; foreach (Library libraryLoop in libraryList) { string libraryDirectory = libraryLoop.LibraryDirectory; if (libraryDirectory.EndsWith("_removed")) { libraryDirectory = StringOperations.RemoveStringAtEnd(libraryDirectory, "_removed"); libraryDirectory = StringOperations.RenamePathWhenExists(libraryDirectory); FileSystem.RenameDirectory(libraryLoop.LibraryDirectory, Path.GetFileName(libraryDirectory)); library.LibraryDirectory = libraryDirectory; isLibraryChaged = true; } } if (isLibraryChaged) { SteamConfigFileWriter.WriteLibraryList(); } return(libraryList); }
public static SteamConfigFile ReadLibraryList(string steamPath) { SteamConfigFile steamConfigFile = new SteamConfigFile(); StreamReader streamReader = null; try { streamReader = new StreamReader(steamPath); // "LibraryFolders" steamConfigFile.ConfigType = StringOperations.GetSubstringByString('"', '"', streamReader.ReadLine()); //{ /* * { * "TimeNextStatsReport" "1473422083" * "ContentStatsID" "-3627002011478449057" * "1" "D:\\Games\\SteamLibrary" * } */ string line; while ((line = streamReader.ReadLine()) != null) { if (!(line.IndexOf("}", StringComparison.Ordinal) == -1 && line.IndexOf("{", StringComparison.Ordinal) == -1)) { continue; } line = line.Replace("\\\\", "\\"); SteamConfigFileProperty steamConfigFileProperty = new SteamConfigFileProperty(); steamConfigFileProperty.Name = StringOperations.GetSubstringByString('"', '"', line); line = line.Substring(line.IndexOf('"') + 1); line = line.Substring(line.IndexOf('"') + 1); steamConfigFileProperty.Value = StringOperations.GetSubstringByString('"', '"', line); steamConfigFile.SteamConfigFilePropertyList.Add(steamConfigFileProperty); } } catch (Exception ex) when(ex is FileNotFoundException || ex is DirectoryNotFoundException) { ErrorHandler.Instance.ShowCriticalErrorMessage("File with list of libraries does not exist. Please run Steam atleast once.", ex); } finally { streamReader?.Close(); } return(steamConfigFile); }
private static void DetectSteamGames(Library library) { string[] filePaths = Directory.GetFiles(library.SteamAppsDirectory, "*.acf"); SortableBindingList <Game> gamesList = new SortableBindingList <Game>(); foreach (string file in filePaths) { SteamConfigFile steamConfigFile = SteamConfigFileReader.ReadACF(file); if (steamConfigFile.ConfigType != "AppState") { ErrorHandler.Instance.ShowCriticalErrorMessage(file + " has wrong format or it is not supported anymore. Try running steam once to fix corrupted file."); } Game game = new Game(); foreach (SteamConfigFileProperty steamConfigFileProperty in steamConfigFile.SteamConfigFilePropertyList) { if (steamConfigFileProperty.Name.Equals("appID", StringComparison.CurrentCultureIgnoreCase)) { game.AppID = Convert.ToInt32(steamConfigFileProperty.Value); } else if (steamConfigFileProperty.Name.Equals("name", StringComparison.CurrentCultureIgnoreCase)) { game.GameName = steamConfigFileProperty.Value; } else if (steamConfigFileProperty.Name.Equals("installdir", StringComparison.CurrentCultureIgnoreCase)) { game.GameFolder = steamConfigFileProperty.Value; } else if (steamConfigFileProperty.Name.Equals("SizeOnDisk", StringComparison.CurrentCultureIgnoreCase)) { game.SizeOnDisk = Convert.ToInt64(steamConfigFileProperty.Value); } } if (!Directory.Exists(library.SteamAppsDirectory + "\\common\\" + game.GameFolder)) { ErrorHandler.Instance.Log(library.SteamAppsDirectory + "\\common\\" + game.GameFolder + "does not exist. Removed from library list."); continue; } game.RealSizeOnDiskIsChecked = false; gamesList.Add(game); } library.GamesList = gamesList; }
// ReSharper disable once InconsistentNaming public static SteamConfigFile ReadACF(string steamPath) { SteamConfigFile steamConfigFile = new SteamConfigFile(); using (StreamReader streamReader = new StreamReader(steamPath)) { // "AppState" steamConfigFile.ConfigType = StringOperations.GetSubstringByString('"', '"', streamReader.ReadLine()); //{ /* * "appID" "33900" * "Universe" "1" * "name" "Arma 2" * "StateFlags" "68" * "installdir" "Arma 2" * "SizeOnDisk" "4581412743" */ string line; while ((line = streamReader.ReadLine()) != null) { if (!(line.IndexOf("}", StringComparison.Ordinal) == -1 && line.IndexOf("{", StringComparison.Ordinal) == -1)) { continue; } line = line.Replace("\\\\", "\\"); SteamConfigFileProperty steamConfigFileProperty = new SteamConfigFileProperty(); steamConfigFileProperty.Name = StringOperations.GetSubstringByString('"', '"', line); line = line.Substring(line.IndexOf('"') + 1); line = line.Substring(line.IndexOf('"') + 1); steamConfigFileProperty.Value = StringOperations.GetSubstringByString('"', '"', line); steamConfigFile.SteamConfigFilePropertyList.Add(steamConfigFileProperty); } } return(steamConfigFile); }