From 24a7093674af3f902be11917350805e851c488f9 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Wed, 21 Sep 2022 17:33:03 +0200 Subject: [PATCH] Ensured, that last minute changes are written to disk --- .../UI WinForms/Components/Translation.cs | 17 ++++++++----- I18N Commander/UI WinForms/Main.Designer.cs | 1 + I18N Commander/UI WinForms/Main.cs | 24 +++++++++++++++++++ 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/I18N Commander/UI WinForms/Components/Translation.cs b/I18N Commander/UI WinForms/Components/Translation.cs index 8536f08..28fefe1 100644 --- a/I18N Commander/UI WinForms/Components/Translation.cs +++ b/I18N Commander/UI WinForms/Components/Translation.cs @@ -50,12 +50,6 @@ public sealed partial class Translation : UserControl } } - private async void SaveChanges(object? sender, ElapsedEventArgs e) - { - if (this.currentTranslationId > -1) - await TranslationProcessor.SaveChangedTranslation(this.currentTranslationId, this.textBox.Text); - } - public async Task Configure(DataModel.Database.Translation translation) { this.isLoading = true; @@ -78,5 +72,16 @@ public sealed partial class Translation : UserControl this.saveTimer.Stop(); this.saveTimer.Start(); + if(this.ParentForm is UI_WinForms.Main main) + main.AddDeferredSaveOperation(this.currentTranslationId, () => this.SaveChanges(null, null)); + } + + private async void SaveChanges(object? sender, ElapsedEventArgs e) + { + if (this.currentTranslationId > -1) + await TranslationProcessor.SaveChangedTranslation(this.currentTranslationId, this.textBox.Text); + + if(this.ParentForm is UI_WinForms.Main main) + main.RemoveDeferredSaveOperation(this.currentTranslationId); } } \ No newline at end of file diff --git a/I18N Commander/UI WinForms/Main.Designer.cs b/I18N Commander/UI WinForms/Main.Designer.cs index edf901e..de086d5 100644 --- a/I18N Commander/UI WinForms/Main.Designer.cs +++ b/I18N Commander/UI WinForms/Main.Designer.cs @@ -52,6 +52,7 @@ this.Name = "Main"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "I18N Commander"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing); this.ResumeLayout(false); } diff --git a/I18N Commander/UI WinForms/Main.cs b/I18N Commander/UI WinForms/Main.cs index 70a2881..0e42dbd 100644 --- a/I18N Commander/UI WinForms/Main.cs +++ b/I18N Commander/UI WinForms/Main.cs @@ -2,8 +2,32 @@ namespace UI_WinForms; public partial class Main : Form { + private readonly Dictionary deferredSaveOperations = new(); + public Main() { this.InitializeComponent(); } + + private void Main_FormClosing(object sender, FormClosingEventArgs e) + { + foreach (var (_, action) in this.deferredSaveOperations) + action(); + + this.deferredSaveOperations.Clear(); + } + + internal void AddDeferredSaveOperation(int id, Action action) + { + if (this.deferredSaveOperations.ContainsKey(id)) + this.deferredSaveOperations.Remove(id); + + this.deferredSaveOperations.Add(id, action); + } + + internal void RemoveDeferredSaveOperation(int id) + { + if (this.deferredSaveOperations.ContainsKey(id)) + this.deferredSaveOperations.Remove(id); + } } \ No newline at end of file