From 615bc17cec697d268b9695f3a8274b33bd8db0d7 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 11:48:40 +1000 Subject: [PATCH 01/12] Expose reload data call in PublicAPIInstance wider usage --- Wox/PublicAPIInstance.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Wox/PublicAPIInstance.cs b/Wox/PublicAPIInstance.cs index 9c8e7008bd..4bcc825309 100644 --- a/Wox/PublicAPIInstance.cs +++ b/Wox/PublicAPIInstance.cs @@ -73,6 +73,11 @@ namespace Wox Alphabet.Save(); } + public void ReloadAllPluginData() + { + PluginManager.ReloadData(); + } + [Obsolete] public void HideApp() { From 483940a98d40af860fac6a945956df62b44934af Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 11:49:47 +1000 Subject: [PATCH 02/12] Allow PluginManager class to manage the reload call --- Wox.Core/Plugin/PluginManager.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 6ca826fd9b..e42cf02e80 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -3,9 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using Wox.Core.Resource; using Wox.Infrastructure; -using Wox.Infrastructure.Exception; using Wox.Infrastructure.Logger; using Wox.Infrastructure.Storage; using Wox.Infrastructure.UserSettings; @@ -66,6 +64,15 @@ namespace Wox.Core.Plugin } } + public static void ReloadData() + { + foreach(var plugin in AllPlugins) + { + var reloadablePlugin = plugin.Plugin as IReloadable; + reloadablePlugin?.ReloadData(); + } + } + static PluginManager() { ValidateUserDirectory(); From 30fd5fcf14f7a755ea17836511cfc15e58dc290e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 11:50:25 +1000 Subject: [PATCH 03/12] Add interface that will be used by plugins --- Wox.Plugin/Interfaces/IReloadable.cs | 18 ++++++++++++++++++ Wox.Plugin/Wox.Plugin.csproj | 1 + 2 files changed, 19 insertions(+) create mode 100644 Wox.Plugin/Interfaces/IReloadable.cs diff --git a/Wox.Plugin/Interfaces/IReloadable.cs b/Wox.Plugin/Interfaces/IReloadable.cs new file mode 100644 index 0000000000..86f75ee3e9 --- /dev/null +++ b/Wox.Plugin/Interfaces/IReloadable.cs @@ -0,0 +1,18 @@ +namespace Wox.Plugin +{ + /// + /// This interface is to indicate and allow plugins to reload their + /// in memory data cache or other mediums when user makes a new change + /// that is not immediately captured. For example, for BrowserBookmark and Program + /// plugin does not automatically detect when a user added a new bookmark or program, + /// so this interface's function is exposed to allow user manually do the reloading after + /// those new additions. + /// + /// The command that allows user to manual reload is exposed via Plugin.Sys, and + /// it will call the plugins that have implemented this interface. + /// + public interface IReloadable + { + void ReloadData(); + } +} diff --git a/Wox.Plugin/Wox.Plugin.csproj b/Wox.Plugin/Wox.Plugin.csproj index 8b1e9f0ca7..843cc7d8bf 100644 --- a/Wox.Plugin/Wox.Plugin.csproj +++ b/Wox.Plugin/Wox.Plugin.csproj @@ -66,6 +66,7 @@ + From dd733092a12d4393e229f1df0b37118d0db55c4e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 11:52:18 +1000 Subject: [PATCH 04/12] create static bookmark class that will contain bookmark functions --- .../Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj b/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj index db420b4659..4252438c4d 100644 --- a/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj +++ b/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj @@ -66,6 +66,7 @@ + From bf12b127ac4b3bf4843f8bd49e6a1ec94b4839c7 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 11:55:57 +1000 Subject: [PATCH 05/12] Move code from Main class to Bookmarks class for cleanliness --- .../Commands/Bookmarks.cs | 35 +++++++++++++++++++ Plugins/Wox.Plugin.BrowserBookmark/Main.cs | 28 +++------------ 2 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 Plugins/Wox.Plugin.BrowserBookmark/Commands/Bookmarks.cs diff --git a/Plugins/Wox.Plugin.BrowserBookmark/Commands/Bookmarks.cs b/Plugins/Wox.Plugin.BrowserBookmark/Commands/Bookmarks.cs new file mode 100644 index 0000000000..778e0ee65b --- /dev/null +++ b/Plugins/Wox.Plugin.BrowserBookmark/Commands/Bookmarks.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Linq; +using Wox.Infrastructure; + +namespace Wox.Plugin.BrowserBookmark.Commands +{ + internal static class Bookmarks + { + internal static bool MatchProgram(Bookmark bookmark, string queryString) + { + if (StringMatcher.FuzzySearch(queryString, bookmark.Name, new MatchOption()).IsSearchPrecisionScoreMet()) return true; + if (StringMatcher.FuzzySearch(queryString, bookmark.PinyinName, new MatchOption()).IsSearchPrecisionScoreMet()) return true; + if (StringMatcher.FuzzySearch(queryString, bookmark.Url, new MatchOption()).IsSearchPrecisionScoreMet()) return true; + + return false; + } + + internal static List LoadAllBookmarks() + { + var allbookmarks = new List(); + + var chromeBookmarks = new ChromeBookmarks(); + var mozBookmarks = new FirefoxBookmarks(); + + //TODO: Let the user select which browser's bookmarks are displayed + // Add Firefox bookmarks + mozBookmarks.GetBookmarks().ForEach(x => allbookmarks.Add(x)); + + // Add Chrome bookmarks + chromeBookmarks.GetBookmarks().ForEach(x => allbookmarks.Add(x)); + + return allbookmarks.Distinct().ToList(); + } + } +} diff --git a/Plugins/Wox.Plugin.BrowserBookmark/Main.cs b/Plugins/Wox.Plugin.BrowserBookmark/Main.cs index e18eb49530..6ff9624f3d 100644 --- a/Plugins/Wox.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Wox.Plugin.BrowserBookmark/Main.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Linq; -using Wox.Infrastructure; +using Wox.Plugin.BrowserBookmark.Commands; using Wox.Plugin.SharedCommands; namespace Wox.Plugin.BrowserBookmark @@ -8,25 +8,14 @@ namespace Wox.Plugin.BrowserBookmark public class Main : IPlugin { private PluginInitContext context; - - // TODO: periodically refresh the Cache? + private List cachedBookmarks = new List(); public void Init(PluginInitContext context) { this.context = context; - // Cache all bookmarks - var chromeBookmarks = new ChromeBookmarks(); - var mozBookmarks = new FirefoxBookmarks(); - - //TODO: Let the user select which browser's bookmarks are displayed - // Add Firefox bookmarks - cachedBookmarks.AddRange(mozBookmarks.GetBookmarks()); - // Add Chrome bookmarks - cachedBookmarks.AddRange(chromeBookmarks.GetBookmarks()); - - cachedBookmarks = cachedBookmarks.Distinct().ToList(); + cachedBookmarks = Bookmarks.LoadAllBookmarks(); } public List Query(Query query) @@ -41,7 +30,7 @@ namespace Wox.Plugin.BrowserBookmark if (!topResults) { // Since we mixed chrome and firefox bookmarks, we should order them again - returnList = cachedBookmarks.Where(o => MatchProgram(o, param)).ToList(); + returnList = cachedBookmarks.Where(o => Bookmarks.MatchProgram(o, param)).ToList(); returnList = returnList.OrderByDescending(o => o.Score).ToList(); } @@ -59,14 +48,5 @@ namespace Wox.Plugin.BrowserBookmark } }).ToList(); } - - private bool MatchProgram(Bookmark bookmark, string queryString) - { - if (StringMatcher.FuzzySearch(queryString, bookmark.Name, new MatchOption()).IsSearchPrecisionScoreMet()) return true; - if ( StringMatcher.FuzzySearch(queryString, bookmark.PinyinName, new MatchOption()).IsSearchPrecisionScoreMet()) return true; - if (StringMatcher.FuzzySearch(queryString, bookmark.Url, new MatchOption()).IsSearchPrecisionScoreMet()) return true; - - return false; - } } } From 1c015e31f1f919e7b8221fab45a7e39e961a7c6f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 11:58:36 +1000 Subject: [PATCH 06/12] Add IReloadable interface and method --- Plugins/Wox.Plugin.BrowserBookmark/Main.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Plugins/Wox.Plugin.BrowserBookmark/Main.cs b/Plugins/Wox.Plugin.BrowserBookmark/Main.cs index 6ff9624f3d..a2805b1c1e 100644 --- a/Plugins/Wox.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Wox.Plugin.BrowserBookmark/Main.cs @@ -5,7 +5,7 @@ using Wox.Plugin.SharedCommands; namespace Wox.Plugin.BrowserBookmark { - public class Main : IPlugin + public class Main : IPlugin, IReloadable { private PluginInitContext context; @@ -48,5 +48,12 @@ namespace Wox.Plugin.BrowserBookmark } }).ToList(); } + + public void ReloadData() + { + cachedBookmarks.Clear(); + + cachedBookmarks = Bookmarks.LoadAllBookmarks(); + } } } From 9e69d01db7c1f8f940c9d8a4ed5c5cecb64525bb Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 13:15:06 +1100 Subject: [PATCH 07/12] Add reload call for Programs plugin --- Plugins/Wox.Plugin.Program/Main.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Plugins/Wox.Plugin.Program/Main.cs b/Plugins/Wox.Plugin.Program/Main.cs index 7cdb3507b0..575d147696 100644 --- a/Plugins/Wox.Plugin.Program/Main.cs +++ b/Plugins/Wox.Plugin.Program/Main.cs @@ -13,7 +13,7 @@ using Stopwatch = Wox.Infrastructure.Stopwatch; namespace Wox.Plugin.Program { - public class Main : ISettingProvider, IPlugin, IPluginI18n, IContextMenu, ISavable + public class Main : ISettingProvider, IPlugin, IPluginI18n, IContextMenu, ISavable, IReloadable { private static readonly object IndexLock = new object(); private static Win32[] _win32s; @@ -145,5 +145,13 @@ namespace Wox.Plugin.Program } return hide; } + + public void ReloadData() + { + Task.Run(() => + { + IndexPrograms(); + }); + } } } \ No newline at end of file From 96660ebd2a11b1b5988b89e7480585e7b4c6af75 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 13:44:38 +1100 Subject: [PATCH 08/12] Exposes reload command via IPublicAPI --- Wox.Plugin/IPublicAPI.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Wox.Plugin/IPublicAPI.cs b/Wox.Plugin/IPublicAPI.cs index 7dcac48440..6c59cf6c71 100644 --- a/Wox.Plugin/IPublicAPI.cs +++ b/Wox.Plugin/IPublicAPI.cs @@ -62,6 +62,14 @@ namespace Wox.Plugin /// void SaveAppAllSettings(); + /// + /// Reloads any Plugins that have the + /// IReloadable implemented. It refeshes + /// Plugin's in memory data with new content + /// added by user. + /// + void ReloadPluginData(); + /// /// Show message box /// From 8ca6e8c4784007220ed46498013b5df6b66f7a5e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 13:45:36 +1100 Subject: [PATCH 09/12] Add command for user to call in Plugin.Sys --- Plugins/Wox.Plugin.Sys/Main.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Plugins/Wox.Plugin.Sys/Main.cs b/Plugins/Wox.Plugin.Sys/Main.cs index bb447db9e5..8a399eeb45 100644 --- a/Plugins/Wox.Plugin.Sys/Main.cs +++ b/Plugins/Wox.Plugin.Sys/Main.cs @@ -207,6 +207,17 @@ namespace Wox.Plugin.Sys context.API.OpenSettingDialog(); return true; } + }, + new Result + { + Title = "Reload Plugin Data", + SubTitle = "Reloads plugin's data with new content added after Wox started. Plugins need to have this feature already added.", + IcoPath = "Images\\app.png", + Action = c => + { + context.API.ReloadPluginData(); + return true; + } } }); return results; From bb3c38a3b17745bd136c607fd04ba855f4267e5c Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 13:47:52 +1100 Subject: [PATCH 10/12] update --- Wox.Plugin/IPublicAPI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wox.Plugin/IPublicAPI.cs b/Wox.Plugin/IPublicAPI.cs index 6c59cf6c71..eb3f18fa70 100644 --- a/Wox.Plugin/IPublicAPI.cs +++ b/Wox.Plugin/IPublicAPI.cs @@ -68,7 +68,7 @@ namespace Wox.Plugin /// Plugin's in memory data with new content /// added by user. /// - void ReloadPluginData(); + void ReloadAllPluginData(); /// /// Show message box From d1c01f476d8e28f4a6c9a87d81d41887d1c4d81d Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 13:48:52 +1100 Subject: [PATCH 11/12] update --- Plugins/Wox.Plugin.Sys/Main.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Wox.Plugin.Sys/Main.cs b/Plugins/Wox.Plugin.Sys/Main.cs index 8a399eeb45..6774f3acf3 100644 --- a/Plugins/Wox.Plugin.Sys/Main.cs +++ b/Plugins/Wox.Plugin.Sys/Main.cs @@ -215,7 +215,7 @@ namespace Wox.Plugin.Sys IcoPath = "Images\\app.png", Action = c => { - context.API.ReloadPluginData(); + context.API.ReloadAllPluginData(); return true; } } From 7e8d7ef0c08b6cf11702bdea9b6750e91914a096 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Oct 2019 13:52:04 +1100 Subject: [PATCH 12/12] Update wording --- Plugins/Wox.Plugin.Sys/Main.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Wox.Plugin.Sys/Main.cs b/Plugins/Wox.Plugin.Sys/Main.cs index 6774f3acf3..6186b3cacc 100644 --- a/Plugins/Wox.Plugin.Sys/Main.cs +++ b/Plugins/Wox.Plugin.Sys/Main.cs @@ -211,7 +211,7 @@ namespace Wox.Plugin.Sys new Result { Title = "Reload Plugin Data", - SubTitle = "Reloads plugin's data with new content added after Wox started. Plugins need to have this feature already added.", + SubTitle = "Reloads plugin data with new content added after Wox started. Plugins need to have this feature already added.", IcoPath = "Images\\app.png", Action = c => {