Use events for handling Save()

This commit is contained in:
JustArchi
2016-07-08 09:48:15 +02:00
parent deed19e732
commit 84419bec2a
2 changed files with 15 additions and 18 deletions

View File

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

View File

@@ -37,19 +37,7 @@ namespace ArchiSteamFarm {
[SuppressMessage("ReSharper", "FieldCanBeMadeReadOnly.Local")]
private HashSet<IPEndPoint> Servers = new HashSet<IPEndPoint>();
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<IEnumerable<IPEndPoint>> 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);
}