mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2026-01-01 06:00:46 +00:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user