From 61873cfd7267578d8e80263b45d1aadd2050403f Mon Sep 17 00:00:00 2001 From: JustArchi Date: Tue, 16 Feb 2021 19:27:00 +0100 Subject: [PATCH] Avoid complete purge on each PICS restart There is no easy way for us to retrieve access tokens again without a full relog procedure, and those are needed for refresh of packages, which should also be optional due to excessive amount of PICS restarts emitted by Steam. At worst, we'll just have outdated data until a full relog procedure, as opposed to having no data at all until relog procedure... --- ArchiSteamFarm/GlobalDatabase.cs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/ArchiSteamFarm/GlobalDatabase.cs b/ArchiSteamFarm/GlobalDatabase.cs index 116f65898..8ae52ede5 100644 --- a/ArchiSteamFarm/GlobalDatabase.cs +++ b/ArchiSteamFarm/GlobalDatabase.cs @@ -191,19 +191,21 @@ namespace ArchiSteamFarm { return; } - if (!PackagesData.IsEmpty) { - PackagesData.Clear(); - } - - if (!PackagesAccessTokens.IsEmpty) { - PackagesAccessTokens.Clear(); - } - LastChangeNumber = currentChangeNumber; - foreach (Bot bot in Bot.Bots.Values.Where(bot => bot.IsConnectedAndLoggedOn && !bot.OwnedPackageIDs.IsEmpty)) { - await RefreshPackages(bot, bot.OwnedPackageIDs.Keys.ToDictionary(packageID => packageID, _ => uint.MinValue)).ConfigureAwait(false); + Bot? refreshBot = Bot.Bots.Values.FirstOrDefault(bot => bot.IsConnectedAndLoggedOn); + + if (refreshBot == null) { + return; } + + Dictionary packageIDs = Bot.Bots.Values.SelectMany(bot => bot.OwnedPackageIDs.Keys).ToDictionary(packageID => packageID, _ => currentChangeNumber); + + if (packageIDs.Count == 0) { + return; + } + + await RefreshPackages(refreshBot, packageIDs).ConfigureAwait(false); } internal void RefreshPackageAccessTokens(IReadOnlyDictionary packageAccessTokens) { @@ -237,7 +239,7 @@ namespace ArchiSteamFarm { await PackagesRefreshSemaphore.WaitAsync().ConfigureAwait(false); try { - HashSet packageIDs = packages.Where(package => (package.Key != 0) && (!PackagesData.TryGetValue(package.Key, out (uint ChangeNumber, ImmutableHashSet? AppIDs) packageData) || (packageData.ChangeNumber < package.Value))).Select(package => package.Key).ToHashSet(); + HashSet packageIDs = packages.Where(package => (package.Key != 0) && (!PackagesData.TryGetValue(package.Key, out (uint ChangeNumber, ImmutableHashSet? AppIDs) previousData) || (previousData.ChangeNumber < package.Value))).Select(package => package.Key).ToHashSet(); if (packageIDs.Count == 0) { return;