From 6ebfd7c2586923e33c5ebc29345c52bbabf8ab1a Mon Sep 17 00:00:00 2001
From: Jack251970 <1160210343@qq.com>
Date: Sat, 14 Mar 2026 20:32:50 +0800
Subject: [PATCH 1/3] Improve plugin manifest handling and UI property
Removed remarks from GetPluginManifest docs.
GetPluginManifest now returns an empty list if null.
ExternalPlugins property always enumerates and sorts plugins.
Added BOM to PublicAPIInstance.cs.
---
Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 3 ---
Flow.Launcher/PublicAPIInstance.cs | 4 ++--
.../ViewModels/SettingsPanePluginStoreViewModel.cs | 2 +-
3 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
index 93844159f75..82f9162d248 100644
--- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
+++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
@@ -535,9 +535,6 @@ public interface IPublicAPI
///
/// Get the plugin manifest.
///
- ///
- /// If Flow cannot get manifest data, this could be null
- ///
///
public IReadOnlyList GetPluginManifest();
diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs
index 55737151af3..ef3b76a289f 100644
--- a/Flow.Launcher/PublicAPIInstance.cs
+++ b/Flow.Launcher/PublicAPIInstance.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Specialized;
@@ -583,7 +583,7 @@ public ValueTask LoadImageAsync(string path, bool loadFullImage = f
public Task UpdatePluginManifestAsync(bool usePrimaryUrlOnly = false, CancellationToken token = default) =>
PluginsManifest.UpdateManifestAsync(usePrimaryUrlOnly, token);
- public IReadOnlyList GetPluginManifest() => PluginsManifest.UserPlugins;
+ public IReadOnlyList GetPluginManifest() => PluginsManifest.UserPlugins ?? [];
public bool PluginModified(string id) => PluginManager.PluginModified(id);
diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs
index d67695a7580..752d6890338 100644
--- a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs
+++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs
@@ -82,7 +82,7 @@ public bool ShowExecutable
}
}
- public IList ExternalPlugins => App.API.GetPluginManifest()?
+ public IList ExternalPlugins => App.API.GetPluginManifest()
.Select(p => new PluginStoreItemViewModel(p))
.OrderByDescending(p => p.Category == PluginStoreItemViewModel.NewRelease)
.ThenByDescending(p => p.Category == PluginStoreItemViewModel.RecentlyUpdated)
From 53702650b5d3bca1ebae2f9cf71d2fc5907f086e Mon Sep 17 00:00:00 2001
From: Jack Ye
Date: Sat, 14 Mar 2026 20:36:47 +0800
Subject: [PATCH 2/3] Improve code comments
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---
Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
index 82f9162d248..08d68088dd7 100644
--- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
+++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
@@ -533,9 +533,12 @@ public interface IPublicAPI
public Task UpdatePluginManifestAsync(bool usePrimaryUrlOnly = false, CancellationToken token = default);
///
- /// Get the plugin manifest.
+ /// Get the current plugin manifest entries known to Flow Launcher.
///
- ///
+ ///
+ /// A non-null read-only list of entries. The list may be empty if the
+ /// manifest has not been loaded/updated yet, or if the most recent manifest fetch failed.
+ ///
public IReadOnlyList GetPluginManifest();
///
From 015c32ed9c113b714307a72a36ca0a9b7df3506b Mon Sep 17 00:00:00 2001
From: Jack Ye
Date: Sat, 14 Mar 2026 20:41:53 +0800
Subject: [PATCH 3/3] Improve code comments
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
---
Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
index 08d68088dd7..0af37d9d59b 100644
--- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
+++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
@@ -537,7 +537,7 @@ public interface IPublicAPI
///
///
/// A non-null read-only list of entries. The list may be empty if the
- /// manifest has not been loaded/updated yet, or if the most recent manifest fetch failed.
+ /// manifest has not been loaded yet, or if no successful manifest fetch has completed in the current session.
///
public IReadOnlyList GetPluginManifest();