From c602fe7a008283a4a33281dc8d00c628cd7bd9d1 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Mon, 3 Mar 2025 17:42:24 +0800 Subject: [PATCH 1/2] Init instances in initasync --- .../Main.cs | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs b/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs index 5366461..0336013 100644 --- a/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs +++ b/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs @@ -42,7 +42,7 @@ public class ClipboardPlus : IAsyncPlugin, IAsyncReloadable, IContextMenu, IPlug // Clipboard monitor instance // Warning: Do not init the instance in InitAsync function! This will cause issues. - private IClipboardMonitor? ClipboardMonitor; + private IClipboardMonitor? ClipboardMonitor = null; // Observable data formats private readonly ObservableDataFormats ObservableDataFormats = new() @@ -54,7 +54,7 @@ public class ClipboardPlus : IAsyncPlugin, IAsyncReloadable, IContextMenu, IPlug }; // Windows clipboard helper - private WindowsClipboardHelper WindowsClipboardHelper = new(); + private WindowsClipboardHelper WindowsClipboardHelper = null!; // Records list & Score // Latest records are at the beginning of the list. @@ -103,30 +103,6 @@ public class ClipboardPlus : IAsyncPlugin, IAsyncReloadable, IContextMenu, IPlug #endregion - #region Constructor - - public ClipboardPlus() - { - if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) - { - ClipboardMonitor = new ClipboardMonitorWin() - { - ObserveLastEntry = false, - ObservableFormats = ObservableDataFormats - }; - } - else - { - ClipboardMonitor = new ClipboardMonitorW() - { - ObserveLastEntry = false, - ObservableFormats = ObservableDataFormats - }; - } - } - - #endregion - #region IAsyncPlugin Interface public Task> QueryAsync(Query query, CancellationToken token) @@ -425,8 +401,6 @@ public async Task> Query(Query query) public async Task InitAsync(PluginInitContext context) { Context = context; - ClipboardMonitor!.SetContext(context); - WindowsClipboardHelper.SetClipboardPlus(this); // init path helper PathHelper.Init(context, GetType().Assembly.GetName().Name ?? "Flow.Launcher.Plugin.ClipboardPlus"); @@ -441,6 +415,29 @@ public async Task InitAsync(PluginInitContext context) // init score helper ScoreHelper = new ScoreHelper(ScoreInterval); + // init clipboard monitor + if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) + { + ClipboardMonitor = new ClipboardMonitorWin() + { + ObserveLastEntry = false, + ObservableFormats = ObservableDataFormats + }; + } + else + { + ClipboardMonitor = new ClipboardMonitorW() + { + ObserveLastEntry = false, + ObservableFormats = ObservableDataFormats + }; + } + ClipboardMonitor.SetContext(context); + + // init windows clipboard helper + WindowsClipboardHelper = new(); + WindowsClipboardHelper.SetClipboardPlus(this); + // setup use Windows clipboard history only UseWindowsClipboardHistoryOnly = Settings.UseWindowsClipboardHistoryOnly && CheckUseWindowsClipboardHistoryOnly(); Context.LogInfo(ClassName, $"Use Windows clipboard history only: {UseWindowsClipboardHistoryOnly}"); From c42c44f5f0bbf23c6f43057b9364f6c2475e5b3f Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Wed, 5 Mar 2025 12:07:40 +0800 Subject: [PATCH 2/2] Remove useless clipboard monitor creation --- .../Main.cs | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs b/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs index 0336013..ac2f6e3 100644 --- a/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs +++ b/src/Flow.Launcher.Plugin.ClipboardPlus/Main.cs @@ -415,25 +415,6 @@ public async Task InitAsync(PluginInitContext context) // init score helper ScoreHelper = new ScoreHelper(ScoreInterval); - // init clipboard monitor - if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) - { - ClipboardMonitor = new ClipboardMonitorWin() - { - ObserveLastEntry = false, - ObservableFormats = ObservableDataFormats - }; - } - else - { - ClipboardMonitor = new ClipboardMonitorW() - { - ObserveLastEntry = false, - ObservableFormats = ObservableDataFormats - }; - } - ClipboardMonitor.SetContext(context); - // init windows clipboard helper WindowsClipboardHelper = new(); WindowsClipboardHelper.SetClipboardPlus(this); @@ -450,9 +431,12 @@ public async Task InitAsync(PluginInitContext context) Context.LogDebug(ClassName, "Init database successfully"); // dispose clipboard monitor - ClipboardMonitor.ClipboardChanged -= ClipboardMonitor_OnClipboardChanged; - ClipboardMonitor.Dispose(); - ClipboardMonitor = null; + if (ClipboardMonitor != null) + { + ClipboardMonitor.ClipboardChanged -= ClipboardMonitor_OnClipboardChanged; + ClipboardMonitor.Dispose(); + ClipboardMonitor = null; + } // init Windows clipboard helper & records from Windows clipboard history EnableWindowsClipboardHelper(true); @@ -470,6 +454,23 @@ public async Task InitAsync(PluginInitContext context) Context.LogDebug(ClassName, $"Init {RecordsList.Count} records successfully"); // init & start clipboard monitor + if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) + { + ClipboardMonitor = new ClipboardMonitorWin() + { + ObserveLastEntry = false, + ObservableFormats = ObservableDataFormats + }; + } + else + { + ClipboardMonitor = new ClipboardMonitorW() + { + ObserveLastEntry = false, + ObservableFormats = ObservableDataFormats + }; + } + ClipboardMonitor.SetContext(context); ClipboardMonitor.ClipboardChanged += ClipboardMonitor_OnClipboardChanged; ClipboardMonitor.StartMonitoring(); if (ClipboardMonitor.GetType() == typeof(ClipboardMonitorWin))