v3.4.3.0
- Minor refactoring - Steam games now wait on store api queries, so no DLC will ever be missed from the steam store now - Steam DLC store queries will now only be performed after ALL Steam games have completed their respective store queries, to make sure the steam store api limit isn't hit before all games have queried successfully
This commit is contained in:
parent
2169a6a0ac
commit
dd4be5b91f
4 changed files with 35 additions and 26 deletions
|
@ -5,7 +5,7 @@
|
||||||
<UseWindowsForms>True</UseWindowsForms>
|
<UseWindowsForms>True</UseWindowsForms>
|
||||||
<ApplicationIcon>Resources\ini.ico</ApplicationIcon>
|
<ApplicationIcon>Resources\ini.ico</ApplicationIcon>
|
||||||
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
|
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
|
||||||
<Version>3.4.2.2</Version>
|
<Version>3.4.3.0</Version>
|
||||||
<PackageIcon>Resources\ini.ico</PackageIcon>
|
<PackageIcon>Resources\ini.ico</PackageIcon>
|
||||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||||
<Copyright>2021, pointfeev (https://github.com/pointfeev)</Copyright>
|
<Copyright>2021, pointfeev (https://github.com/pointfeev)</Copyright>
|
||||||
|
|
|
@ -126,29 +126,32 @@ internal partial class SelectForm : CustomForm
|
||||||
}
|
}
|
||||||
if (Directory.Exists(SteamLibrary.InstallPath) && ProgramsToScan.Any(c => c.platform == "Steam"))
|
if (Directory.Exists(SteamLibrary.InstallPath) && ProgramsToScan.Any(c => c.platform == "Steam"))
|
||||||
{
|
{
|
||||||
List<Tuple<string, string, string, int, string>> steamGames = await SteamLibrary.GetGames();
|
List<(string appId, string name, string branch, int buildId, string gameDirectory)> steamGames = await SteamLibrary.GetGames();
|
||||||
foreach (Tuple<string, string, string, int, string> program in steamGames)
|
int totalGames = steamGames.Count;
|
||||||
|
int gamesChecked = 0;
|
||||||
|
foreach ((string appId, string name, string branch, int buildId, string gameDirectory) in steamGames)
|
||||||
{
|
{
|
||||||
string appId = program.Item1;
|
|
||||||
string name = program.Item2;
|
|
||||||
string branch = program.Item3;
|
|
||||||
int buildId = program.Item4;
|
|
||||||
string directory = program.Item5;
|
|
||||||
if (Program.Canceled) return;
|
if (Program.Canceled) return;
|
||||||
Thread.Sleep(0);
|
Thread.Sleep(0);
|
||||||
if (Program.IsGameBlocked(name, directory) || !ProgramsToScan.Any(c => c.id == appId)) continue;
|
if (Program.IsGameBlocked(name, gameDirectory) || !ProgramsToScan.Any(c => c.id == appId))
|
||||||
|
{
|
||||||
|
gamesChecked++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
AddToRemainingGames(name);
|
AddToRemainingGames(name);
|
||||||
Task task = Task.Run(async () =>
|
Task task = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
if (Program.Canceled) return;
|
if (Program.Canceled) return;
|
||||||
Thread.Sleep(0);
|
Thread.Sleep(0);
|
||||||
List<string> dllDirectories = await SteamLibrary.GetDllDirectoriesFromGameDirectory(directory);
|
List<string> dllDirectories = await SteamLibrary.GetDllDirectoriesFromGameDirectory(gameDirectory);
|
||||||
if (dllDirectories is null)
|
if (dllDirectories is null)
|
||||||
{
|
{
|
||||||
|
gamesChecked++;
|
||||||
RemoveFromRemainingGames(name);
|
RemoveFromRemainingGames(name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AppData appData = await SteamStore.QueryStoreAPI(appId);
|
AppData appData = await SteamStore.QueryStoreAPI(appId);
|
||||||
|
gamesChecked++;
|
||||||
VProperty appInfo = await SteamCMD.GetAppInfo(appId, branch, buildId);
|
VProperty appInfo = await SteamCMD.GetAppInfo(appId, branch, buildId);
|
||||||
if (appData is null && appInfo is null)
|
if (appData is null && appInfo is null)
|
||||||
{
|
{
|
||||||
|
@ -171,7 +174,8 @@ internal partial class SelectForm : CustomForm
|
||||||
Task task = Task.Run(async () =>
|
Task task = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
if (Program.Canceled) return;
|
if (Program.Canceled) return;
|
||||||
Thread.Sleep(0);
|
do Thread.Sleep(10); while (!Program.Canceled && gamesChecked < totalGames); // give games steam store api limit priority
|
||||||
|
if (Program.Canceled) return;
|
||||||
string dlcName = null;
|
string dlcName = null;
|
||||||
string dlcIcon = null;
|
string dlcIcon = null;
|
||||||
AppData dlcAppData = await SteamStore.QueryStoreAPI(dlcAppId, true);
|
AppData dlcAppData = await SteamStore.QueryStoreAPI(dlcAppId, true);
|
||||||
|
@ -218,7 +222,7 @@ internal partial class SelectForm : CustomForm
|
||||||
selection.Enabled = allCheckBox.Checked || selection.SelectedDlc.Any() || selection.ExtraDlc.Any();
|
selection.Enabled = allCheckBox.Checked || selection.SelectedDlc.Any() || selection.ExtraDlc.Any();
|
||||||
selection.Id = appId;
|
selection.Id = appId;
|
||||||
selection.Name = appData?.name ?? name;
|
selection.Name = appData?.name ?? name;
|
||||||
selection.RootDirectory = directory;
|
selection.RootDirectory = gameDirectory;
|
||||||
selection.DllDirectories = dllDirectories;
|
selection.DllDirectories = dllDirectories;
|
||||||
selection.IsSteam = true;
|
selection.IsSteam = true;
|
||||||
selection.ProductUrl = "https://store.steampowered.com/app/" + appId;
|
selection.ProductUrl = "https://store.steampowered.com/app/" + appId;
|
||||||
|
@ -413,9 +417,9 @@ internal partial class SelectForm : CustomForm
|
||||||
if (Directory.Exists(ParadoxLauncher.InstallPath))
|
if (Directory.Exists(ParadoxLauncher.InstallPath))
|
||||||
gameChoices.Add(("Paradox", "ParadoxLauncher", "Paradox Launcher", ProgramsToScan is not null && ProgramsToScan.Any(p => p.id == "ParadoxLauncher")));
|
gameChoices.Add(("Paradox", "ParadoxLauncher", "Paradox Launcher", ProgramsToScan is not null && ProgramsToScan.Any(p => p.id == "ParadoxLauncher")));
|
||||||
if (Directory.Exists(SteamLibrary.InstallPath))
|
if (Directory.Exists(SteamLibrary.InstallPath))
|
||||||
foreach (Tuple<string, string, string, int, string> program in await SteamLibrary.GetGames())
|
foreach ((string appId, string name, string branch, int buildId, string gameDirectory) in await SteamLibrary.GetGames())
|
||||||
if (!Program.IsGameBlocked(program.Item2, program.Item5))
|
if (!Program.IsGameBlocked(name, gameDirectory))
|
||||||
gameChoices.Add(("Steam", program.Item1, program.Item2, ProgramsToScan is not null && ProgramsToScan.Any(p => p.id == program.Item1)));
|
gameChoices.Add(("Steam", appId, name, ProgramsToScan is not null && ProgramsToScan.Any(p => p.id == appId)));
|
||||||
if (Directory.Exists(EpicLibrary.EpicManifestsPath))
|
if (Directory.Exists(EpicLibrary.EpicManifestsPath))
|
||||||
foreach (Manifest manifest in await EpicLibrary.GetGames())
|
foreach (Manifest manifest in await EpicLibrary.GetGames())
|
||||||
if (!Program.IsGameBlocked(manifest.DisplayName, manifest.InstallLocation))
|
if (!Program.IsGameBlocked(manifest.DisplayName, manifest.InstallLocation))
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
@ -25,18 +24,18 @@ internal static class SteamLibrary
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task<List<Tuple<string, string, string, int, string>>> GetGames() => await Task.Run(async () =>
|
internal static async Task<List<(string appId, string name, string branch, int buildId, string gameDirectory)>> GetGames() => await Task.Run(async () =>
|
||||||
{
|
{
|
||||||
List<Tuple<string, string, string, int, string>> games = new();
|
List<(string appId, string name, string branch, int buildId, string gameDirectory)> games = new();
|
||||||
List<string> gameLibraryDirectories = await GetLibraryDirectories();
|
List<string> gameLibraryDirectories = await GetLibraryDirectories();
|
||||||
foreach (string libraryDirectory in gameLibraryDirectories)
|
foreach (string libraryDirectory in gameLibraryDirectories)
|
||||||
{
|
{
|
||||||
if (Program.Canceled) return games;
|
if (Program.Canceled) return games;
|
||||||
Thread.Sleep(0);
|
Thread.Sleep(0);
|
||||||
List<Tuple<string, string, string, int, string>> directoryGames = await GetGamesFromLibraryDirectory(libraryDirectory);
|
List<(string appId, string name, string branch, int buildId, string gameDirectory)> directoryGames = await GetGamesFromLibraryDirectory(libraryDirectory);
|
||||||
if (directoryGames is not null)
|
if (directoryGames is not null)
|
||||||
foreach (Tuple<string, string, string, int, string> game in directoryGames)
|
foreach ((string appId, string name, string branch, int buildId, string gameDirectory) game in directoryGames)
|
||||||
if (!games.Any(_game => _game.Item1 == game.Item1))
|
if (!games.Any(_game => _game.appId == game.appId))
|
||||||
games.Add(game);
|
games.Add(game);
|
||||||
}
|
}
|
||||||
return games;
|
return games;
|
||||||
|
@ -68,9 +67,9 @@ internal static class SteamLibrary
|
||||||
return !dllDirectories.Any() ? null : dllDirectories;
|
return !dllDirectories.Any() ? null : dllDirectories;
|
||||||
});
|
});
|
||||||
|
|
||||||
internal static async Task<List<Tuple<string, string, string, int, string>>> GetGamesFromLibraryDirectory(string libraryDirectory) => await Task.Run(() =>
|
internal static async Task<List<(string appId, string name, string branch, int buildId, string gameDirectory)>> GetGamesFromLibraryDirectory(string libraryDirectory) => await Task.Run(() =>
|
||||||
{
|
{
|
||||||
List<Tuple<string, string, string, int, string>> games = new();
|
List<(string appId, string name, string branch, int buildId, string gameDirectory)> games = new();
|
||||||
if (Program.Canceled || !Directory.Exists(libraryDirectory)) return null;
|
if (Program.Canceled || !Directory.Exists(libraryDirectory)) return null;
|
||||||
string[] files = Directory.GetFiles(libraryDirectory, "*.acf");
|
string[] files = Directory.GetFiles(libraryDirectory, "*.acf");
|
||||||
foreach (string file in files)
|
foreach (string file in files)
|
||||||
|
@ -93,7 +92,7 @@ internal static class SteamLibrary
|
||||||
string gameDirectory = libraryDirectory + @"\common\" + installdir;
|
string gameDirectory = libraryDirectory + @"\common\" + installdir;
|
||||||
if (!int.TryParse(appId, out int appIdInt)) continue;
|
if (!int.TryParse(appId, out int appIdInt)) continue;
|
||||||
if (!int.TryParse(buildId, out int buildIdInt)) continue;
|
if (!int.TryParse(buildId, out int buildIdInt)) continue;
|
||||||
games.Add(new(appId, name, branch, buildIdInt, gameDirectory));
|
games.Add((appId, name, branch, buildIdInt, gameDirectory));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return !games.Any() ? null : games;
|
return !games.Any() ? null : games;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using CreamInstaller.Utility;
|
using CreamInstaller.Utility;
|
||||||
|
@ -33,7 +34,7 @@ internal static class SteamStore
|
||||||
string response = await HttpClientManager.EnsureGet($"https://store.steampowered.com/api/appdetails?appids={appId}");
|
string response = await HttpClientManager.EnsureGet($"https://store.steampowered.com/api/appdetails?appids={appId}");
|
||||||
if (response is not null)
|
if (response is not null)
|
||||||
{
|
{
|
||||||
IDictionary<string, JToken> apps = (dynamic)JsonConvert.DeserializeObject(response);
|
IDictionary<string, JToken> apps = JsonConvert.DeserializeObject(response) as dynamic;
|
||||||
foreach (KeyValuePair<string, JToken> app in apps)
|
foreach (KeyValuePair<string, JToken> app in apps)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -72,6 +73,11 @@ internal static class SteamStore
|
||||||
File.Delete(cacheFile);
|
File.Delete(cacheFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!isDlc)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
return await QueryStoreAPI(appId);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue