From 864402704d2fb81ccc69820dbae0a0ee671bd02f Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 9 Feb 2025 21:54:02 +0800 Subject: [PATCH 1/3] Fix an issue that user plugins cannot be updated when reupdating the plugins manifest --- Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs index 63f21c1d62b..233612f50b8 100644 --- a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs +++ b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs @@ -1,4 +1,4 @@ -using Flow.Launcher.Infrastructure.Logger; +using Flow.Launcher.Infrastructure.Logger; using System; using System.Collections.Generic; using System.Threading; @@ -27,7 +27,7 @@ public static async Task UpdateManifestAsync(CancellationToken token = default, { await manifestUpdateLock.WaitAsync(token).ConfigureAwait(false); - if (UserPlugins == null || usePrimaryUrlOnly || DateTime.Now.Subtract(lastFetchedAt) >= fetchTimeout) + if (UserPlugins == null || UserPlugins.Count == 0 || usePrimaryUrlOnly || DateTime.Now.Subtract(lastFetchedAt) >= fetchTimeout) { var results = await mainPluginStore.FetchAsync(token, usePrimaryUrlOnly).ConfigureAwait(false); From d8f32806324872b8977aab5cdc05230b82ee4bb0 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Mon, 10 Feb 2025 11:54:09 +0800 Subject: [PATCH 2/3] Fix unneccessary plugin result update --- Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs | 10 +++++++--- .../ViewModels/SettingsPanePluginStoreViewModel.cs | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs index 233612f50b8..54080e15020 100644 --- a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs +++ b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs @@ -27,12 +27,16 @@ public static async Task UpdateManifestAsync(CancellationToken token = default, { await manifestUpdateLock.WaitAsync(token).ConfigureAwait(false); - if (UserPlugins == null || UserPlugins.Count == 0 || usePrimaryUrlOnly || DateTime.Now.Subtract(lastFetchedAt) >= fetchTimeout) + if (UserPlugins == null || usePrimaryUrlOnly || DateTime.Now.Subtract(lastFetchedAt) >= fetchTimeout) { var results = await mainPluginStore.FetchAsync(token, usePrimaryUrlOnly).ConfigureAwait(false); - UserPlugins = results; - lastFetchedAt = DateTime.Now; + // If the results are empty, we shouldn't update the manifest because the results are invalid. + if (results.Count != 0) + { + UserPlugins = results; + lastFetchedAt = DateTime.Now; + } } } catch (Exception e) diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs index e069310119b..a6cc3c535ec 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs @@ -13,8 +13,8 @@ public partial class SettingsPanePluginStoreViewModel : BaseModel { public string FilterText { get; set; } = string.Empty; - public IList ExternalPlugins => PluginsManifest.UserPlugins - .Select(p => new PluginStoreItemViewModel(p)) + public IList ExternalPlugins => + PluginsManifest.UserPlugins?.Select(p => new PluginStoreItemViewModel(p)) .OrderByDescending(p => p.Category == PluginStoreItemViewModel.NewRelease) .ThenByDescending(p => p.Category == PluginStoreItemViewModel.RecentlyUpdated) .ThenByDescending(p => p.Category == PluginStoreItemViewModel.None) From 319f016ced396ee6dd961096140e8b9ca25a1b52 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Mon, 10 Feb 2025 12:01:21 +0800 Subject: [PATCH 3/3] Remove unnessary list refresh --- Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs | 6 +++++- .../ViewModels/SettingsPanePluginStoreViewModel.cs | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs index 54080e15020..ac8abcdcce8 100644 --- a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs +++ b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs @@ -21,7 +21,7 @@ public static class PluginsManifest public static List UserPlugins { get; private set; } - public static async Task UpdateManifestAsync(CancellationToken token = default, bool usePrimaryUrlOnly = false) + public static async Task UpdateManifestAsync(CancellationToken token = default, bool usePrimaryUrlOnly = false) { try { @@ -36,6 +36,8 @@ public static async Task UpdateManifestAsync(CancellationToken token = default, { UserPlugins = results; lastFetchedAt = DateTime.Now; + + return true; } } } @@ -47,6 +49,8 @@ public static async Task UpdateManifestAsync(CancellationToken token = default, { manifestUpdateLock.Release(); } + + return false; } } } diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs index a6cc3c535ec..15579a61da0 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs @@ -24,8 +24,10 @@ public partial class SettingsPanePluginStoreViewModel : BaseModel [RelayCommand] private async Task RefreshExternalPluginsAsync() { - await PluginsManifest.UpdateManifestAsync(); - OnPropertyChanged(nameof(ExternalPlugins)); + if (await PluginsManifest.UpdateManifestAsync()) + { + OnPropertyChanged(nameof(ExternalPlugins)); + } } public bool SatisfiesFilter(PluginStoreItemViewModel plugin)