From 25f6e664f2a68392d9bba2b53eead3e7473495d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BC=98=E9=9F=AC?= Date: Wed, 12 May 2021 00:37:28 +0800 Subject: [PATCH] add auto save for all setting that has been registered, and remove Separate Save --- Flow.Launcher/PublicAPIInstance.cs | 28 +++++++++++++------ .../Main.cs | 7 +---- .../Flow.Launcher.Plugin.Calculator/Main.cs | 12 +------- .../ViewModels/SettingsViewModel.cs | 7 +---- .../Main.cs | 7 +---- .../ViewModels/SettingsViewModel.cs | 5 ---- Plugins/Flow.Launcher.Plugin.Program/Main.cs | 1 - Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 8 +----- Plugins/Flow.Launcher.Plugin.Url/Main.cs | 9 ++---- .../Flow.Launcher.Plugin.WebSearch/Main.cs | 6 +--- 10 files changed, 27 insertions(+), 63 deletions(-) diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 8b07a7e74..3ddaec4d4 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -76,6 +76,7 @@ namespace Flow.Launcher public void SaveAppAllSettings() { + SaveAllJsonStorage(); _mainVM.Save(); _settingsVM.Save(); PluginManager.Save(); @@ -133,32 +134,41 @@ namespace Flow.Launcher public void LogException(string className, string message, Exception e, [CallerMemberName] string methodName = "") => Log.Exception(className, message, e, methodName); - private readonly Dictionary PluginJsonStorages = new Dictionary(); + private readonly Dictionary _pluginJsonStorages = new(); + private void SaveAllJsonStorage() + { + foreach (var value in _pluginJsonStorages.Values) + { + var method = value.GetType().GetMethod("Save"); + method?.Invoke(value, null); + } + } + public T LoadJsonStorage() where T : new() { var type = typeof(T); - if (!PluginJsonStorages.ContainsKey(type)) - PluginJsonStorages[type] = new PluginJsonStorage(); + if (!_pluginJsonStorages.ContainsKey(type)) + _pluginJsonStorages[type] = new PluginJsonStorage(); - return ((PluginJsonStorage) PluginJsonStorages[type]).Load(); + return ((PluginJsonStorage) _pluginJsonStorages[type]).Load(); } public void SaveJsonStorage() where T : new() { var type = typeof(T); - if (!PluginJsonStorages.ContainsKey(type)) - PluginJsonStorages[type] = new PluginJsonStorage(); + if (!_pluginJsonStorages.ContainsKey(type)) + _pluginJsonStorages[type] = new PluginJsonStorage(); - ((PluginJsonStorage) PluginJsonStorages[type]).Save(); + ((PluginJsonStorage) _pluginJsonStorages[type]).Save(); } public void SaveJsonStorage(T settings) where T : new() { var type = typeof(T); - PluginJsonStorages[type] = new PluginJsonStorage(settings); + _pluginJsonStorages[type] = new PluginJsonStorage(settings); - ((PluginJsonStorage) PluginJsonStorages[type]).Save(); + ((PluginJsonStorage) _pluginJsonStorages[type]).Save(); } public event FlowLauncherGlobalKeyboardEventHandler GlobalKeyboardEvent; diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index fea672596..f76946644 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -12,7 +12,7 @@ using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Plugin.BrowserBookmark { - public class Main : ISettingProvider, IPlugin, IReloadable, IPluginI18n, IContextMenu, ISavable + public class Main : ISettingProvider, IPlugin, IReloadable, IPluginI18n, IContextMenu { private PluginInitContext context; @@ -29,11 +29,6 @@ namespace Flow.Launcher.Plugin.BrowserBookmark cachedBookmarks = Bookmarks.LoadAllBookmarks(); } - public void Save() - { - context.API.SaveJsonStorage(); - } - public List Query(Query query) { string param = query.Search.TrimStart(); diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs index 3c60bbf5a..96ff6edcb 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs @@ -12,7 +12,7 @@ using Flow.Launcher.Plugin.Caculator.Views; namespace Flow.Launcher.Plugin.Caculator { - public class Main : IPlugin, IPluginI18n, ISavable, ISettingProvider + public class Main : IPlugin, IPluginI18n, ISettingProvider { private static readonly Regex RegValidExpressChar = new Regex( @"^(" + @@ -30,11 +30,6 @@ namespace Flow.Launcher.Plugin.Caculator private static Settings _settings; private static SettingsViewModel _viewModel; - static Main() - { - - } - public void Init(PluginInitContext context) { Context = context; @@ -187,10 +182,5 @@ namespace Flow.Launcher.Plugin.Caculator { return new CalculatorSettings(_viewModel); } - - public void Save() - { - _viewModel.Save(); - } } } diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs index bc5433254..998f540b7 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs @@ -8,7 +8,7 @@ using Flow.Launcher.Infrastructure.UserSettings; namespace Flow.Launcher.Plugin.Caculator.ViewModels { - public class SettingsViewModel : BaseModel, ISavable + public class SettingsViewModel : BaseModel { private readonly PluginJsonStorage _storage; @@ -21,10 +21,5 @@ namespace Flow.Launcher.Plugin.Caculator.ViewModels public Settings Settings { get; set; } public IEnumerable MaxDecimalPlacesRange => Enumerable.Range(1, 20); - - public void Save() - { - _storage.Save(); - } } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index f8f5d2378..bc5c0ef96 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -12,7 +12,7 @@ using System.Windows; namespace Flow.Launcher.Plugin.PluginsManager { - public class Main : ISettingProvider, IAsyncPlugin, ISavable, IContextMenu, IPluginI18n, IAsyncReloadable + public class Main : ISettingProvider, IAsyncPlugin, IContextMenu, IPluginI18n, IAsyncReloadable { internal PluginInitContext Context { get; set; } @@ -79,11 +79,6 @@ namespace Flow.Launcher.Plugin.PluginsManager }; } - public void Save() - { - viewModel.Save(); - } - public string GetTranslatedPluginTitle() { return Context.API.GetTranslation("plugin_pluginsmanager_plugin_name"); diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/SettingsViewModel.cs index aab7c40b5..fe9648371 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/SettingsViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/SettingsViewModel.cs @@ -17,10 +17,5 @@ namespace Flow.Launcher.Plugin.PluginsManager.ViewModels storage = new PluginJsonStorage(); Settings = settings; } - - public void Save() - { - storage.Save(); - } } } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index 8efd4bbd9..3d9afa68b 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -33,7 +33,6 @@ namespace Flow.Launcher.Plugin.Program public void Save() { - _context.API.SaveJsonStorage(); _win32Storage.Save(_win32s); _uwpStorage.Save(_uwps); } diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index f38ac1932..607231590 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -18,7 +18,7 @@ using Keys = System.Windows.Forms.Keys; namespace Flow.Launcher.Plugin.Shell { - public class Main : IPlugin, ISettingProvider, IPluginI18n, IContextMenu, ISavable + public class Main : IPlugin, ISettingProvider, IPluginI18n, IContextMenu { private const string Image = "Images/shell.png"; private PluginInitContext context; @@ -27,12 +27,6 @@ namespace Flow.Launcher.Plugin.Shell private Settings _settings; - public void Save() - { - context.API.SaveJsonStorage(); - } - - public List Query(Query query) { List results = new List(); diff --git a/Plugins/Flow.Launcher.Plugin.Url/Main.cs b/Plugins/Flow.Launcher.Plugin.Url/Main.cs index d2189ef49..4bf8c6d59 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Url/Main.cs @@ -7,7 +7,7 @@ using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Plugin.Url { - public class Main : ISettingProvider,IPlugin, IPluginI18n, ISavable + public class Main : ISettingProvider,IPlugin, IPluginI18n { //based on https://gist.github.com/dperini/729294 private const string urlPattern = "^" + @@ -46,12 +46,7 @@ namespace Flow.Launcher.Plugin.Url private PluginInitContext context; private Settings _settings; - - public void Save() - { - context.API.SaveJsonStorage(); - } - + public List Query(Query query) { var raw = query.Search; diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs index 5235f3fbe..f5e7c83a4 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs @@ -14,7 +14,7 @@ using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Plugin.WebSearch { - public class Main : IAsyncPlugin, ISettingProvider, IPluginI18n, ISavable, IResultUpdated + public class Main : IAsyncPlugin, ISettingProvider, IPluginI18n, IResultUpdated { private PluginInitContext _context; @@ -31,10 +31,6 @@ namespace Flow.Launcher.Plugin.WebSearch private readonly string SearchSourceGlobalPluginWildCardSign = "*"; - public void Save() - { - _viewModel.Save(); - } public async Task> QueryAsync(Query query, CancellationToken token) {