From 666211dd4cecae901f0a5509447fc07e2a72feaa Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 28 May 2024 21:27:48 +1000 Subject: [PATCH] add plugin support for external preview --- Flow.Launcher.Core/Plugin/PluginManager.cs | 32 +++++++++++++++++++ .../Interfaces/IAsyncExternalPreview.cs | 15 +++++++++ 2 files changed, 47 insertions(+) create mode 100644 Flow.Launcher.Plugin/Interfaces/IAsyncExternalPreview.cs diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index f8c9a3f17..5d6751507 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -88,6 +88,38 @@ namespace Flow.Launcher.Core.Plugin }).ToArray()); } + public static async Task OpenExternalPreviewAsync(string path, bool sendFailToast = true) + { + await Task.WhenAll(AllPlugins.Select(plugin => plugin.Plugin switch + { + IAsyncExternalPreview p => p.OpenPreviewAsync(path, sendFailToast), + _ => Task.CompletedTask, + }).ToArray()); + } + + public static async Task CloseExternalPreviewAsync() + { + await Task.WhenAll(AllPlugins.Select(plugin => plugin.Plugin switch + { + IAsyncExternalPreview p => p.ClosePreviewAsync(), + _ => Task.CompletedTask, + }).ToArray()); + } + + public static async Task SwitchExternalPreviewAsync(string path, bool sendFailToast = true) + { + await Task.WhenAll(AllPlugins.Select(plugin => plugin.Plugin switch + { + IAsyncExternalPreview p => p.SwitchPreviewAsync(path, sendFailToast), + _ => Task.CompletedTask, + }).ToArray()); + } + + public static bool UseExternalPreview() + { + return GetPluginsForInterface().Any(x => !x.Metadata.Disabled); + } + static PluginManager() { // validate user directory diff --git a/Flow.Launcher.Plugin/Interfaces/IAsyncExternalPreview.cs b/Flow.Launcher.Plugin/Interfaces/IAsyncExternalPreview.cs new file mode 100644 index 000000000..9ee05b46c --- /dev/null +++ b/Flow.Launcher.Plugin/Interfaces/IAsyncExternalPreview.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; + +namespace Flow.Launcher.Plugin +{ + public interface IAsyncExternalPreview: IFeatures + { + public Task TogglePreviewAsync(string path); + + public Task OpenPreviewAsync(string path, bool sendFailToast = true); + + public Task ClosePreviewAsync(); + + public Task SwitchPreviewAsync(string path, bool sendFailToast = true); + } +}