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 66bfd2ab515..7836f144132 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -69,8 +69,19 @@ public async Task> QueryAsync(Query query, CancellationToken token) 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 0f5e6d9e8b9..e25d97b365b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -46,9 +46,9 @@ internal PluginsManager(PluginInitContext context, Settings settings) 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 7836f144132..c9f9ca2a76e 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -88,7 +88,7 @@ public async Task> QueryAsync(Query query, CancellationToken token) { 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 e25d97b365b..eb0caec3fd1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -149,8 +149,19 @@ internal async Task InstallOrUpdate(UserPlugin plugin) 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 @@ internal async ValueTask> RequestInstallOrUpdate(string searchName, 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 c9f9ca2a76e..dbd1600c97b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -71,17 +71,8 @@ public async Task> QueryAsync(Query query, CancellationToken token) { _ = 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 eb0caec3fd1..090e93bf24a 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -48,7 +48,11 @@ internal PluginsManager(PluginInitContext context, Settings settings) 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 dbd1600c97b..46a57757bf3 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -48,7 +48,7 @@ public Task InitAsync(PluginInitContext context) { 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 090e93bf24a..9606db7c143 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -165,7 +165,6 @@ internal async ValueTask> RequestUpdate(string search, Cancellation 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 dbd1600c97b..3707beee2cb 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -37,20 +37,10 @@ public Task InitAsync(PluginInitContext context) 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 090e93bf24a..f14cd1be46d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -48,11 +48,18 @@ internal PluginsManager(PluginInitContext context, Settings settings) 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 @@ internal async Task InstallOrUpdate(UserPlugin plugin) 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 @@ internal List Search(IEnumerable results, string searchName) 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 5ea38b7c395..184e5c23076 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -46,6 +46,9 @@ internal PluginsManager(PluginInitContext context, Settings settings) Settings = settings; } + private Task _downloadManifestTask = Task.CompletedTask; + + internal Task UpdateManifest() { if (_downloadManifestTask.Status == TaskStatus.Running) @@ -292,8 +295,6 @@ internal List Search(IEnumerable results, string searchName) .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 4cba7ec83e8..f95c0d60db3 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",