From 2329c4a75f86d4ac8ce16dd8803f9bd481d38053 Mon Sep 17 00:00:00 2001 From: rockstardev <5191402+rockstardev@users.noreply.github.com> Date: Wed, 9 Oct 2024 06:47:11 -0500 Subject: [PATCH 1/2] Support for searching plugins by name --- .../Controllers/UIServerController.Plugins.cs | 5 ++- .../HostedServices/PluginUpdateFetcher.cs | 2 +- BTCPayServer/Plugins/PluginBuilderClient.cs | 6 ++- BTCPayServer/Plugins/PluginService.cs | 5 ++- .../Views/UIServer/ListPlugins.cshtml | 40 ++++++++++++++++++- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/BTCPayServer/Controllers/UIServerController.Plugins.cs b/BTCPayServer/Controllers/UIServerController.Plugins.cs index 209384d13..c87a37992 100644 --- a/BTCPayServer/Controllers/UIServerController.Plugins.cs +++ b/BTCPayServer/Controllers/UIServerController.Plugins.cs @@ -18,12 +18,13 @@ namespace BTCPayServer.Controllers [HttpGet("server/plugins")] public async Task ListPlugins( [FromServices] PluginService pluginService, - [FromServices] BTCPayServerOptions btcPayServerOptions) + [FromServices] BTCPayServerOptions btcPayServerOptions, + string search = null) { IEnumerable availablePlugins; try { - availablePlugins = await pluginService.GetRemotePlugins(); + availablePlugins = await pluginService.GetRemotePlugins(search); } catch (Exception) { diff --git a/BTCPayServer/HostedServices/PluginUpdateFetcher.cs b/BTCPayServer/HostedServices/PluginUpdateFetcher.cs index 68e6f0943..d29608f78 100644 --- a/BTCPayServer/HostedServices/PluginUpdateFetcher.cs +++ b/BTCPayServer/HostedServices/PluginUpdateFetcher.cs @@ -82,7 +82,7 @@ namespace BTCPayServer.HostedServices var installedPlugins = pluginService.LoadedPlugins.ToDictionary(plugin => plugin.Identifier, plugin => plugin.Version); - var remotePlugins = await pluginService.GetRemotePlugins(); + var remotePlugins = await pluginService.GetRemotePlugins(null); //take the latest version of each plugin var remotePluginsList = remotePlugins .GroupBy(plugin => plugin.Identifier) diff --git a/BTCPayServer/Plugins/PluginBuilderClient.cs b/BTCPayServer/Plugins/PluginBuilderClient.cs index 1858feb51..22a1349fa 100644 --- a/BTCPayServer/Plugins/PluginBuilderClient.cs +++ b/BTCPayServer/Plugins/PluginBuilderClient.cs @@ -55,11 +55,13 @@ namespace BTCPayServer.Plugins this.httpClient = httpClient; } static JsonSerializerSettings serializerSettings = new() { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }; - public async Task GetPublishedVersions(string btcpayVersion, bool includePreRelease) + public async Task GetPublishedVersions(string btcpayVersion, bool includePreRelease, string searchPluginName = null) { var queryString = $"?includePreRelease={includePreRelease}"; if (btcpayVersion is not null) - queryString += $"&btcpayVersion={btcpayVersion}&"; + queryString += $"&btcpayVersion={btcpayVersion}"; + if (searchPluginName is not null) + queryString += $"&searchPluginName={searchPluginName}"; var result = await httpClient.GetStringAsync($"api/v1/plugins{queryString}"); return JsonConvert.DeserializeObject(result, serializerSettings) ?? throw new InvalidOperationException(); } diff --git a/BTCPayServer/Plugins/PluginService.cs b/BTCPayServer/Plugins/PluginService.cs index 7b7845c15..213103fe9 100644 --- a/BTCPayServer/Plugins/PluginService.cs +++ b/BTCPayServer/Plugins/PluginService.cs @@ -46,9 +46,10 @@ namespace BTCPayServer.Plugins return pluginManifest.Version; } - public async Task GetRemotePlugins() + public async Task GetRemotePlugins(string searchPluginName) { - var versions = await _pluginBuilderClient.GetPublishedVersions(null, _policiesSettings.PluginPreReleases); + var versions = await _pluginBuilderClient.GetPublishedVersions( + null, _policiesSettings.PluginPreReleases, searchPluginName); return versions.Select(v => { var p = v.ManifestInfo.ToObject(); diff --git a/BTCPayServer/Views/UIServer/ListPlugins.cshtml b/BTCPayServer/Views/UIServer/ListPlugins.cshtml index aa426a978..7a0fd36f8 100644 --- a/BTCPayServer/Views/UIServer/ListPlugins.cshtml +++ b/BTCPayServer/Views/UIServer/ListPlugins.cshtml @@ -296,7 +296,45 @@ } -@if (availableAndNotInstalled.Any()) +
+
+
+ + +
+
+
+ + +@if (!availableAndNotInstalled.Any()) +{ +
+
No plugins found
+
+} +else {

Available Plugins

From bc7b856654c9973467ae390c2a5e6d7d206f5f68 Mon Sep 17 00:00:00 2001 From: rockstardev <5191402+rockstardev@users.noreply.github.com> Date: Thu, 10 Oct 2024 05:46:07 -0500 Subject: [PATCH 2/2] Start sending BTCPay version string to help with filtering on plugin-builder side --- BTCPayServer/Plugins/PluginService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BTCPayServer/Plugins/PluginService.cs b/BTCPayServer/Plugins/PluginService.cs index 213103fe9..d9a1b5c13 100644 --- a/BTCPayServer/Plugins/PluginService.cs +++ b/BTCPayServer/Plugins/PluginService.cs @@ -48,8 +48,9 @@ namespace BTCPayServer.Plugins public async Task GetRemotePlugins(string searchPluginName) { + string btcpayVersion = Env.Version.TrimStart('v').Split('+')[0]; var versions = await _pluginBuilderClient.GetPublishedVersions( - null, _policiesSettings.PluginPreReleases, searchPluginName); + btcpayVersion, _policiesSettings.PluginPreReleases, searchPluginName); return versions.Select(v => { var p = v.ManifestInfo.ToObject();