diff --git a/SrcMod/Shell/Miscellaneous/GlobalUsings.cs b/SrcMod/Shell/Miscellaneous/GlobalUsings.cs index 92bd543..03f416c 100644 --- a/SrcMod/Shell/Miscellaneous/GlobalUsings.cs +++ b/SrcMod/Shell/Miscellaneous/GlobalUsings.cs @@ -7,6 +7,7 @@ global using SrcMod.Shell.Extensions; global using SrcMod.Shell.Interop; global using SrcMod.Shell.Modules.ObjectModels; global using SrcMod.Shell.ObjectModels; +global using SrcMod.Shell.ObjectModels.Steam; global using System; global using System.Collections; global using System.Collections.Generic; diff --git a/SrcMod/Shell/ObjectModels/Config.cs b/SrcMod/Shell/ObjectModels/Config.cs index 197b7e6..db93907 100644 --- a/SrcMod/Shell/ObjectModels/Config.cs +++ b/SrcMod/Shell/ObjectModels/Config.cs @@ -65,7 +65,28 @@ public class Config internal Config() { - GameDirectories = Array.Empty(); + // TODO: This won't work if the steam installation is somewhere else. + const string gameDirDataPath = @"C:\Program Files (x86)\Steam\steamapps\libraryfolders.vdf"; + + VkvSerializer serializer = new(new() + { + useEscapeCodes = true, + useQuotes = true + }); + FileStream gameDirData = new(gameDirDataPath, FileMode.Open); + + LibraryFolder[]? folders = serializer.Deserialize(gameDirData); + if (folders is null) + { + Write("[WARNING] Error parsing steam game directories."); + GameDirectories = Array.Empty(); + } + else + { + GameDirectories = new string[folders.Length]; + for (int i = 0; i < folders.Length; i++) GameDirectories[i] = folders[i].path; + } + RunUnsafeCommands = AskMode.Ask; } diff --git a/SrcMod/Shell/ObjectModels/Steam/LibraryFolder.cs b/SrcMod/Shell/ObjectModels/Steam/LibraryFolder.cs new file mode 100644 index 0000000..a93cbb0 --- /dev/null +++ b/SrcMod/Shell/ObjectModels/Steam/LibraryFolder.cs @@ -0,0 +1,13 @@ +namespace SrcMod.Shell.ObjectModels.Steam; + +public class LibraryFolder +{ + public string path; + public Dictionary apps; + + public LibraryFolder() + { + path = string.Empty; + apps = new(); + } +}