From 5d894ec154dca7949cb0d9cb8c67c22d9e667519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 25 Jan 2021 17:18:48 +0800 Subject: [PATCH 1/7] Don't await download manifest when it is unavaliable, but only await when calling install method to allow user using uninstall when manifest is not ready. --- .../Flow.Launcher.Plugin.PluginsManager/Main.cs | 15 +++++++++++++-- .../PluginsManager.cs | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index 66bfd2ab5..7836f1441 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -69,8 +69,19 @@ namespace Flow.Launcher.Plugin.PluginsManager if ((DateTime.Now - lastUpdateTime).TotalHours > 12) // 12 hours { - await pluginManager.UpdateManifest(); - lastUpdateTime = DateTime.Now; + _ = pluginManager.UpdateManifest().ContinueWith(t => + { + if (t.IsCompletedSuccessfully) + { + lastUpdateTime = DateTime.Now; + } + else + { + Context.API.ShowMsg("Plugin Manifest Download Fail.", + "Please check if you can connect to github.com. " + + "This error means you may not be able to Install and Update Plugin.", pluginManager.icoPath, false); + } + }); } return search switch diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 0f5e6d9e8..e25d97b36 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -46,9 +46,9 @@ namespace Flow.Launcher.Plugin.PluginsManager Settings = settings; } - internal async Task UpdateManifest() + internal Task UpdateManifest() { - await pluginsManifest.DownloadManifest(); + return _downloadManifestTask = pluginsManifest.DownloadManifest(); } internal List GetDefaultHotKeys() From 89453f441d6de762802ecb7e2eff729b2aae97b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Fri, 29 Jan 2021 11:37:26 +0800 Subject: [PATCH 2/7] Await Update when manifest is not ready --- .../Flow.Launcher.Plugin.PluginsManager/Main.cs | 2 +- .../PluginsManager.cs | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index 7836f1441..c9f9ca2a7 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -88,7 +88,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { var s when s.StartsWith(Settings.HotKeyInstall) => await pluginManager.RequestInstallOrUpdate(s, token), var s when s.StartsWith(Settings.HotkeyUninstall) => pluginManager.RequestUninstall(s), - var s when s.StartsWith(Settings.HotkeyUpdate) => pluginManager.RequestUpdate(s), + var s when s.StartsWith(Settings.HotkeyUpdate) => await pluginManager.RequestUpdate(s, token), _ => pluginManager.GetDefaultHotKeys().Where(hotkey => { hotkey.Score = StringMatcher.FuzzySearch(search, hotkey.Title).Score; diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index e25d97b36..eb0caec3f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -149,8 +149,19 @@ namespace Flow.Launcher.Plugin.PluginsManager Context.API.RestartApp(); } - internal List RequestUpdate(string search) + internal async ValueTask> RequestUpdate(string search, CancellationToken token) { + if (!pluginsManifest.UserPlugins.Any() && + _downloadManifestTask.Status != TaskStatus.Running) + { + _downloadManifestTask = pluginsManifest.DownloadManifest(); + } + + await _downloadManifestTask; + + token.ThrowIfCancellationRequested(); + + var autocompletedResults = AutoCompleteReturnAllResults(search, Settings.HotkeyUpdate, "Update", @@ -286,8 +297,7 @@ namespace Flow.Launcher.Plugin.PluginsManager await _downloadManifestTask; - if (token.IsCancellationRequested) - return null; + token.ThrowIfCancellationRequested(); var searchNameWithoutKeyword = searchName.Replace(Settings.HotKeyInstall, string.Empty).Trim(); From 2271ec16fd556e88ccf21f1765e51ac27848ee18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Fri, 29 Jan 2021 12:17:17 +0800 Subject: [PATCH 3/7] Optimize exception message logic --- Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs | 13 ++----------- .../PluginsManager.cs | 6 +++++- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index c9f9ca2a7..dbd1600c9 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -71,17 +71,8 @@ namespace Flow.Launcher.Plugin.PluginsManager { _ = pluginManager.UpdateManifest().ContinueWith(t => { - if (t.IsCompletedSuccessfully) - { - lastUpdateTime = DateTime.Now; - } - else - { - Context.API.ShowMsg("Plugin Manifest Download Fail.", - "Please check if you can connect to github.com. " + - "This error means you may not be able to Install and Update Plugin.", pluginManager.icoPath, false); - } - }); + lastUpdateTime = DateTime.Now; + }, TaskContinuationOptions.OnlyOnRanToCompletion); } return search switch diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index eb0caec3f..090e93bf2 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -48,7 +48,11 @@ namespace Flow.Launcher.Plugin.PluginsManager internal Task UpdateManifest() { - return _downloadManifestTask = pluginsManifest.DownloadManifest(); + return _downloadManifestTask = pluginsManifest.DownloadManifest().ContinueWith(t => + Context.API.ShowMsg("Plugin Manifest Download Fail.", + "Please check if you can connect to github.com. " + + "This error means you may not be able to Install and Update Plugin.", icoPath, false), + TaskContinuationOptions.OnlyOnFaulted); } internal List GetDefaultHotKeys() From a6e56025207ddf64087d93a6769cd025b8ab1d6e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 3 Feb 2021 13:00:16 +1100 Subject: [PATCH 4/7] formatting fix --- Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs | 2 +- Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index dbd1600c9..46a57757b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -48,7 +48,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { context.API.ShowMsg("Plugin Manifest Download Fail.", "Please check if you can connect to github.com. " + - "This error means you may not be able to Install and Update Plugin.", pluginManager.icoPath, false); + "This error means you may not be able to install or update plugins.", pluginManager.icoPath, false); } }); diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 090e93bf2..9606db7c1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -165,7 +165,6 @@ namespace Flow.Launcher.Plugin.PluginsManager token.ThrowIfCancellationRequested(); - var autocompletedResults = AutoCompleteReturnAllResults(search, Settings.HotkeyUpdate, "Update", From 71664bddc0b42f3786031076f2de12f5afdaba5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 3 Feb 2021 10:23:38 +0800 Subject: [PATCH 5/7] Optimize Logic --- .../Main.cs | 18 ++++----------- .../PluginsManager.cs | 23 ++++++++++--------- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index dbd1600c9..3707beee2 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -37,20 +37,10 @@ namespace Flow.Launcher.Plugin.PluginsManager Settings = viewModel.Settings; contextMenu = new ContextMenu(Context); pluginManager = new PluginsManager(Context, Settings); - var updateManifestTask = pluginManager.UpdateManifest(); - _ = updateManifestTask.ContinueWith(t => - { - if (t.IsCompletedSuccessfully) - { - lastUpdateTime = DateTime.Now; - } - else - { - context.API.ShowMsg("Plugin Manifest Download Fail.", - "Please check if you can connect to github.com. " + - "This error means you may not be able to Install and Update Plugin.", pluginManager.icoPath, false); - } - }); + _ = pluginManager.UpdateManifest().ContinueWith(_ => + { + lastUpdateTime = DateTime.Now; + }, TaskContinuationOptions.OnlyOnRanToCompletion); return Task.CompletedTask; } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 090e93bf2..f14cd1be4 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -48,11 +48,18 @@ namespace Flow.Launcher.Plugin.PluginsManager internal Task UpdateManifest() { - return _downloadManifestTask = pluginsManifest.DownloadManifest().ContinueWith(t => + if (_downloadManifestTask.Status == TaskStatus.Running) + { + return _downloadManifestTask; + } + else + { + return _downloadManifestTask = pluginsManifest.DownloadManifest().ContinueWith(t => Context.API.ShowMsg("Plugin Manifest Download Fail.", "Please check if you can connect to github.com. " + "This error means you may not be able to Install and Update Plugin.", icoPath, false), TaskContinuationOptions.OnlyOnFaulted); + } } internal List GetDefaultHotKeys() @@ -155,14 +162,11 @@ namespace Flow.Launcher.Plugin.PluginsManager internal async ValueTask> RequestUpdate(string search, CancellationToken token) { - if (!pluginsManifest.UserPlugins.Any() && - _downloadManifestTask.Status != TaskStatus.Running) + if (!pluginsManifest.UserPlugins.Any()) { - _downloadManifestTask = pluginsManifest.DownloadManifest(); + await UpdateManifest(); } - await _downloadManifestTask; - token.ThrowIfCancellationRequested(); @@ -293,14 +297,11 @@ namespace Flow.Launcher.Plugin.PluginsManager internal async ValueTask> RequestInstallOrUpdate(string searchName, CancellationToken token) { - if (!pluginsManifest.UserPlugins.Any() && - _downloadManifestTask.Status != TaskStatus.Running) + if (!pluginsManifest.UserPlugins.Any()) { - _downloadManifestTask = pluginsManifest.DownloadManifest(); + await UpdateManifest(); } - await _downloadManifestTask; - token.ThrowIfCancellationRequested(); var searchNameWithoutKeyword = searchName.Replace(Settings.HotKeyInstall, string.Empty).Trim(); From 1f6e6e5e09590b071cd94757c745e0c88a889431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 3 Feb 2021 10:25:29 +0800 Subject: [PATCH 6/7] fix format --- .../Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 5ea38b7c3..184e5c230 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -46,6 +46,9 @@ namespace Flow.Launcher.Plugin.PluginsManager Settings = settings; } + private Task _downloadManifestTask = Task.CompletedTask; + + internal Task UpdateManifest() { if (_downloadManifestTask.Status == TaskStatus.Running) @@ -292,8 +295,6 @@ namespace Flow.Launcher.Plugin.PluginsManager .ToList(); } - private Task _downloadManifestTask = Task.CompletedTask; - internal async ValueTask> RequestInstallOrUpdate(string searchName, CancellationToken token) { if (!pluginsManifest.UserPlugins.Any()) From d36140c51ce0b3c1a729092c1efff8f218e59582 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 15 Feb 2021 21:14:50 +1100 Subject: [PATCH 7/7] version bump PluginsManager --- Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index 4cba7ec83..f95c0d60d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json @@ -6,7 +6,7 @@ "Name": "Plugins Manager", "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", "Author": "Jeremy Wu", - "Version": "1.6.4", + "Version": "1.7.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll",