From cc1eb6bee210c80a26cd94b434c3796c07f16958 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sun, 3 Jan 2021 21:58:41 +0100 Subject: [PATCH] Start saving LastChangeNumber in GlobalDatabase Due to the fact that we're now dependent on PICS changes ourselves, we have to start saving our own LastChangeNumber in order to avoid invalidating cache every time. --- ArchiSteamFarm/GlobalDatabase.cs | 38 ++++++++++++++++++++++----- ArchiSteamFarm/Plugins/PluginsCore.cs | 14 +++++----- ArchiSteamFarm/SteamPICSChanges.cs | 6 +---- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/ArchiSteamFarm/GlobalDatabase.cs b/ArchiSteamFarm/GlobalDatabase.cs index e28c8ff35..2992c0ad4 100644 --- a/ArchiSteamFarm/GlobalDatabase.cs +++ b/ArchiSteamFarm/GlobalDatabase.cs @@ -72,9 +72,25 @@ namespace ArchiSteamFarm { } } + internal uint LastChangeNumber { + get => BackingLastChangeNumber; + + set { + if (BackingLastChangeNumber == value) { + return; + } + + BackingLastChangeNumber = value; + Utilities.InBackground(Save); + } + } + [JsonProperty(PropertyName = "_" + nameof(CellID), Required = Required.DisallowNull)] private uint BackingCellID; + [JsonProperty(PropertyName = "_" + nameof(LastChangeNumber), Required = Required.DisallowNull)] + private uint BackingLastChangeNumber; + private GlobalDatabase(string filePath) : this() { if (string.IsNullOrEmpty(filePath)) { throw new ArgumentNullException(nameof(filePath)); @@ -162,21 +178,31 @@ namespace ArchiSteamFarm { return result; } - internal void OnPICSChangesRestart() { - bool save = false; + internal async Task OnPICSChangesRestart([NotNull] Bot bot, uint currentChangeNumber) { + if (bot == null) { + throw new ArgumentNullException(nameof(bot)); + } + + if (currentChangeNumber == 0) { + throw new ArgumentOutOfRangeException(nameof(currentChangeNumber)); + } + + if (currentChangeNumber <= LastChangeNumber) { + return; + } if (!PackagesData.IsEmpty) { PackagesData.Clear(); - save = true; } if (!PackagesAccessTokens.IsEmpty) { PackagesAccessTokens.Clear(); - save = true; } - if (save) { - Utilities.InBackground(Save); + LastChangeNumber = currentChangeNumber; + + if (bot.OwnedPackageIDs.Count > 0) { + await RefreshPackages(bot, bot.OwnedPackageIDs.Keys.ToDictionary(packageID => packageID, _ => uint.MinValue)).ConfigureAwait(false); } } diff --git a/ArchiSteamFarm/Plugins/PluginsCore.cs b/ArchiSteamFarm/Plugins/PluginsCore.cs index b77ba5c33..c05622093 100644 --- a/ArchiSteamFarm/Plugins/PluginsCore.cs +++ b/ArchiSteamFarm/Plugins/PluginsCore.cs @@ -64,8 +64,10 @@ namespace ArchiSteamFarm.Plugins { } internal static async Task GetChangeNumberToStartFrom() { + uint lastChangeNumber = ASF.GlobalDatabase?.LastChangeNumber ?? 0; + if (ActivePlugins == null) { - return 0; + return lastChangeNumber; } IList results; @@ -75,16 +77,14 @@ namespace ArchiSteamFarm.Plugins { } catch (Exception e) { ASF.ArchiLogger.LogGenericException(e); - return 0; + return lastChangeNumber; } - uint changeNumberToStartFrom = uint.MaxValue; - - foreach (uint result in results.Where(result => (result > 0) && (result < changeNumberToStartFrom))) { - changeNumberToStartFrom = result; + foreach (uint result in results.Where(result => (result > 0) && (result < lastChangeNumber))) { + lastChangeNumber = result; } - return changeNumberToStartFrom == uint.MaxValue ? 0 : changeNumberToStartFrom; + return lastChangeNumber; } internal static async Task GetCrossProcessSemaphore(string objectName) { diff --git a/ArchiSteamFarm/SteamPICSChanges.cs b/ArchiSteamFarm/SteamPICSChanges.cs index 267b5b739..ad8377332 100644 --- a/ArchiSteamFarm/SteamPICSChanges.cs +++ b/ArchiSteamFarm/SteamPICSChanges.cs @@ -90,11 +90,7 @@ namespace ArchiSteamFarm { if (picsChanges.RequiresFullAppUpdate || picsChanges.RequiresFullPackageUpdate || ((picsChanges.AppChanges.Count == 0) && (picsChanges.PackageChanges.Count == 0))) { if (ASF.GlobalDatabase != null) { - ASF.GlobalDatabase.OnPICSChangesRestart(); - - if (refreshBot.OwnedPackageIDs.Count > 0) { - await ASF.GlobalDatabase.RefreshPackages(refreshBot, refreshBot.OwnedPackageIDs.Keys.ToDictionary(packageID => packageID, _ => uint.MinValue)).ConfigureAwait(false); - } + await ASF.GlobalDatabase.OnPICSChangesRestart(refreshBot, picsChanges.CurrentChangeNumber).ConfigureAwait(false); } await PluginsCore.OnPICSChangesRestart(picsChanges.CurrentChangeNumber).ConfigureAwait(false);