From a84d16a1dddeb478feaca4eb820f833b4eaea730 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sun, 7 Jun 2020 20:00:06 +0200 Subject: [PATCH] Expose ASF's PackagesData for optional plugin usage --- ArchiSteamFarm/Bot.cs | 2 +- ArchiSteamFarm/GlobalDatabase.cs | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 80da0fdfe..2d0ea9d24 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -2363,7 +2363,7 @@ namespace ArchiSteamFarm { foreach (SteamApps.LicenseListCallback.License license in callback.LicenseList.Where(license => license.PackageID != 0)) { OwnedPackageIDs[license.PackageID] = (license.PaymentMethod, license.TimeCreated, license.AccessToken); - if (!ASF.GlobalDatabase.PackagesData.TryGetValue(license.PackageID, out (uint ChangeNumber, HashSet AppIDs) packageData) || (packageData.ChangeNumber < license.LastChangeNumber) || (packageData.AppIDs == null)) { + if (!ASF.GlobalDatabase.PackagesDataReadOnly.TryGetValue(license.PackageID, out (uint ChangeNumber, HashSet AppIDs) packageData) || (packageData.ChangeNumber < license.LastChangeNumber) || (packageData.AppIDs == null)) { packagesToRefresh[license.PackageID] = (uint) license.LastChangeNumber; } } diff --git a/ArchiSteamFarm/GlobalDatabase.cs b/ArchiSteamFarm/GlobalDatabase.cs index 18de57bc3..db29af354 100644 --- a/ArchiSteamFarm/GlobalDatabase.cs +++ b/ArchiSteamFarm/GlobalDatabase.cs @@ -35,14 +35,18 @@ using Newtonsoft.Json; namespace ArchiSteamFarm { public sealed class GlobalDatabase : SerializableFile { [JsonProperty(Required = Required.DisallowNull)] + [PublicAPI] public readonly Guid Guid = Guid.NewGuid(); - [JsonProperty(Required = Required.DisallowNull)] - internal readonly ConcurrentDictionary AppIDs)> PackagesData = new ConcurrentDictionary AppIDs)>(); + [PublicAPI] + public IReadOnlyDictionary AppIDs)> PackagesDataReadOnly => PackagesData; [JsonProperty(Required = Required.DisallowNull)] internal readonly InMemoryServerListProvider ServerListProvider = new InMemoryServerListProvider(); + [JsonProperty(Required = Required.DisallowNull)] + private readonly ConcurrentDictionary AppIDs)> PackagesData = new ConcurrentDictionary AppIDs)>(); + private readonly SemaphoreSlim PackagesRefreshSemaphore = new SemaphoreSlim(1, 1); internal uint CellID {