From 84419bec2ad042d4ead3acf00bfaf909955ef084 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Fri, 8 Jul 2016 09:48:15 +0200 Subject: [PATCH] Use events for handling Save() --- ArchiSteamFarm/GlobalDatabase.cs | 17 +++++++++++++---- ArchiSteamFarm/JsonStorageServerListProvider.cs | 16 ++-------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/ArchiSteamFarm/GlobalDatabase.cs b/ArchiSteamFarm/GlobalDatabase.cs index 29d1c4309..46488bb04 100644 --- a/ArchiSteamFarm/GlobalDatabase.cs +++ b/ArchiSteamFarm/GlobalDatabase.cs @@ -57,7 +57,7 @@ namespace ArchiSteamFarm { [JsonProperty(Required = Required.DisallowNull)] [SuppressMessage("ReSharper", "AutoPropertyCanBeMadeGetOnly.Local")] - internal JsonStorageServerListProvider ServerListProvider { get; private set; } + internal JsonStorageServerListProvider ServerListProvider { get; private set; } = new JsonStorageServerListProvider(); private readonly object FileLock = new object(); @@ -88,11 +88,20 @@ namespace ArchiSteamFarm { } globalDatabase.FilePath = filePath; - globalDatabase.ServerListProvider.GlobalDatabase = globalDatabase; + globalDatabase.ServerListProvider.ServerListUpdated += globalDatabase.OnServerListUpdated; return globalDatabase; } + private void OnServerListUpdated(object sender, EventArgs e) { + if ((sender == null) || (e == null)) { + Logging.LogNullError(nameof(sender) + " || " + nameof(e)); + return; + } + + Save(); + } + // This constructor is used when creating new database private GlobalDatabase(string filePath) : this() { if (string.IsNullOrEmpty(filePath)) { @@ -106,10 +115,10 @@ namespace ArchiSteamFarm { // This constructor is used only by deserializer [SuppressMessage("ReSharper", "UnusedMember.Local")] private GlobalDatabase() { - ServerListProvider = new JsonStorageServerListProvider(this); + ServerListProvider.ServerListUpdated += OnServerListUpdated; } - internal void Save() { + private void Save() { string json = JsonConvert.SerializeObject(this, CustomSerializerSettings); if (string.IsNullOrEmpty(json)) { Logging.LogNullError(nameof(json)); diff --git a/ArchiSteamFarm/JsonStorageServerListProvider.cs b/ArchiSteamFarm/JsonStorageServerListProvider.cs index 6914964fc..4f0923ee8 100644 --- a/ArchiSteamFarm/JsonStorageServerListProvider.cs +++ b/ArchiSteamFarm/JsonStorageServerListProvider.cs @@ -37,19 +37,7 @@ namespace ArchiSteamFarm { [SuppressMessage("ReSharper", "FieldCanBeMadeReadOnly.Local")] private HashSet Servers = new HashSet(); - internal GlobalDatabase GlobalDatabase { private get; set; } - - internal JsonStorageServerListProvider(GlobalDatabase globalDatabase) { - if (globalDatabase == null) { - throw new ArgumentNullException(nameof(globalDatabase)); - } - - GlobalDatabase = globalDatabase; - } - - // This constructor is used only by deserializer - [SuppressMessage("ReSharper", "UnusedMember.Local")] - private JsonStorageServerListProvider() { } + internal event EventHandler ServerListUpdated = delegate { }; public Task> FetchServerListAsync() => Task.FromResult(Servers.Select(endpoint => endpoint)); @@ -64,7 +52,7 @@ namespace ArchiSteamFarm { Servers.Add(endpoint); } - GlobalDatabase.Save(); + ServerListUpdated(this, EventArgs.Empty); return Task.Delay(0); }