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.
This commit is contained in:
JustArchi
2021-01-03 21:58:41 +01:00
parent 273a6b0fbe
commit cc1eb6bee2
3 changed files with 40 additions and 18 deletions

View File

@@ -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);
}
}

View File

@@ -64,8 +64,10 @@ namespace ArchiSteamFarm.Plugins {
}
internal static async Task<uint> GetChangeNumberToStartFrom() {
uint lastChangeNumber = ASF.GlobalDatabase?.LastChangeNumber ?? 0;
if (ActivePlugins == null) {
return 0;
return lastChangeNumber;
}
IList<uint> 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<ICrossProcessSemaphore> GetCrossProcessSemaphore(string objectName) {

View File

@@ -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);