From e37217c878a2d2b90359e1c36602e676695db96f Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Wed, 5 Aug 2020 19:30:45 +1000 Subject: [PATCH 001/146] From alekhyareddy28:memoryIssue on Jun 27, 2020 --- .../Image/ImageCache.cs | 40 +++++++++++++++---- .../Image/ImageLoader.cs | 26 ++++++------ 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 5d7224c5b..67f008972 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -2,17 +2,18 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using System.Windows.Media; -namespace Flow.Launcher.Infrastructure.Image +namespace Wox.Infrastructure.Image { [Serializable] public class ImageCache { - private const int MaxCached = 5000; + private const int MaxCached = 50; public ConcurrentDictionary Usage = new ConcurrentDictionary(); private readonly ConcurrentDictionary _data = new ConcurrentDictionary(); - + private const int permissibleFactor = 2; public ImageSource this[string path] { @@ -22,14 +23,39 @@ namespace Flow.Launcher.Infrastructure.Image var i = _data[path]; return i; } - set { _data[path] = value; } + set + { + _data[path] = value; + + // To prevent the dictionary from drastically increasing in size by caching images, the dictionary size is not allowed to grow more than the permissibleFactor * maxCached size + // This is done so that we don't constantly perform this resizing operation and also maintain the image cache size at the same time + if (_data.Count > permissibleFactor * MaxCached) + { + // This function resizes the Usage dictionary, taking the top 'maxCached' number of items and filtering the image icons that are not accessed frequently. + Cleanup(); + + // To delete the images from the data dictionary based on the resizing of the Usage Dictionary. + foreach (var key in _data.Keys) + { + int dictValue; + if (!Usage.TryGetValue(key, out dictValue)) + { + ImageSource imgSource; + _data.TryRemove(key, out imgSource); + } + } + } + } } - public Dictionary CleanupAndToDictionary() - => Usage + public void Cleanup() + { + var images = Usage .OrderByDescending(o => o.Value) .Take(MaxCached) .ToDictionary(i => i.Key, i => i.Value); + Usage = new ConcurrentDictionary(images); + } public bool ContainsKey(string key) { @@ -51,4 +77,4 @@ namespace Flow.Launcher.Infrastructure.Image } } -} +} \ No newline at end of file diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index 0bf575337..e03ee709a 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -9,7 +9,7 @@ using System.Windows.Media.Imaging; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Storage; -namespace Flow.Launcher.Infrastructure.Image +namespace Wox.Infrastructure.Image { public static class ImageLoader { @@ -218,27 +218,29 @@ namespace Flow.Launcher.Infrastructure.Image var img = imageResult.ImageSource; if (imageResult.ImageType != ImageType.Error && imageResult.ImageType != ImageType.Cache) - { - // we need to get image hash - string hash = _enableHashImage ? _hashGenerator.GetHashFromImage(img) : null; + { // we need to get image hash + string hash = EnableImageHash ? _hashGenerator.GetHashFromImage(img) : null; if (hash != null) { - if (_guidToKey.TryGetValue(hash, out string key)) - { - // image already exists - img = _imageCache[key]; + int ImageCacheValue; + if (GuidToKey.TryGetValue(hash, out string key)) + { // image already exists + if (ImageCache.Usage.TryGetValue(path, out ImageCacheValue)) + { + img = ImageCache[key]; + } } else - { - // new guid - _guidToKey[hash] = path; + { // new guid + GuidToKey[hash] = path; } } // update cache - _imageCache[path] = img; + ImageCache[path] = img; } + return img; } From 086c5d05e75ae556dd2ffabf6c1269dcddb57211 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 5 Aug 2020 19:57:23 +1000 Subject: [PATCH 002/146] update to Flow --- .../Image/ImageCache.cs | 2 +- .../Image/ImageLoader.cs | 28 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 67f008972..15090919d 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Threading.Tasks; using System.Windows.Media; -namespace Wox.Infrastructure.Image +namespace Flow.Launcher.Infrastructure.Image { [Serializable] public class ImageCache diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index e03ee709a..10f827c40 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -9,16 +9,16 @@ using System.Windows.Media.Imaging; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Storage; -namespace Wox.Infrastructure.Image +namespace Flow.Launcher.Infrastructure.Image { public static class ImageLoader { - private static readonly ImageCache _imageCache = new ImageCache(); + private static readonly ImageCache ImageCache = new ImageCache(); private static readonly ConcurrentDictionary _guidToKey = new ConcurrentDictionary(); - private static readonly bool _enableHashImage = true; - + private static readonly ConcurrentDictionary GuidToKey = new ConcurrentDictionary(); private static BinaryStorage> _storage; private static IImageHashGenerator _hashGenerator; + private static bool EnableImageHash = true; private static readonly string[] ImageExtensions = { @@ -36,25 +36,25 @@ namespace Wox.Infrastructure.Image _storage = new BinaryStorage>("Image"); _hashGenerator = new ImageHashGenerator(); - _imageCache.Usage = LoadStorageToConcurrentDictionary(); + ImageCache.Usage = LoadStorageToConcurrentDictionary(); foreach (var icon in new[] { Constant.DefaultIcon, Constant.ErrorIcon }) { ImageSource img = new BitmapImage(new Uri(icon)); img.Freeze(); - _imageCache[icon] = img; + ImageCache[icon] = img; } Task.Run(() => { Stopwatch.Normal("|ImageLoader.Initialize|Preload images cost", () => { - _imageCache.Usage.AsParallel().ForAll(x => + ImageCache.Usage.AsParallel().ForAll(x => { Load(x.Key); }); }); - Log.Info($"|ImageLoader.Initialize|Number of preload images is <{_imageCache.Usage.Count}>, Images Number: {_imageCache.CacheSize()}, Unique Items {_imageCache.UniqueImagesInCache()}"); + Log.Info($"|ImageLoader.Initialize|Number of preload images is <{ImageCache.Usage.Count}>, Images Number: {ImageCache.CacheSize()}, Unique Items {ImageCache.UniqueImagesInCache()}"); }); } @@ -106,11 +106,11 @@ namespace Wox.Infrastructure.Image { if (string.IsNullOrEmpty(path)) { - return new ImageResult(_imageCache[Constant.ErrorIcon], ImageType.Error); + return new ImageResult(ImageCache[Constant.ErrorIcon], ImageType.Error); } - if (_imageCache.ContainsKey(path)) + if (ImageCache.ContainsKey(path)) { - return new ImageResult(_imageCache[path], ImageType.Cache); + return new ImageResult(ImageCache[path], ImageType.Cache); } if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) @@ -139,8 +139,8 @@ namespace Wox.Infrastructure.Image Log.Exception($"|ImageLoader.Load|Failed to get thumbnail for {path} on first try", e); Log.Exception($"|ImageLoader.Load|Failed to get thumbnail for {path} on second try", e2); - ImageSource image = _imageCache[Constant.ErrorIcon]; - _imageCache[path] = image; + ImageSource image = ImageCache[Constant.ErrorIcon]; + ImageCache[path] = image; imageResult = new ImageResult(image, ImageType.Error); } } @@ -191,7 +191,7 @@ namespace Wox.Infrastructure.Image } else { - image = _imageCache[Constant.ErrorIcon]; + image = ImageCache[Constant.ErrorIcon]; path = Constant.ErrorIcon; } From 86f6f9921e58c1d29f5d6f9d960990c6dd564778 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 5 Aug 2020 19:57:53 +1000 Subject: [PATCH 003/146] update to use concurrent dictionary --- Flow.Launcher.Infrastructure/Image/ImageLoader.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index 10f827c40..573857c43 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -14,9 +14,8 @@ namespace Flow.Launcher.Infrastructure.Image public static class ImageLoader { private static readonly ImageCache ImageCache = new ImageCache(); - private static readonly ConcurrentDictionary _guidToKey = new ConcurrentDictionary(); + private static BinaryStorage> _storage; private static readonly ConcurrentDictionary GuidToKey = new ConcurrentDictionary(); - private static BinaryStorage> _storage; private static IImageHashGenerator _hashGenerator; private static bool EnableImageHash = true; @@ -33,7 +32,7 @@ namespace Flow.Launcher.Infrastructure.Image public static void Initialize() { - _storage = new BinaryStorage>("Image"); + _storage = new BinaryStorage>("Image"); _hashGenerator = new ImageHashGenerator(); ImageCache.Usage = LoadStorageToConcurrentDictionary(); @@ -70,7 +69,7 @@ namespace Flow.Launcher.Infrastructure.Image { lock(_storage) { - var loaded = _storage.TryLoad(new Dictionary()); + var loaded = _storage.TryLoad(new ConcurrentDictionary()); return new ConcurrentDictionary(loaded); } From ffa68a5a7b25d8d9d2d0fe82cb5e6b04bea257cb Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 5 Aug 2020 19:58:48 +1000 Subject: [PATCH 004/146] use updated method from ImageCache class to save images to cache --- Flow.Launcher.Infrastructure/Image/ImageLoader.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index 573857c43..caff69fcf 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -61,7 +61,8 @@ namespace Flow.Launcher.Infrastructure.Image { lock (_storage) { - _storage.Save(_imageCache.CleanupAndToDictionary()); + ImageCache.Cleanup(); + _storage.Save(ImageCache.Usage); } } From ca08e603087601493526a0c716e7c57f0064b134 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 10 Aug 2020 07:17:22 +1000 Subject: [PATCH 005/146] revert-image cache as dictionary, concurrent not serializable --- Flow.Launcher.Infrastructure/Image/ImageLoader.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index caff69fcf..29e13a2de 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -14,7 +14,7 @@ namespace Flow.Launcher.Infrastructure.Image public static class ImageLoader { private static readonly ImageCache ImageCache = new ImageCache(); - private static BinaryStorage> _storage; + private static BinaryStorage> _storage; private static readonly ConcurrentDictionary GuidToKey = new ConcurrentDictionary(); private static IImageHashGenerator _hashGenerator; private static bool EnableImageHash = true; @@ -32,7 +32,7 @@ namespace Flow.Launcher.Infrastructure.Image public static void Initialize() { - _storage = new BinaryStorage>("Image"); + _storage = new BinaryStorage>("Image"); _hashGenerator = new ImageHashGenerator(); ImageCache.Usage = LoadStorageToConcurrentDictionary(); @@ -62,7 +62,7 @@ namespace Flow.Launcher.Infrastructure.Image lock (_storage) { ImageCache.Cleanup(); - _storage.Save(ImageCache.Usage); + _storage.Save(new Dictionary(ImageCache.Usage)); } } @@ -70,7 +70,7 @@ namespace Flow.Launcher.Infrastructure.Image { lock(_storage) { - var loaded = _storage.TryLoad(new ConcurrentDictionary()); + var loaded = _storage.TryLoad(new Dictionary()); return new ConcurrentDictionary(loaded); } From 4e534b56aca700207b547527449797583e5c2130 Mon Sep 17 00:00:00 2001 From: Arjun Balgovind <32061677+arjunbalgovind@users.noreply.github.com> Date: Mon, 10 Aug 2020 21:47:46 +1000 Subject: [PATCH 006/146] Skip ErrorIcon and DefaultIcon while resizing the dictionary. From arjunbalgovind:user/arbalgov/apperrorFix --- Flow.Launcher.Infrastructure/Image/ImageCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 15090919d..60a191a9c 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -38,7 +38,7 @@ namespace Flow.Launcher.Infrastructure.Image foreach (var key in _data.Keys) { int dictValue; - if (!Usage.TryGetValue(key, out dictValue)) + if (!Usage.TryGetValue(key, out dictValue) && !(key.Equals(Constant.ErrorIcon) || key.Equals(Constant.DefaultIcon))) { ImageSource imgSource; _data.TryRemove(key, out imgSource); From 97f7b48aa134430992af1decdd52ae4fc68209da Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 11 Sep 2020 06:10:57 +1000 Subject: [PATCH 007/146] fix BrowserBookmark dll name capitalisation --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index 8676a3e5b..608ccb4f9 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json @@ -7,6 +7,6 @@ "Version": "1.2.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", - "ExecuteFileName": "Flow.Launcher.Plugin.browserBookmark.dll", + "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", "IcoPath": "Images\\bookmark.png" } From 1e5d7bd928f6e77abbee00f5f9cc0f09fc0309a8 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 16 Sep 2020 21:12:43 +1000 Subject: [PATCH 008/146] add class to load assembly and resolve dependencies for each plugin --- .../Plugin/PluginAssemblyLoader.cs | 45 +++++++++++++++++++ Flow.Launcher.Core/Plugin/PluginsLoader.cs | 12 ++--- 2 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs diff --git a/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs new file mode 100644 index 000000000..5bbcd1158 --- /dev/null +++ b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.Loader; + +namespace Flow.Launcher.Core.Plugin +{ + internal class PluginAssemblyLoader : AssemblyLoadContext + { + private readonly AssemblyDependencyResolver dependencyResolver; + + private readonly AssemblyName assemblyName; + + internal PluginAssemblyLoader(string assemblyFilePath) + { + dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath); + assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyFilePath)); + } + + internal Assembly LoadAssemblyAndDependencies() + { + return LoadFromAssemblyName(assemblyName); + } + + protected override Assembly Load(AssemblyName assemblyName) + { + string assemblyPath = dependencyResolver.ResolveAssemblyToPath(assemblyName); + + if (assemblyPath != null) + { + return LoadFromAssemblyPath(assemblyPath); + } + + return null; + } + + internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type) + { + var allTypes = assembly.ExportedTypes; + + return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(type)); + } + } +} diff --git a/Flow.Launcher.Core/Plugin/PluginsLoader.cs b/Flow.Launcher.Core/Plugin/PluginsLoader.cs index 1025f9bae..224dbd85e 100644 --- a/Flow.Launcher.Core/Plugin/PluginsLoader.cs +++ b/Flow.Launcher.Core/Plugin/PluginsLoader.cs @@ -41,9 +41,9 @@ namespace Flow.Launcher.Core.Plugin { #if DEBUG - var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath); - var types = assembly.GetTypes(); - var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); + var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath); + var assembly = assemblyLoader.LoadAssemblyAndDependencies(); + var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly, typeof(IPlugin)); var plugin = (IPlugin)Activator.CreateInstance(type); #else Assembly assembly = null; @@ -51,10 +51,10 @@ namespace Flow.Launcher.Core.Plugin try { - assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath); + var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath); + assembly = assemblyLoader.LoadAssemblyAndDependencies(); - var types = assembly.GetTypes(); - var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); + var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly, typeof(IPlugin)); plugin = (IPlugin)Activator.CreateInstance(type); } From ef950063c0cd2f5299950462c55d33343d0462fb Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 20 Sep 2020 17:14:47 +1000 Subject: [PATCH 009/146] add Directory.Build.targets and update project files - For all plugin library projects we do not output referenced project assembly dll such as Flow.Launcher.Plugin - Output all PackageReference dlls for plugins --- Directory.Build.targets | 15 +++++++++++++++ .../Flow.Launcher.Plugin.BrowserBookmark.csproj | 2 ++ .../Flow.Launcher.Plugin.Calculator.csproj | 6 ++++-- .../Flow.Launcher.Plugin.Color.csproj | 2 ++ .../Flow.Launcher.Plugin.ControlPanel.csproj | 2 ++ .../Flow.Launcher.Plugin.Explorer.csproj | 1 + .../Flow.Launcher.Plugin.PluginIndicator.csproj | 2 ++ .../Flow.Launcher.Plugin.PluginManagement.csproj | 2 ++ .../Flow.Launcher.Plugin.ProcessKiller.csproj | 2 ++ .../Flow.Launcher.Plugin.Program.csproj | 2 ++ .../Flow.Launcher.Plugin.Shell.csproj | 2 ++ .../Flow.Launcher.Plugin.Sys.csproj | 2 ++ .../Flow.Launcher.Plugin.Url.csproj | 2 ++ .../Flow.Launcher.Plugin.WebSearch.csproj | 2 ++ 14 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 Directory.Build.targets diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 000000000..4596aa084 --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,15 @@ + + + + + false + + + false + + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj index 13daddf10..85b745a6b 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj @@ -1,11 +1,13 @@  + Library netcoreapp3.1 {9B130CC5-14FB-41FF-B310-0A95B6894C37} Properties Flow.Launcher.Plugin.BrowserBookmark Flow.Launcher.Plugin.BrowserBookmark + true false false diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj index e7cae42ae..897e14263 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj @@ -1,12 +1,14 @@ - + + Library netcoreapp3.1 {59BD9891-3837-438A-958D-ADC7F91F6F7E} Properties Flow.Launcher.Plugin.Caculator Flow.Launcher.Plugin.Caculator - true + true + true false false diff --git a/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj b/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj index 19f8fb980..091510d7f 100644 --- a/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj +++ b/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj @@ -1,11 +1,13 @@  + Library netcoreapp3.1 {F35190AA-4758-4D9E-A193-E3BDF6AD3567} Properties Flow.Launcher.Plugin.Color Flow.Launcher.Plugin.Color + true false false diff --git a/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj b/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj index d1c185c36..24b54baf3 100644 --- a/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj +++ b/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj @@ -1,11 +1,13 @@  + Library netcoreapp3.1 {1EE20B48-82FB-48A2-8086-675D6DDAB4F0} Properties Flow.Launcher.Plugin.ControlPanel Flow.Launcher.Plugin.ControlPanel + true false false diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj index efa5339b4..a1a08843a 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj @@ -5,6 +5,7 @@ netcoreapp3.1 true true + true false diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj index 48639156e..0e9fdcdb7 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj @@ -1,11 +1,13 @@  + Library netcoreapp3.1 {FDED22C8-B637-42E8-824A-63B5B6E05A3A} Properties Flow.Launcher.Plugin.PluginIndicator Flow.Launcher.Plugin.PluginIndicator + true false false diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj b/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj index 49451d5ba..5313e1e54 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj @@ -1,12 +1,14 @@  + Library netcoreapp3.1 {049490F0-ECD2-4148-9B39-2135EC346EBE} Properties Flow.Launcher.Plugin.PluginManagement Flow.Launcher.Plugin.PluginManagement true + true false false diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj index ab84aa54a..cf9c96294 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj @@ -1,6 +1,7 @@  + Library netcoreapp3.1 Flow.Launcher.Plugin.ProcessKiller Flow.Launcher.Plugin.ProcessKiller @@ -8,6 +9,7 @@ https://github.com/Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller https://github.com/Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller flow-launcher flow-plugin + true false false diff --git a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj index 331566f90..142c9a0b6 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj +++ b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj @@ -1,6 +1,7 @@  + Library netcoreapp3.1 {FDB3555B-58EF-4AE6-B5F1-904719637AB4} Properties @@ -8,6 +9,7 @@ Flow.Launcher.Plugin.Program true true + true false false diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj b/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj index ad1dd079e..84cfd6031 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj +++ b/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj @@ -1,12 +1,14 @@  + Library netcoreapp3.1 {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} Properties Flow.Launcher.Plugin.Shell Flow.Launcher.Plugin.Shell true + true false false diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj index b63654b7c..482b9717b 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj +++ b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj @@ -1,12 +1,14 @@  + Library netcoreapp3.1 {0B9DE348-9361-4940-ADB6-F5953BFFCCEC} Properties Flow.Launcher.Plugin.Sys Flow.Launcher.Plugin.Sys true + true false false diff --git a/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj b/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj index 75fa52290..30ad90cb6 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj +++ b/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj @@ -1,12 +1,14 @@  + Library netcoreapp3.1 {A3DCCBCA-ACC1-421D-B16E-210896234C26} true Properties Flow.Launcher.Plugin.Url Flow.Launcher.Plugin.Url + true false false diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj b/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj index c2449a49e..56cacab83 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj @@ -1,11 +1,13 @@  + Library netcoreapp3.1 {403B57F2-1856-4FC7-8A24-36AB346B763E} Properties Flow.Launcher.Plugin.WebSearch Flow.Launcher.Plugin.WebSearch + true false false en From a8eda142606cb0066411987132aa3fe2c6701911 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 21 Sep 2020 15:44:14 +1000 Subject: [PATCH 010/146] update dependency resolver to cater for existing dependency in Plugin if the assembly already referenced in Flow.Launcher.Plugin then ignore it --- .../Plugin/PluginAssemblyLoader.cs | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs index 5bbcd1158..b9b878a7b 100644 --- a/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs +++ b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs @@ -1,4 +1,5 @@ -using System; +using Flow.Launcher.Infrastructure; +using System; using System.IO; using System.Linq; using System.Reflection; @@ -10,12 +11,17 @@ namespace Flow.Launcher.Core.Plugin { private readonly AssemblyDependencyResolver dependencyResolver; + private readonly AssemblyDependencyResolver referencedPluginPackageDependencyResolver; + private readonly AssemblyName assemblyName; internal PluginAssemblyLoader(string assemblyFilePath) { dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath); assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyFilePath)); + + referencedPluginPackageDependencyResolver = + new AssemblyDependencyResolver(Path.Combine(Constant.ProgramDirectory, "Flow.Launcher.Plugin.dll")); } internal Assembly LoadAssemblyAndDependencies() @@ -27,12 +33,13 @@ namespace Flow.Launcher.Core.Plugin { string assemblyPath = dependencyResolver.ResolveAssemblyToPath(assemblyName); - if (assemblyPath != null) - { - return LoadFromAssemblyPath(assemblyPath); - } - - return null; + // When resolving dependencies, ignore assembly depenedencies that already exits with Flow.Launcher.Plugin + // Otherwise will get unexpected behaviour with plugins, e.g. JsonIgnore attribute not honored in WebSearch or other plugins + // that use Newtonsoft.Json + if (assemblyPath == null || ExistsInReferencedPluginPackage(assemblyName)) + return null; + + return LoadFromAssemblyPath(assemblyPath); } internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type) @@ -41,5 +48,10 @@ namespace Flow.Launcher.Core.Plugin return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(type)); } + + internal bool ExistsInReferencedPluginPackage(AssemblyName assemblyName) + { + return referencedPluginPackageDependencyResolver.ResolveAssemblyToPath(assemblyName) != null; + } } } From 904ad1a5e185964e7acab55723cd206568a099c5 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 22 Sep 2020 05:38:53 +1000 Subject: [PATCH 011/146] include Directory.Build.targets file in solution --- Flow.Launcher.sln | 1 + 1 file changed, 1 insertion(+) diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 1dd93b2ba..6196aa5df 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -53,6 +53,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .gitattributes = .gitattributes .gitignore = .gitignore appveyor.yml = appveyor.yml + Directory.Build.targets = Directory.Build.targets Scripts\flowlauncher.nuspec = Scripts\flowlauncher.nuspec LICENSE = LICENSE Scripts\post_build.ps1 = Scripts\post_build.ps1 From 7fd9c87bd110d9b416062c59389bda1f094b72bf Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 22 Sep 2020 07:17:01 +1000 Subject: [PATCH 012/146] remove excess or duplicated package references - since we have fixed how dependencies are resolved for plugins, these excess or duplicated package references can be safely removed - for example Newtonsoft.Json can be removed from default plugins as it is included in Flow.Launcher.Plugin project, and external plugins will be resolved to use the reference there --- Flow.Launcher.Core/Flow.Launcher.Core.csproj | 4 ---- .../Flow.Launcher.Infrastructure.csproj | 3 --- Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 7 ++----- Flow.Launcher/Flow.Launcher.csproj | 12 +----------- .../Flow.Launcher.Plugin.Calculator.csproj | 2 -- .../Flow.Launcher.Plugin.Color.csproj | 5 ----- .../Flow.Launcher.Plugin.ControlPanel.csproj | 5 ----- .../Flow.Launcher.Plugin.PluginIndicator.csproj | 5 ----- .../Flow.Launcher.Plugin.PluginManagement.csproj | 6 ------ .../Flow.Launcher.Plugin.Program.csproj | 3 --- .../Flow.Launcher.Plugin.Shell.csproj | 3 --- .../Flow.Launcher.Plugin.Sys.csproj | 5 ----- .../Flow.Launcher.Plugin.Url.csproj | 5 ----- .../Flow.Launcher.Plugin.WebSearch.csproj | 6 ------ 14 files changed, 3 insertions(+), 68 deletions(-) diff --git a/Flow.Launcher.Core/Flow.Launcher.Core.csproj b/Flow.Launcher.Core/Flow.Launcher.Core.csproj index 87c390d34..9f146a457 100644 --- a/Flow.Launcher.Core/Flow.Launcher.Core.csproj +++ b/Flow.Launcher.Core/Flow.Launcher.Core.csproj @@ -54,12 +54,8 @@ - - - - diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index 410d11536..e2f08ea48 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -49,14 +49,11 @@ - - - diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index 0aacc321b..1c2b4b76a 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1 @@ -60,12 +60,9 @@ - + - - - \ No newline at end of file diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 987a685ac..8548ba39e 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -1,4 +1,4 @@ - + WinExe @@ -72,23 +72,13 @@ - - - - all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj index 897e14263..9e1fefdb3 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj @@ -104,9 +104,7 @@ - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj b/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj index 091510d7f..c7fe8271a 100644 --- a/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj +++ b/Plugins/Flow.Launcher.Plugin.Color/Flow.Launcher.Plugin.Color.csproj @@ -98,9 +98,4 @@ - - - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj b/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj index 24b54baf3..699737634 100644 --- a/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj +++ b/Plugins/Flow.Launcher.Plugin.ControlPanel/Flow.Launcher.Plugin.ControlPanel.csproj @@ -98,9 +98,4 @@ - - - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj index 0e9fdcdb7..e6bfa7aa3 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj @@ -98,10 +98,5 @@ PreserveNewest - - - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj b/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj index 5313e1e54..08e89d861 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj @@ -99,10 +99,4 @@ - - - - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj index 142c9a0b6..3802297c7 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj +++ b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj @@ -109,10 +109,7 @@ - - - diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj b/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj index 84cfd6031..178d95010 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj +++ b/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj @@ -96,9 +96,6 @@ - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj index 482b9717b..bdab40457 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj +++ b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj @@ -127,10 +127,5 @@ - - - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj b/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj index 30ad90cb6..7d802d815 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj +++ b/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj @@ -90,10 +90,5 @@ PreserveNewest - - - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj b/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj index 56cacab83..431ca9ce8 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj @@ -141,12 +141,6 @@ - - - - - - From 7211cdca434f376db6c58ae5993c993b87f716ca Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 16 Oct 2020 16:59:28 +1100 Subject: [PATCH 013/146] version bump --- SolutionAssemblyInfo.cs | 6 +++--- appveyor.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SolutionAssemblyInfo.cs b/SolutionAssemblyInfo.cs index 5591de39c..abf7f5e15 100644 --- a/SolutionAssemblyInfo.cs +++ b/SolutionAssemblyInfo.cs @@ -16,6 +16,6 @@ using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("1.3.0")] -[assembly: AssemblyFileVersion("1.3.0")] -[assembly: AssemblyInformationalVersion("1.3.0")] \ No newline at end of file +[assembly: AssemblyVersion("1.3.1")] +[assembly: AssemblyFileVersion("1.3.1")] +[assembly: AssemblyInformationalVersion("1.3.1")] \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index f3bc7cce3..2b2acc304 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.3.0.{build}' +version: '1.3.1.{build}' init: - ps: | From a911cc702404b6e1f282c5aa15e02de7ab636f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Tue, 13 Oct 2020 14:01:26 +0800 Subject: [PATCH 014/146] Fix Copy Fail Error (don't understand why) --- Plugins/Flow.Launcher.Plugin.Calculator/Main.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs index 1235a18e7..949911229 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs @@ -34,7 +34,7 @@ namespace Flow.Launcher.Plugin.Caculator { MagesEngine = new Engine(); } - + public void Init(PluginInitContext context) { Context = context; @@ -78,16 +78,16 @@ namespace Flow.Launcher.Plugin.Caculator { try { - Clipboard.SetText(newResult); + Clipboard.SetDataObject(newResult); return true; } - catch (ExternalException) + catch (ExternalException e) { MessageBox.Show("Copy failed, please try later"); return false; } } - } + } }; } } @@ -111,7 +111,7 @@ namespace Flow.Launcher.Plugin.Caculator { return false; } - + if (!IsBracketComplete(query.Search)) { return false; @@ -164,7 +164,7 @@ namespace Flow.Launcher.Plugin.Caculator return leftBracketCount == 0; } - + public string GetTranslatedPluginTitle() { return Context.API.GetTranslation("flowlauncher_plugin_caculator_plugin_name"); From d9085ca66c58ea19fd0a7dc9db8682d2d8cae715 Mon Sep 17 00:00:00 2001 From: Bao Qian Date: Thu, 15 Oct 2020 21:05:44 +0800 Subject: [PATCH 015/146] Change Reference --- .../Flow.Launcher.Infrastructure.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index 410d11536..d834bd2d3 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -53,10 +53,10 @@ - + From a1327c1cc14ef296a950297201980ced0d68a88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Thu, 15 Oct 2020 21:06:01 +0800 Subject: [PATCH 016/146] Seems that we don't need storage cache --- Flow.Launcher/PublicAPIInstance.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 23f5d85b7..8520f7ba0 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -76,7 +76,6 @@ namespace Flow.Launcher _settingsVM.Save(); PluginManager.Save(); ImageLoader.Save(); - _alphabet.Save(); } public void ReloadAllPluginData() From 3454dc6d7455960612acee731693977007167991 Mon Sep 17 00:00:00 2001 From: Bao Qian Date: Thu, 15 Oct 2020 21:06:57 +0800 Subject: [PATCH 017/146] Change Pinyin Library --- Flow.Launcher.Infrastructure/Alphabet.cs | 154 +++-------------------- 1 file changed, 19 insertions(+), 135 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index 7e24a8206..11fd6873b 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -3,12 +3,12 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; -using hyjiacan.util.p4n; -using hyjiacan.util.p4n.format; using JetBrains.Annotations; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Infrastructure.UserSettings; +using ToolGood.Words.Pinyin; +using System.Threading.Tasks; namespace Flow.Launcher.Infrastructure { @@ -19,160 +19,44 @@ namespace Flow.Launcher.Infrastructure public class Alphabet : IAlphabet { - private readonly HanyuPinyinOutputFormat Format = new HanyuPinyinOutputFormat(); - private ConcurrentDictionary PinyinCache; - private BinaryStorage> _pinyinStorage; + private ConcurrentDictionary _pinyinCache; private Settings _settings; - + public void Initialize([NotNull] Settings settings) { _settings = settings ?? throw new ArgumentNullException(nameof(settings)); - InitializePinyinHelpers(); } - private void InitializePinyinHelpers() - { - Format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); - Stopwatch.Normal("|Flow Launcher.Infrastructure.Alphabet.Initialize|Preload pinyin cache", () => + public string Translate(string content) + { + if (_settings.ShouldUsePinyin) { - _pinyinStorage = new BinaryStorage>("Pinyin"); - - lock(_pinyinStorage) + string result = _pinyinCache.GetValueOrDefault(content); + if (result == null) { - var loaded = _pinyinStorage.TryLoad(new Dictionary()); - - PinyinCache = new ConcurrentDictionary(loaded); - } - - // force pinyin library static constructor initialize - PinyinHelper.toHanyuPinyinStringArray('T', Format); - }); - Log.Info($"|Flow Launcher.Infrastructure.Alphabet.Initialize|Number of preload pinyin combination<{PinyinCache.Count}>"); - } - - public string Translate(string str) - { - return ConvertChineseCharactersToPinyin(str); - } - - public string ConvertChineseCharactersToPinyin(string source) - { - if (!_settings.ShouldUsePinyin) - return source; - - if (string.IsNullOrEmpty(source)) - return source; - - if (!ContainsChinese(source)) - return source; - - var combination = PinyinCombination(source); - - var pinyinArray=combination.Select(x => string.Join("", x)); - var acronymArray = combination.Select(Acronym).Distinct(); - - var joinedSingleStringCombination = new StringBuilder(); - var all = acronymArray.Concat(pinyinArray); - all.ToList().ForEach(x => joinedSingleStringCombination.Append(x)); - - return joinedSingleStringCombination.ToString(); - } - - public void Save() - { - if (!_settings.ShouldUsePinyin) - { - return; - } - - lock(_pinyinStorage) - { - _pinyinStorage.Save(PinyinCache.ToDictionary(i => i.Key, i => i.Value)); - } - } - - private static string[] EmptyStringArray = new string[0]; - private static string[][] Empty2DStringArray = new string[0][]; - - /// - /// replace chinese character with pinyin, non chinese character won't be modified - /// Because we don't have words dictionary, so we can only return all possiblie pinyin combination - /// e.g. 音乐 will return yinyue and yinle - /// should be word or sentence, instead of single character. e.g. 微软 - /// - public string[][] PinyinCombination(string characters) - { - if (!_settings.ShouldUsePinyin || string.IsNullOrEmpty(characters)) - { - return Empty2DStringArray; - } - - if (!PinyinCache.ContainsKey(characters)) - { - var allPinyins = new List(); - foreach (var c in characters) - { - var pinyins = PinyinHelper.toHanyuPinyinStringArray(c, Format); - if (pinyins != null) + if (WordsHelper.HasChinese(content)) { - var r = pinyins.Distinct().ToArray(); - allPinyins.Add(r); + result = WordsHelper.GetPinyin(content,";"); + result = GetFirstPinyinChar(result) + result.Replace(";",""); + _pinyinCache[content] = result; } else { - var r = new[] { c.ToString() }; - allPinyins.Add(r); + result = content; } } - - var combination = allPinyins.Aggregate(Combination).Select(c => c.Split(';')).ToArray(); - PinyinCache[characters] = combination; - return combination; + return result; } else { - return PinyinCache[characters]; + return content; } } - public string Acronym(string[] pinyin) + private string GetFirstPinyinChar(string content) { - var acronym = string.Join("", pinyin.Select(p => p[0])); - return acronym; - } - - public bool ContainsChinese(string word) - { - if (!_settings.ShouldUsePinyin) - { - return false; - } - - if (word.Length > 40) - { - //Skip strings that are too long string for Pinyin conversion. - return false; - } - - var chinese = word.Select(PinyinHelper.toHanyuPinyinStringArray) - .Any(p => p != null); - return chinese; - } - - private string[] Combination(string[] array1, string[] array2) - { - if (!_settings.ShouldUsePinyin) - { - return EmptyStringArray; - } - - var combination = ( - from a1 in array1 - from a2 in array2 - select $"{a1};{a2}" - ).ToArray(); - return combination; + return new string(content.Split(";").Select(c => c.First()).ToArray()); } } -} +} \ No newline at end of file From d17621cd2e4eccb84e54b73fe4e6af422b4795ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sat, 17 Oct 2020 14:17:53 +0800 Subject: [PATCH 018/146] change new string to string.concat() --- Flow.Launcher.Infrastructure/Alphabet.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index 11fd6873b..eda9caaae 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -56,7 +56,7 @@ namespace Flow.Launcher.Infrastructure private string GetFirstPinyinChar(string content) { - return new string(content.Split(";").Select(c => c.First()).ToArray()); + return string.Concat(content.Split(';').Select(x => x.First())); } } } \ No newline at end of file From c4b81a94291461182aec466a794bcc1312e3fdf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 18 Oct 2020 11:35:20 +0800 Subject: [PATCH 019/146] change query translation to Program.Main instead of using Alphabet.Tranlate to avoid cache. --- Flow.Launcher.Infrastructure/StringMatcher.cs | 1 - Plugins/Flow.Launcher.Plugin.Program/Main.cs | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Infrastructure/StringMatcher.cs b/Flow.Launcher.Infrastructure/StringMatcher.cs index 2a4270fb4..d390e48a2 100644 --- a/Flow.Launcher.Infrastructure/StringMatcher.cs +++ b/Flow.Launcher.Infrastructure/StringMatcher.cs @@ -50,7 +50,6 @@ namespace Flow.Launcher.Infrastructure if (_alphabet != null) { - query = _alphabet.Translate(query); stringToCompare = _alphabet.Translate(stringToCompare); } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index 9f3160746..36ff8bbe5 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -8,6 +8,7 @@ using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Plugin.Program.Programs; using Flow.Launcher.Plugin.Program.Views; +using ToolGood.Words.Pinyin; using Stopwatch = Flow.Launcher.Infrastructure.Stopwatch; namespace Flow.Launcher.Plugin.Program @@ -77,13 +78,15 @@ namespace Flow.Launcher.Plugin.Program uwps = _uwps; } + var searchText = WordsHelper.HasChinese(query.Search) ? WordsHelper.GetPinyin(query.Search) : query.Search; + var results1 = win32.AsParallel() .Where(p => p.Enabled) - .Select(p => p.Result(query.Search, _context.API)); + .Select(p => p.Result(searchText, _context.API)); var results2 = uwps.AsParallel() .Where(p => p.Enabled) - .Select(p => p.Result(query.Search, _context.API)); + .Select(p => p.Result(searchText, _context.API)); var result = results1.Concat(results2).Where(r => r != null && r.Score > 0).ToList(); return result; From 4ebfba76a3ec73848b7e9c0ed0f5cd2d3eaf337d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 18 Oct 2020 11:46:56 +0800 Subject: [PATCH 020/146] using ContainKey instead of getvalueofdefault --- Flow.Launcher.Infrastructure/Alphabet.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index eda9caaae..d0e496a2c 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -32,21 +32,20 @@ namespace Flow.Launcher.Infrastructure { if (_settings.ShouldUsePinyin) { - string result = _pinyinCache.GetValueOrDefault(content); - if (result == null) + if (_pinyinCache.ContainsKey(content)) { if (WordsHelper.HasChinese(content)) { - result = WordsHelper.GetPinyin(content,";"); + var result = WordsHelper.GetPinyin(content,";"); result = GetFirstPinyinChar(result) + result.Replace(";",""); _pinyinCache[content] = result; + return result; } else { - result = content; + return content; } } - return result; } else { From dd2d3c68c1ef4eff1b24e392a05dd7c8e5299b5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 18 Oct 2020 11:48:17 +0800 Subject: [PATCH 021/146] fixup the reduced code due to testing --- Flow.Launcher.Infrastructure/Alphabet.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index d0e496a2c..1ea075337 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -36,8 +36,8 @@ namespace Flow.Launcher.Infrastructure { if (WordsHelper.HasChinese(content)) { - var result = WordsHelper.GetPinyin(content,";"); - result = GetFirstPinyinChar(result) + result.Replace(";",""); + var result = WordsHelper.GetPinyin(content, ";"); + result = GetFirstPinyinChar(result) + result.Replace(";", ""); _pinyinCache[content] = result; return result; } @@ -46,6 +46,8 @@ namespace Flow.Launcher.Infrastructure return content; } } + else + return _pinyinCache[content]; } else { From 775910f31e7fef4033d050cc15b539552cc5b973 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 18 Oct 2020 21:02:12 +1100 Subject: [PATCH 022/146] plugin Calculator version bump --- Plugins/Flow.Launcher.Plugin.Calculator/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json index 284a2893d..316788884 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json @@ -4,7 +4,7 @@ "Name": "Calculator", "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", "Author": "cxfksword", - "Version": "1.0.0", + "Version": "1.0.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll", From 6210454bbdaa3d51278eba8e1792ea8928392880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 19 Oct 2020 20:37:40 +0800 Subject: [PATCH 023/146] Fix reverse condition --- Flow.Launcher.Infrastructure/Alphabet.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index 1ea075337..1d0ed93de 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -32,7 +32,7 @@ namespace Flow.Launcher.Infrastructure { if (_settings.ShouldUsePinyin) { - if (_pinyinCache.ContainsKey(content)) + if (!_pinyinCache.ContainsKey(content)) { if (WordsHelper.HasChinese(content)) { From 4bf5b2e0a8f39bb9aed382e130a7e440f820ae34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 19 Oct 2020 20:40:22 +0800 Subject: [PATCH 024/146] Add curly bracket --- Flow.Launcher.Infrastructure/Alphabet.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index 1d0ed93de..1b87dff73 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -47,7 +47,7 @@ namespace Flow.Launcher.Infrastructure } } else - return _pinyinCache[content]; + return (_pinyinCache[content]); } else { From 9b779d90d28030999b4ba91dc9ed18092632de02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 19 Oct 2020 20:40:22 +0800 Subject: [PATCH 025/146] Add curly bracket --- Flow.Launcher.Infrastructure/Alphabet.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index 1d0ed93de..bc92bda0e 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -47,7 +47,9 @@ namespace Flow.Launcher.Infrastructure } } else + { return _pinyinCache[content]; + } } else { From 80a2f0df71f1c863e81d92c1eff8c5e240244637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 21 Oct 2020 17:00:56 +0800 Subject: [PATCH 026/146] Put tranlate query back to fuzzy search until better solution --- Flow.Launcher.Infrastructure/StringMatcher.cs | 1 + Plugins/Flow.Launcher.Plugin.Program/Main.cs | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Infrastructure/StringMatcher.cs b/Flow.Launcher.Infrastructure/StringMatcher.cs index d390e48a2..2a4270fb4 100644 --- a/Flow.Launcher.Infrastructure/StringMatcher.cs +++ b/Flow.Launcher.Infrastructure/StringMatcher.cs @@ -50,6 +50,7 @@ namespace Flow.Launcher.Infrastructure if (_alphabet != null) { + query = _alphabet.Translate(query); stringToCompare = _alphabet.Translate(stringToCompare); } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index 36ff8bbe5..eca6511e8 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -78,15 +78,14 @@ namespace Flow.Launcher.Plugin.Program uwps = _uwps; } - var searchText = WordsHelper.HasChinese(query.Search) ? WordsHelper.GetPinyin(query.Search) : query.Search; var results1 = win32.AsParallel() .Where(p => p.Enabled) - .Select(p => p.Result(searchText, _context.API)); + .Select(p => p.Result(query.Search, _context.API)); var results2 = uwps.AsParallel() .Where(p => p.Enabled) - .Select(p => p.Result(searchText, _context.API)); + .Select(p => p.Result(query.Search, _context.API)); var result = results1.Concat(results2).Where(r => r != null && r.Score > 0).ToList(); return result; From 77aff43d1a74454fd887fe2e54a9224f4f2ea09f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 25 Oct 2020 10:26:56 +0800 Subject: [PATCH 027/146] Initialize uninitialized cache --- Flow.Launcher.Infrastructure/Alphabet.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/Alphabet.cs index bc92bda0e..15f6ef7c4 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/Alphabet.cs @@ -19,7 +19,7 @@ namespace Flow.Launcher.Infrastructure public class Alphabet : IAlphabet { - private ConcurrentDictionary _pinyinCache; + private ConcurrentDictionary _pinyinCache = new ConcurrentDictionary(); private Settings _settings; public void Initialize([NotNull] Settings settings) From 991227a6aa735681d50f8e059f3bd4a3526f9d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 14 Oct 2020 23:37:09 +0800 Subject: [PATCH 028/146] Add Enabled property to generic --- Plugins/Flow.Launcher.Plugin.Program/Programs/IProgram.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/IProgram.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/IProgram.cs index b42acfbce..d4c96e5b7 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/IProgram.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/IProgram.cs @@ -9,5 +9,6 @@ namespace Flow.Launcher.Plugin.Program.Programs string UniqueIdentifier { get; set; } string Name { get; } string Location { get; } + bool Enabled { get; } } } From 24ce10183ebb09e542ea15e1647bb3e6e703e406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 14 Oct 2020 23:37:43 +0800 Subject: [PATCH 029/146] Improve reindex speed Co-authored-by: Qian Bao --- .../Programs/Win32.cs | 101 ++++++------------ 1 file changed, 35 insertions(+), 66 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index cdea767f3..49a0741d1 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -140,8 +140,6 @@ namespace Flow.Launcher.Plugin.Program.Programs Title = api.GetTranslation("flowlauncher_plugin_program_open_containing_folder"), Action = _ => { - - Main.StartProcess(Process.Start, new ProcessStartInfo("explorer", ParentDirectory)); return true; @@ -254,10 +252,7 @@ namespace Flow.Launcher.Plugin.Program.Programs { var program = Win32Program(path); var info = FileVersionInfo.GetVersionInfo(path); - if (!string.IsNullOrEmpty(info.FileDescription)) - { - program.Description = info.FileDescription; - } + program.Description = info.FileDescription; return program; } catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException) @@ -273,47 +268,23 @@ namespace Flow.Launcher.Plugin.Program.Programs { if (!Directory.Exists(directory)) return new string[] { }; - var files = new List(); - var folderQueue = new Queue(); - folderQueue.Enqueue(directory); - do + try { - var currentDirectory = folderQueue.Dequeue(); - try - { - foreach (var suffix in suffixes) - { - try - { - files.AddRange(Directory.EnumerateFiles(currentDirectory, $"*.{suffix}", SearchOption.TopDirectoryOnly)); - } - catch (DirectoryNotFoundException e) - { - ProgramLogger.LogException($"|Win32|ProgramPaths|{currentDirectory}" + - "|The directory trying to load the program from does not exist", e); - } - } - } - catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException) - { - ProgramLogger.LogException($"|Win32|ProgramPaths|{currentDirectory}" + - $"|Permission denied when trying to load programs from {currentDirectory}", e); - } + var paths = Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories) + .Where(x => suffixes.Contains(Extension(x))); + return paths; - try - { - foreach (var childDirectory in Directory.EnumerateDirectories(currentDirectory, "*", SearchOption.TopDirectoryOnly)) - { - folderQueue.Enqueue(childDirectory); - } - } - catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException) - { - ProgramLogger.LogException($"|Win32|ProgramPaths|{currentDirectory}" + - $"|Permission denied when trying to load programs from {currentDirectory}", e); - } - } while (folderQueue.Any()); - return files; + } + catch (DirectoryNotFoundException e) + { + ProgramLogger.LogException($"Directory not found {directory}", e); + return new string[] { }; + } + catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException) + { + ProgramLogger.LogException($"Permission denied {directory}", e); + return new string[] { }; + } } private static string Extension(string path) @@ -331,23 +302,20 @@ namespace Flow.Launcher.Plugin.Program.Programs private static ParallelQuery UnregisteredPrograms(List sources, string[] suffixes) { - var listToAdd = new List(); - sources.Where(s => Directory.Exists(s.Location) && s.Enabled) + var paths = sources.Where(s => Directory.Exists(s.Location) && s.Enabled) .SelectMany(s => ProgramPaths(s.Location, suffixes)) - .ToList() .Where(t1 => !Main._settings.DisabledProgramSources.Any(x => t1 == x.UniqueIdentifier)) - .ToList() - .ForEach(x => listToAdd.Add(x)); + .Distinct(); - var paths = listToAdd.Distinct().ToArray(); + var programs = paths.AsParallel().Select(x => Extension(x) switch + { + ExeExtension => ExeProgram(x), + ShortcutExtension => LnkProgram(x), + _ => Win32Program(x) + }); - var programs1 = paths.AsParallel().Where(p => Extension(p) == ExeExtension).Select(ExeProgram); - var programs2 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(LnkProgram); - var programs3 = from p in paths.AsParallel() - let e = Extension(p) - where e != ShortcutExtension && e != ExeExtension - select Win32Program(p); - return programs1.Concat(programs2).Concat(programs3); + + return programs; } private static ParallelQuery StartMenuPrograms(string[] suffixes) @@ -360,15 +328,16 @@ namespace Flow.Launcher.Plugin.Program.Programs var paths2 = ProgramPaths(directory2, suffixes); var toFilter = paths1.Concat(paths2); - var paths = toFilter - .Where(t1 => !disabledProgramsList.Any(x => x.UniqueIdentifier == t1)) - .Select(t1 => t1) - .Distinct() - .ToArray(); - var programs1 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(LnkProgram); - var programs2 = paths.AsParallel().Where(p => Extension(p) == ApplicationReferenceExtension).Select(Win32Program); - var programs = programs1.Concat(programs2).Where(p => p.Valid); + var programs = toFilter + .AsParallel() + .Where(t1 => !disabledProgramsList.Any(x => x.UniqueIdentifier == t1)) + .Distinct() + .Select(x => Extension(x) switch + { + ShortcutExtension => LnkProgram(x), + _ => Win32Program(x) + }).Where(x => x.Valid); return programs; } From 86edae2bc6d711a86f92b2e6c4946e2731e18a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 14 Oct 2020 23:43:16 +0800 Subject: [PATCH 030/146] Use Generic to remove duplicate query --- Plugins/Flow.Launcher.Plugin.Program/Main.cs | 36 ++++++++------------ 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index 9f3160746..8f124f3a4 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -71,21 +71,17 @@ namespace Flow.Launcher.Plugin.Program Win32[] win32; UWP.Application[] uwps; - lock (IndexLock) - { // just take the reference inside the lock to eliminate query time issues. - win32 = _win32s; - uwps = _uwps; - } + win32 = _win32s; + uwps = _uwps; - var results1 = win32.AsParallel() - .Where(p => p.Enabled) - .Select(p => p.Result(query.Search, _context.API)); + var result = win32.Cast() + .Concat(uwps) + .AsParallel() + .Where(p => p.Enabled) + .Select(p => p.Result(query.Search, _context.API)) + .Where(r => r?.Score > 0) + .ToList(); - var results2 = uwps.AsParallel() - .Where(p => p.Enabled) - .Select(p => p.Result(query.Search, _context.API)); - - var result = results1.Concat(results2).Where(r => r != null && r.Score > 0).ToList(); return result; } @@ -97,10 +93,9 @@ namespace Flow.Launcher.Plugin.Program public static void IndexWin32Programs() { var win32S = Win32.All(_settings); - lock (IndexLock) - { - _win32s = win32S; - } + + _win32s = win32S; + } public static void IndexUWPPrograms() @@ -109,10 +104,9 @@ namespace Flow.Launcher.Plugin.Program var support = Environment.OSVersion.Version.Major >= windows10.Major; var applications = support ? UWP.All() : new UWP.Application[] { }; - lock (IndexLock) - { - _uwps = applications; - } + + _uwps = applications; + } public static void IndexPrograms() From d65f5a334775b4f65978d58773b398691e33fe37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 25 Oct 2020 11:26:54 +0800 Subject: [PATCH 031/146] remove extra fuzzy search Co-authored-by: Qian Bao --- .../Programs/UWP.cs | 45 +++++++----------- .../Programs/Win32.cs | 47 ++++++------------- 2 files changed, 31 insertions(+), 61 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 69e077ee2..1ebcdc907 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -265,27 +265,30 @@ namespace Flow.Launcher.Plugin.Program.Programs public Application(){} - private int Score(string query) - { - var displayNameMatch = StringMatcher.FuzzySearch(query, DisplayName); - var descriptionMatch = StringMatcher.FuzzySearch(query, Description); - var score = new[] { displayNameMatch.Score, descriptionMatch.Score }.Max(); - return score; - } public Result Result(string query, IPublicAPI api) { - var score = Score(query); - if (score <= 0) - { // no need to create result if score is 0 + var title = (Name, Description) switch + { + (var n, null) => n, + (var n, var d) when d.Contains(n) => d, + (var n, var d) when n.Contains(d) => n, + (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", + _ => Name + }; + + var matchResult = StringMatcher.FuzzySearch(query, title); + + if (!matchResult.Success) return null; - } var result = new Result { + Title = title, SubTitle = Package.Location, Icon = Logo, - Score = score, + Score = matchResult.Score, + TitleHighlightData = matchResult.MatchData, ContextData = this, Action = e => { @@ -294,23 +297,7 @@ namespace Flow.Launcher.Plugin.Program.Programs } }; - if (Description.Length >= DisplayName.Length && - Description.Substring(0, DisplayName.Length) == DisplayName) - { - result.Title = Description; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData; - } - else if (!string.IsNullOrEmpty(Description)) - { - var title = $"{DisplayName}: {Description}"; - result.Title = title; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, title).MatchData; - } - else - { - result.Title = DisplayName; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, DisplayName).MatchData; - } + return result; } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 49a0741d1..f1fcc4ef7 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -33,29 +33,30 @@ namespace Flow.Launcher.Plugin.Program.Programs private const string ApplicationReferenceExtension = "appref-ms"; private const string ExeExtension = "exe"; - private int Score(string query) - { - var nameMatch = StringMatcher.FuzzySearch(query, Name); - var descriptionMatch = StringMatcher.FuzzySearch(query, Description); - var executableNameMatch = StringMatcher.FuzzySearch(query, ExecutableName); - var score = new[] { nameMatch.Score, descriptionMatch.Score, executableNameMatch.Score }.Max(); - return score; - } - public Result Result(string query, IPublicAPI api) { - var score = Score(query); - if (score <= 0) - { // no need to create result if this is zero + var title = (Name, Description) switch + { + (var n, null) => n, + (var n, var d) when d.Contains(n) => d, + (var n, var d) when n.Contains(d) => n, + (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", + _ => Name + }; + + var matchResult = StringMatcher.FuzzySearch(query, title); + + if (!matchResult.Success) return null; - } var result = new Result { + Title = title, SubTitle = FullPath, IcoPath = IcoPath, - Score = score, + Score = matchResult.Score, + TitleHighlightData = matchResult.MatchData, ContextData = this, Action = e => { @@ -72,24 +73,6 @@ namespace Flow.Launcher.Plugin.Program.Programs } }; - if (Description.Length >= Name.Length && - Description.Substring(0, Name.Length) == Name) - { - result.Title = Description; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData; - } - else if (!string.IsNullOrEmpty(Description)) - { - var title = $"{Name}: {Description}"; - result.Title = title; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, title).MatchData; - } - else - { - result.Title = Name; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, Name).MatchData; - } - return result; } From 04ee651b64b28dbd8087dc1aadb9f35b7653093b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 25 Oct 2020 11:26:54 +0800 Subject: [PATCH 032/146] remove extra fuzzy search Co-authored-by: Qian Bao --- .../Programs/UWP.cs | 45 +++++++----------- .../Programs/Win32.cs | 47 ++++++------------- 2 files changed, 31 insertions(+), 61 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 69e077ee2..1ebcdc907 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -265,27 +265,30 @@ namespace Flow.Launcher.Plugin.Program.Programs public Application(){} - private int Score(string query) - { - var displayNameMatch = StringMatcher.FuzzySearch(query, DisplayName); - var descriptionMatch = StringMatcher.FuzzySearch(query, Description); - var score = new[] { displayNameMatch.Score, descriptionMatch.Score }.Max(); - return score; - } public Result Result(string query, IPublicAPI api) { - var score = Score(query); - if (score <= 0) - { // no need to create result if score is 0 + var title = (Name, Description) switch + { + (var n, null) => n, + (var n, var d) when d.Contains(n) => d, + (var n, var d) when n.Contains(d) => n, + (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", + _ => Name + }; + + var matchResult = StringMatcher.FuzzySearch(query, title); + + if (!matchResult.Success) return null; - } var result = new Result { + Title = title, SubTitle = Package.Location, Icon = Logo, - Score = score, + Score = matchResult.Score, + TitleHighlightData = matchResult.MatchData, ContextData = this, Action = e => { @@ -294,23 +297,7 @@ namespace Flow.Launcher.Plugin.Program.Programs } }; - if (Description.Length >= DisplayName.Length && - Description.Substring(0, DisplayName.Length) == DisplayName) - { - result.Title = Description; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData; - } - else if (!string.IsNullOrEmpty(Description)) - { - var title = $"{DisplayName}: {Description}"; - result.Title = title; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, title).MatchData; - } - else - { - result.Title = DisplayName; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, DisplayName).MatchData; - } + return result; } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 49a0741d1..f1fcc4ef7 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -33,29 +33,30 @@ namespace Flow.Launcher.Plugin.Program.Programs private const string ApplicationReferenceExtension = "appref-ms"; private const string ExeExtension = "exe"; - private int Score(string query) - { - var nameMatch = StringMatcher.FuzzySearch(query, Name); - var descriptionMatch = StringMatcher.FuzzySearch(query, Description); - var executableNameMatch = StringMatcher.FuzzySearch(query, ExecutableName); - var score = new[] { nameMatch.Score, descriptionMatch.Score, executableNameMatch.Score }.Max(); - return score; - } - public Result Result(string query, IPublicAPI api) { - var score = Score(query); - if (score <= 0) - { // no need to create result if this is zero + var title = (Name, Description) switch + { + (var n, null) => n, + (var n, var d) when d.Contains(n) => d, + (var n, var d) when n.Contains(d) => n, + (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", + _ => Name + }; + + var matchResult = StringMatcher.FuzzySearch(query, title); + + if (!matchResult.Success) return null; - } var result = new Result { + Title = title, SubTitle = FullPath, IcoPath = IcoPath, - Score = score, + Score = matchResult.Score, + TitleHighlightData = matchResult.MatchData, ContextData = this, Action = e => { @@ -72,24 +73,6 @@ namespace Flow.Launcher.Plugin.Program.Programs } }; - if (Description.Length >= Name.Length && - Description.Substring(0, Name.Length) == Name) - { - result.Title = Description; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData; - } - else if (!string.IsNullOrEmpty(Description)) - { - var title = $"{Name}: {Description}"; - result.Title = title; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, title).MatchData; - } - else - { - result.Title = Name; - result.TitleHighlightData = StringMatcher.FuzzySearch(query, Name).MatchData; - } - return result; } From 22fa8c164b07338d006a45e356df171d8afb47e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 25 Oct 2020 11:29:23 +0800 Subject: [PATCH 033/146] Version Bump --- Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 0316a2397..3eb4a40e1 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "1.0.0", + "Version": "1.1.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", From a266c3fa6a599b41d828c1e54dd7e4b26a237bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 26 Oct 2020 11:35:08 +0800 Subject: [PATCH 034/146] Add Edge Dev bookmark --- .../Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs index 12b80c08a..376808549 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarks.cs @@ -18,7 +18,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark return bookmarks; } - private void ParseEdgeBookmarks(String path, string source) + private void ParseEdgeBookmarks(string path, string source) { if (!File.Exists(path)) return; @@ -72,12 +72,13 @@ namespace Flow.Launcher.Plugin.BrowserBookmark private void LoadEdgeBookmarks() { - String platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + string platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); LoadEdgeBookmarks(Path.Combine(platformPath, @"Microsoft\Edge\User Data"), "Microsoft Edge"); + LoadEdgeBookmarks(Path.Combine(platformPath, @"Microsoft\Edge Dev\User Data"), "Microsoft Edge Dev"); LoadEdgeBookmarks(Path.Combine(platformPath, @"Microsoft\Edge SxS\User Data"), "Microsoft Edge Canary"); } - private String DecodeUnicode(String dataStr) + private string DecodeUnicode(string dataStr) { Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})"); return reg.Replace(dataStr, m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); From 64f5181ae61fa83fb81b317f6bd7a850f01f9e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 26 Oct 2020 11:34:59 +0800 Subject: [PATCH 035/146] Use the score from fuzzy search for bookmark search --- .../Commands/Bookmarks.cs | 14 ++-- .../Main.cs | 68 ++++++++++++------- 2 files changed, 51 insertions(+), 31 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs index 7c2db8bf9..452e99845 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs @@ -6,19 +6,19 @@ namespace Flow.Launcher.Plugin.BrowserBookmark.Commands { internal static class Bookmarks { - internal static bool MatchProgram(Bookmark bookmark, string queryString) + internal static MatchResult MatchProgram(Bookmark bookmark, string queryString) { - if (StringMatcher.FuzzySearch(queryString, bookmark.Name).IsSearchPrecisionScoreMet()) return true; - if (StringMatcher.FuzzySearch(queryString, bookmark.PinyinName).IsSearchPrecisionScoreMet()) return true; - if (StringMatcher.FuzzySearch(queryString, bookmark.Url).IsSearchPrecisionScoreMet()) return true; - - return false; + var match = StringMatcher.FuzzySearch(queryString, bookmark.Name); + if (match.IsSearchPrecisionScoreMet()) + return match; + else + return StringMatcher.FuzzySearch(queryString, bookmark.Url); } internal static List LoadAllBookmarks() { var allbookmarks = new List(); - + var chromeBookmarks = new ChromeBookmarks(); var mozBookmarks = new FirefoxBookmarks(); var edgeBookmarks = new EdgeBookmarks(); diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index 67ee87f94..47493654f 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -12,7 +12,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark public class Main : ISettingProvider, IPlugin, IReloadable, IPluginI18n, ISavable { private PluginInitContext context; - + private List cachedBookmarks = new List(); private readonly Settings _settings; @@ -37,36 +37,56 @@ namespace Flow.Launcher.Plugin.BrowserBookmark // Should top results be returned? (true if no search parameters have been passed) var topResults = string.IsNullOrEmpty(param); - - var returnList = cachedBookmarks; + if (!topResults) { // Since we mixed chrome and firefox bookmarks, we should order them again - returnList = cachedBookmarks.Where(o => Bookmarks.MatchProgram(o, param)).ToList(); - returnList = returnList.OrderByDescending(o => o.Score).ToList(); - } - - return returnList.Select(c => new Result() - { - Title = c.Name, - SubTitle = c.Url, - IcoPath = @"Images\bookmark.png", - Score = 5, - Action = (e) => + var returnList = cachedBookmarks.Select(c => new Result() { - if (_settings.OpenInNewBrowserWindow) + Title = c.Name, + SubTitle = c.Url, + IcoPath = @"Images\bookmark.png", + Score = Bookmarks.MatchProgram(c, param).Score, + Action = _ => { - c.Url.NewBrowserWindow(_settings.BrowserPath); - } - else - { - c.Url.NewTabInBrowser(_settings.BrowserPath); - } + if (_settings.OpenInNewBrowserWindow) + { + c.Url.NewBrowserWindow(_settings.BrowserPath); + } + else + { + c.Url.NewTabInBrowser(_settings.BrowserPath); + } - return true; - } - }).ToList(); + return true; + } + }).Where(r => r.Score > 0); + return returnList.ToList(); + } + else + { + return cachedBookmarks.Select(c => new Result() + { + Title = c.Name, + SubTitle = c.Url, + IcoPath = @"Images\bookmark.png", + Score = 5, + Action = _ => + { + if (_settings.OpenInNewBrowserWindow) + { + c.Url.NewBrowserWindow(_settings.BrowserPath); + } + else + { + c.Url.NewTabInBrowser(_settings.BrowserPath); + } + + return true; + } + }).ToList(); + } } public void ReloadData() From ca264c326a9a1252d475d5e0215b4b4048d07dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 28 Oct 2020 12:11:49 +0800 Subject: [PATCH 036/146] Change contain to StartWith --- Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs | 6 +++--- Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 1ebcdc907..590a15b56 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -271,13 +271,13 @@ namespace Flow.Launcher.Plugin.Program.Programs var title = (Name, Description) switch { (var n, null) => n, - (var n, var d) when d.Contains(n) => d, - (var n, var d) when n.Contains(d) => n, + (var n, var d) when d.StartsWith(n) => d, + (var n, var d) when n.StartsWith(d) => n, (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", _ => Name }; - var matchResult = StringMatcher.FuzzySearch(query, title); + var matchResult = StringMatcher.FuzzySearch(query, Name); if (!matchResult.Success) return null; diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index f1fcc4ef7..5630ae26e 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -39,13 +39,13 @@ namespace Flow.Launcher.Plugin.Program.Programs var title = (Name, Description) switch { (var n, null) => n, - (var n, var d) when d.Contains(n) => d, - (var n, var d) when n.Contains(d) => n, + (var n, var d) when d.StartsWith(n) => d, + (var n, var d) when n.StartsWith(d) => n, (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", _ => Name }; - var matchResult = StringMatcher.FuzzySearch(query, title); + var matchResult = StringMatcher.FuzzySearch(query, Name); if (!matchResult.Success) return null; From 8be2cf1493a77f3ebe42f7e34912841bc45a74a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 28 Oct 2020 12:11:49 +0800 Subject: [PATCH 037/146] Change contain to StartWith --- Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs | 4 ++-- Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 1ebcdc907..b2520ef00 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -271,8 +271,8 @@ namespace Flow.Launcher.Plugin.Program.Programs var title = (Name, Description) switch { (var n, null) => n, - (var n, var d) when d.Contains(n) => d, - (var n, var d) when n.Contains(d) => n, + (var n, var d) when d.StartsWith(n) => d, + (var n, var d) when n.StartsWith(d) => n, (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", _ => Name }; diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index f1fcc4ef7..4dcc51a7b 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -39,8 +39,8 @@ namespace Flow.Launcher.Plugin.Program.Programs var title = (Name, Description) switch { (var n, null) => n, - (var n, var d) when d.Contains(n) => d, - (var n, var d) when n.Contains(d) => n, + (var n, var d) when d.StartsWith(n) => d, + (var n, var d) when n.StartsWith(d) => n, (var n, var d) when !string.IsNullOrEmpty(d) => $"{n}: {d}", _ => Name }; From f146dd6d8b65c88bca0a17e880cd60955c04b82c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 1 Nov 2020 18:04:39 +0800 Subject: [PATCH 038/146] Removed unused using due to query translation --- Plugins/Flow.Launcher.Plugin.Program/Main.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index eca6511e8..e15742c8a 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -8,7 +8,6 @@ using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Plugin.Program.Programs; using Flow.Launcher.Plugin.Program.Views; -using ToolGood.Words.Pinyin; using Stopwatch = Flow.Launcher.Infrastructure.Stopwatch; namespace Flow.Launcher.Plugin.Program From eb736562fce03a1db0c7824dcb7e7554fb834769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 1 Nov 2020 18:07:35 +0800 Subject: [PATCH 039/146] Change the Alphabet Name to allow future expansion --- .../{Alphabet.cs => PinyinAlphabet.cs} | 2 +- Flow.Launcher/App.xaml.cs | 2 +- Flow.Launcher/PublicAPIInstance.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename Flow.Launcher.Infrastructure/{Alphabet.cs => PinyinAlphabet.cs} (97%) diff --git a/Flow.Launcher.Infrastructure/Alphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs similarity index 97% rename from Flow.Launcher.Infrastructure/Alphabet.cs rename to Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 15f6ef7c4..38f1ab879 100644 --- a/Flow.Launcher.Infrastructure/Alphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -17,7 +17,7 @@ namespace Flow.Launcher.Infrastructure string Translate(string stringToTranslate); } - public class Alphabet : IAlphabet + public class PinyinAlphabet : IAlphabet { private ConcurrentDictionary _pinyinCache = new ConcurrentDictionary(); private Settings _settings; diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 731dc1541..59bdbc896 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -29,7 +29,7 @@ namespace Flow.Launcher private SettingWindowViewModel _settingsVM; private readonly Updater _updater = new Updater(Flow.Launcher.Properties.Settings.Default.GithubRepo); private readonly Portable _portable = new Portable(); - private readonly Alphabet _alphabet = new Alphabet(); + private readonly PinyinAlphabet _alphabet = new PinyinAlphabet(); private StringMatcher _stringMatcher; [STAThread] diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 8520f7ba0..0cc5a0e5d 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -21,11 +21,11 @@ namespace Flow.Launcher { private readonly SettingWindowViewModel _settingsVM; private readonly MainViewModel _mainVM; - private readonly Alphabet _alphabet; + private readonly PinyinAlphabet _alphabet; #region Constructor - public PublicAPIInstance(SettingWindowViewModel settingsVM, MainViewModel mainVM, Alphabet alphabet) + public PublicAPIInstance(SettingWindowViewModel settingsVM, MainViewModel mainVM, PinyinAlphabet alphabet) { _settingsVM = settingsVM; _mainVM = mainVM; From da801f8eff81bf8739b35a152ffed150773254d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 1 Nov 2020 19:19:12 +0800 Subject: [PATCH 040/146] remove extra whitespace --- Plugins/Flow.Launcher.Plugin.Program/Main.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index e15742c8a..9f3160746 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -77,7 +77,6 @@ namespace Flow.Launcher.Plugin.Program uwps = _uwps; } - var results1 = win32.AsParallel() .Where(p => p.Enabled) .Select(p => p.Result(query.Search, _context.API)); From 9caa4d94bdde42131eeb84b92e07f287d5d3fcc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 1 Nov 2020 19:22:31 +0800 Subject: [PATCH 041/146] remove extra else --- .../Commands/Bookmarks.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs index 452e99845..c7013aa67 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/Bookmarks.cs @@ -11,8 +11,8 @@ namespace Flow.Launcher.Plugin.BrowserBookmark.Commands var match = StringMatcher.FuzzySearch(queryString, bookmark.Name); if (match.IsSearchPrecisionScoreMet()) return match; - else - return StringMatcher.FuzzySearch(queryString, bookmark.Url); + + return StringMatcher.FuzzySearch(queryString, bookmark.Url); } internal static List LoadAllBookmarks() From a0f552f3fc21571c6e12338ae82eb82e16ce2f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 1 Nov 2020 19:24:26 +0800 Subject: [PATCH 042/146] remove unused PinyinName Property and Version Bump --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs | 2 -- Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs index 1149042dd..790c03686 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Bookmark.cs @@ -19,10 +19,8 @@ namespace Flow.Launcher.Plugin.BrowserBookmark set { m_Name = value; - PinyinName = m_Name.Unidecode(); } } - public string PinyinName { get; private set; } public string Url { get; set; } public string Source { get; set; } public int Score { get; set; } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index 8676a3e5b..7bb662b36 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json @@ -4,7 +4,7 @@ "Name": "Browser Bookmarks", "Description": "Search your browser bookmarks", "Author": "qianlifeng, Ioannis G.", - "Version": "1.2.0", + "Version": "1.2.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.browserBookmark.dll", From 3181637fc1b5ff41fd8df8d3698451f2cf377728 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 2 Nov 2020 07:52:20 +1100 Subject: [PATCH 043/146] bump version --- SolutionAssemblyInfo.cs | 6 +++--- appveyor.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SolutionAssemblyInfo.cs b/SolutionAssemblyInfo.cs index abf7f5e15..fc81e57e7 100644 --- a/SolutionAssemblyInfo.cs +++ b/SolutionAssemblyInfo.cs @@ -16,6 +16,6 @@ using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("1.3.1")] -[assembly: AssemblyFileVersion("1.3.1")] -[assembly: AssemblyInformationalVersion("1.3.1")] \ No newline at end of file +[assembly: AssemblyVersion("1.4.0")] +[assembly: AssemblyFileVersion("1.4.0")] +[assembly: AssemblyInformationalVersion("1.4.0")] \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 2b2acc304..3d744f5cb 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.3.1.{build}' +version: '1.4.0.{build}' init: - ps: | From 465146d36f9a44ecec831043d0509858e4909b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 4 Nov 2020 07:42:35 +0800 Subject: [PATCH 044/146] Add Exploere Customize to Program Plugin --- .../Flow.Launcher.Plugin.Program/Programs/UWP.cs | 4 +++- .../Flow.Launcher.Plugin.Program/Programs/Win32.cs | 7 +++---- Plugins/Flow.Launcher.Plugin.Program/Settings.cs | 1 + .../Views/ProgramSetting.xaml | 13 ++++++++++--- .../Views/ProgramSetting.xaml.cs | 7 +++++++ 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 69e077ee2..4e8ff8e54 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -324,7 +324,9 @@ namespace Flow.Launcher.Plugin.Program.Programs Action = _ => { - Main.StartProcess(Process.Start, new ProcessStartInfo(Package.Location)); + Main.StartProcess(Process.Start, new ProcessStartInfo( + !string.IsNullOrEmpty(Main._settings.CustomizedExploere)?Main._settings.CustomizedExploere:"exploere" + , Package.Location)); return true; }, diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index cdea767f3..662ca270e 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -140,10 +140,9 @@ namespace Flow.Launcher.Plugin.Program.Programs Title = api.GetTranslation("flowlauncher_plugin_program_open_containing_folder"), Action = _ => { - - - Main.StartProcess(Process.Start, new ProcessStartInfo("explorer", ParentDirectory)); - + Main.StartProcess(Process.Start, new ProcessStartInfo( + !string.IsNullOrEmpty(Main._settings.CustomizedExploere)?Main._settings.CustomizedExploere:"exploere" + , ParentDirectory)); return true; }, IcoPath = "Images/folder.png" diff --git a/Plugins/Flow.Launcher.Plugin.Program/Settings.cs b/Plugins/Flow.Launcher.Plugin.Program/Settings.cs index fcb4cbf2d..28a4ae145 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Settings.cs @@ -14,6 +14,7 @@ namespace Flow.Launcher.Plugin.Program public bool EnableStartMenuSource { get; set; } = true; public bool EnableRegistrySource { get; set; } = true; + public string CustomizedExploere { get; set; } = "exploere"; internal const char SuffixSeperator = ';'; diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml index 6051e0579..1307b61d0 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml @@ -5,12 +5,13 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:program="clr-namespace:Flow.Launcher.Plugin.Program" mc:Ignorable="d" - d:DesignHeight="300" d:DesignWidth="600"> + d:DesignHeight="404.508" d:DesignWidth="600"> + @@ -24,7 +25,7 @@ - + @@ -74,6 +75,12 @@ + - diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index eb5fd7de0..60183f545 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -275,5 +275,10 @@ namespace Flow.Launcher { Close(); } + + private void Button_Click(object sender, RoutedEventArgs e) + { + System.Diagnostics.Process.Start("explorer",$"{DataLocation.DataDirectory()}\\Themes"); + } } } From 2fb8e4ee09a77d7eaf1dc5b45e93510c7fb853ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 15 Nov 2020 13:51:12 +0800 Subject: [PATCH 070/146] change event name --- Flow.Launcher/SettingWindow.xaml | 2 +- Flow.Launcher/SettingWindow.xaml.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index fd657cd22..32f9e9a6e 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -211,7 +211,7 @@ - + diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 60183f545..20692c16e 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -276,7 +276,7 @@ namespace Flow.Launcher Close(); } - private void Button_Click(object sender, RoutedEventArgs e) + private void OpenPluginFolder(object sender, RoutedEventArgs e) { System.Diagnostics.Process.Start("explorer",$"{DataLocation.DataDirectory()}\\Themes"); } From 4138b7bb69e7e6a8197f85c7ef1f0b3d60b52fa3 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 15 Nov 2020 20:25:53 +1100 Subject: [PATCH 071/146] update readme to make it clear for Everything users --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b44628744..d7f8dd7ba 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Windows may complain about security due to code not being signed, this will be c **Integrations:** - If you use python plugins, install [python3](https://www.python.org/downloads/): `.exe` installer + add it to `%PATH%` or set it in flow's settings + - Flow searches files and contents via Windows Index Search, to use Everything, download the plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.Everything/releases/latest) **Usage** - Open flow's search window: Alt+Space is the default hotkey From db4ed0436abd54be8fe91a1203343e74c14ba5c5 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 15 Nov 2020 19:05:14 +0200 Subject: [PATCH 072/146] add global.json --- global.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 global.json diff --git a/global.json b/global.json new file mode 100644 index 000000000..c3efffd40 --- /dev/null +++ b/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "version": "3.1.201", + "rollForward": "latestFeature" + } + } \ No newline at end of file From 048981a749532c37f4c78e501944014ff5587bd3 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 16 Nov 2020 06:16:03 +1100 Subject: [PATCH 073/146] update to use FilesFolders class --- Flow.Launcher/SettingWindow.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 20692c16e..b21bb2904 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -278,7 +278,7 @@ namespace Flow.Launcher private void OpenPluginFolder(object sender, RoutedEventArgs e) { - System.Diagnostics.Process.Start("explorer",$"{DataLocation.DataDirectory()}\\Themes"); + FilesFolders.OpenPath(Path.Combine(DataLocation.DataDirectory(), "Themes")); } } } From 9d8f18fbbed292b1b3df9b1ffeff960224065bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Kubala?= <37414585+kubalav@users.noreply.github.com> Date: Sun, 15 Nov 2020 20:24:32 +0100 Subject: [PATCH 074/146] Add Slovak translations (#205) --- Flow.Launcher/Languages/sk.xaml | 44 ++++++++++------- .../Languages/sk.xaml | 15 ++++++ .../Languages/sk.xaml | 16 +++++++ .../Languages/sk.xaml | 8 ++++ .../Languages/sk.xaml | 8 ++++ .../Languages/sk.xaml | 8 ++++ .../Languages/sk.xaml | 8 ++++ .../Languages/sk.xaml | 12 +++++ .../Languages/sk.xaml | 48 +++++++++++++++++++ .../Languages/sk.xaml | 14 ++++++ .../Languages/sk.xaml | 32 +++++++++++++ .../Languages/sk.xaml | 14 ++++++ .../Languages/sk.xaml | 33 +++++++++++++ 13 files changed, 243 insertions(+), 17 deletions(-) create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Color/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.ControlPanel/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Url/Languages/sk.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index a2ff5926d..8b9487b21 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -1,10 +1,10 @@ - Nepodarilo sa registrovať klávesovú skratku {0} Nepodarilo sa spustiť {0} - Neplatný formát súboru pre plugin Flow Launcher + Neplatný formát súboru pre plugin Flow Launchera Pri tomto dopyte umiestniť navrchu Zrušiť umiestnenie navrchu pri tomto dopyte Spustiť dopyt: {0} @@ -15,7 +15,7 @@ Ukončiť - Nastavenia Flow Launcher + Nastavenia Flow Launchera Všeobecné Spustiť Flow Launcher po štarte systému Schovať Flow Launcher po strate fokusu @@ -24,52 +24,62 @@ Jazyk Posledný dopyt Ponechať - Označiť posledný dopyt - Prázdne + Označiť + Vymazať Max. výsledkov - Ignorovať klávesové skraty v režime na celú obrazovku + Ignorovať klávesové skratky v režime na celú obrazovku Priečinok s Pythonom Automatická aktualizácia Vybrať Schovať Flow Launcher po spustení - Schovať ikonu v oblasti oznámení + Schovať ikonu z oblasti oznámení + Presnosť vyhľadávania + Dá sa použiť Pinyin Plugin Nájsť ďalšie pluginy Zakázať Skratka akcie - Priečinok s pluginmy + Aktuálna akcia skratky: + Nová akcia skratky: + Priečinok s pluginmi Autor - Čas inic.: - Čas dopytu: + Príprava: {0}ms + Čas dopytu: {0}ms Motív Prehliadať viac motívov - Písmo poľa pre dopyt + Ahojte + Písmo vyhľadávacieho poľa Písmo výsledkov Režim okno Nepriehľadnosť + Motív {0} neexistuje, návrat na predvolený motív + Nepodarilo sa nečítať motív {0}, návrat na predvolený motív - Klávesová skratka + Klávesové skratky Klávesová skratka pre Flow Launcher - Otvorte modifikátory výsledkov - Vlastná klávesová skratka pre dopyt + Modifikáčné klávesy na otvorenie výsledkov Zobraziť klávesovú skratku + Vlastná klávesová skratka na vyhľadávanie Odstrániť Upraviť Pridať Vyberte položku, prosím Ste si istý, že chcete odstrániť klávesovú skratku {0} pre plugin? + Tieňový efekt v poli vyhľadávania + Tieňový efekt významne využíva GPU. + Neodporúča sa, ak je výkon počítača obmedzený. HTTP Proxy Povoliť HTTP Proxy HTTP Server Port - Používateľské meno + Použív. meno Heslo Test Proxy Uložiť @@ -92,7 +102,7 @@ Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy k github-cloud.s3.amazonaws.com, alebo prejdite na https://github.com/Flow-Launcher/Flow.Launcher/releases pre manuálne stiahnutie aktualizácií. - Poznámky k vydaniu: + Poznámky k vydaniu Stará skratka akcie @@ -131,7 +141,7 @@ Flow Launcher zaznamenal chybu - Je dostupné nové vydanie Flow Launcher {0} + Je dostupná nová verzia Flow Launcher {0} Počas inštalácie aktualizácií došlo k chybe Aktualizovať Zrušiť diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml new file mode 100644 index 000000000..825fa7737 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml @@ -0,0 +1,15 @@ + + + + Prehliadač záložiek + Vyhľadáva záložky prehliadača + + + Otvoriť záložky v: + Nové okno + Nová karta + Nastaviť cestu k prehliadaču: + Prehliadať + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml new file mode 100644 index 000000000..dd52d5279 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml @@ -0,0 +1,16 @@ + + + Kalkulačka + Spracúva matematické operácie.(Skúste 5*3-2 vo flowlauncheri) + Nie je číslo (NaN) + Nesprávny alebo neúplný výraz (Nezabudli ste na zátvorky?) + Kopírovať toto číslo do schránky + Oddeľovač des. miest + Oddeľovač desatinných miest použitý vo výsledku. + Použiť podľa systému + Čiarka (,) + Bodka (.) + Max. desatinných miest + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Color/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Color/Languages/sk.xaml new file mode 100644 index 000000000..4b208691a --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Color/Languages/sk.xaml @@ -0,0 +1,8 @@ + + + Farby + Zobrazuje náhľad farieb v HEX formáte. (Skúste #000 vo Flow Launcheri) + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.ControlPanel/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.ControlPanel/Languages/sk.xaml new file mode 100644 index 000000000..3b9249b78 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.ControlPanel/Languages/sk.xaml @@ -0,0 +1,8 @@ + + + Ovládací panel + Vyhľadáva položky Ovládacieho panela + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/sk.xaml new file mode 100644 index 000000000..9cb04a907 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/sk.xaml @@ -0,0 +1,8 @@ + + + Plugin Indicator + Ponúka návrhy pre akcie pluginov + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml new file mode 100644 index 000000000..b51eceb6a --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml @@ -0,0 +1,8 @@ + + + Správca pluginov + Inštalácia, odinštalácia alebo aktualizácia pluginov Flow Launchera + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/sk.xaml new file mode 100644 index 000000000..e185dbe71 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/sk.xaml @@ -0,0 +1,12 @@ + + + Process Killer + Ukončuje spustené procesy z Flow Launchera + + ukončiť všetky inštancie "{0}" + ukončiť {0} procesov + ukončiť všetky inštancie + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml new file mode 100644 index 000000000..ece9fea81 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml @@ -0,0 +1,48 @@ + + + + Odstrániť + Upraviť + Pridať + Zakázať + Umiestnenie + Všetky programy + Prípony súborov + Reindexovať + Indexovanie + Indexovať Ponuku Štart + Indexovať Registry + Prípony + Max. hĺbka + + Priečinok: + Prehliadať + Prípony súboru: + Max. hĺbka hľadania (-1 je neobm.): + + Prosím, zadajte zdroj programu + Naozaj chcete odstrániť vybrané zdroje programov? + + Aktualizovať + Flow Launcher bude indexovať iba súbory s nasledujúcimi príponami: + (Každú príponu oddeľte ;) + Prípony boli úspešne aktualizované + Súbor s príponami nemôže byť prázdny + + Spustiť ako iný používateľ + Spustiť ako správca + Otvoriť umiestnenie súboru + Zakázať zobrazovanie tohto programu + + Program + Vyhľadávanie programov vo Flow Launcheri + + Neplatná cesta + + + Úspešné + Úspešne zakázané zobrazovanie tohto programu vo výsledkoch vyhľadávania + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml new file mode 100644 index 000000000..71ffaa1b5 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml @@ -0,0 +1,14 @@ + + + Nahradiť Win+R + Nezatvárať príkazový riadok po dokončení príkazu + Spustiť vždy ako správca + Spustiť ako iný používateľ + Shell + Umožňuje spúšťať systémové príkazy z Flow Launcheru. Príkazy začínajú znakom > + tento príkaz bol vykonaný {0} krát + vykonať príkaz cez command shell + Spustiť ako správca + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml new file mode 100644 index 000000000..f0eadeb89 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml @@ -0,0 +1,32 @@ + + + + Príkaz + Popis + + Vypnúť počítač + Reštartovať počítač + Odhlásiť + Zamknúť počítač + Zavrieť Flow Launcher + Reštartovať Flow Launcher + Nastaviť Flow Launcher + Uspať počítač + Vysypať kôš + Hibernovať počítač + Uložiť všetky nastavenia Flow Launchera + Aktualizovať všetky dáta pluginov od spustenia Flow Launchera. Pluginy musia túto funkciu podporovať. + + + Úspešné + Všetky nastavenia Flow Launchera uložené + Všetky dáta pluginov aktualizované + Naozaj chcete počítač vypnúť? + Naozaj chcete počítač reštartovať? + + Systémové príkazy + Poskytuje príkazy súvisiace so systémom ako je vypnutie, uzamknutie počítača atď. + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/sk.xaml new file mode 100644 index 000000000..69640735e --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/sk.xaml @@ -0,0 +1,14 @@ + + + Otvoriť url:{0} + Adresa URL sa nedá otvoriť: {0} + + URL + Otvoriť zadanú adresu URL z Flow Launchera + + Zadajte cestu k prehliadaču: + Vybrať + Aplikácie (*.exe)|*.exe|Všetky súbory|*.* + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml new file mode 100644 index 000000000..d29b3f35a --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml @@ -0,0 +1,33 @@ + + + Odstrániť + Upraviť + Pridať + Potvrdiť + Skratka akcie + URL + Hľadať + Povoliť návrhy vyhľadávania + Vyberte webové vyhľadávanie + Naozaj chcete odstrániť {0}? + + + Názov + Povoliť + Vybrať ikonu + Ikona + Zrušiť + Neplatné webové vyhľadávanie + Zadajte názov + Zadajte skratku akcie + Zadajte URL + Zadaná skratka akcie už existuje, zadajte inú + Úspešné + Poznámka: Do tohto priečinka nemusíte vkladať obrázky, ak sa Flow Launcher aktualizuje, zmiznú. Flow Launcher bude automaticky kopírovať obrázky mimo tohto priečinka naprieč vlastnému umiestneniu obrázkov pluginu. + + Webové vyhľadávanie + Umožňuje vyhľadávanie webov + + \ No newline at end of file From 83ccfac04fa6ed6c16f4c6579dd32439488bd0b7 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 16 Nov 2020 06:29:24 +1100 Subject: [PATCH 075/146] move Themes string to Constant --- Flow.Launcher.Core/Resource/Theme.cs | 2 +- Flow.Launcher.Infrastructure/Constant.cs | 2 ++ Flow.Launcher/SettingWindow.xaml.cs | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 2075137d0..a5f12bbb9 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -21,7 +21,7 @@ namespace Flow.Launcher.Core.Resource private ResourceDictionary _oldResource; private string _oldTheme; public Settings Settings { get; set; } - private const string Folder = "Themes"; + private const string Folder = Constant.Themes; private const string Extension = ".xaml"; private string DirectoryPath => Path.Combine(Constant.ProgramDirectory, Folder); private string UserDirectoryPath => Path.Combine(DataLocation.DataDirectory(), Folder); diff --git a/Flow.Launcher.Infrastructure/Constant.cs b/Flow.Launcher.Infrastructure/Constant.cs index c6a3b48f3..df1464048 100644 --- a/Flow.Launcher.Infrastructure/Constant.cs +++ b/Flow.Launcher.Infrastructure/Constant.cs @@ -33,5 +33,7 @@ namespace Flow.Launcher.Infrastructure public static readonly string QueryTextBoxIconImagePath = $"{ProgramDirectory}\\Images\\mainsearch.png"; public const string DefaultTheme = "Darker"; + + public const string Themes = "Themes"; } } diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index b21bb2904..c38ed4d22 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -8,6 +8,7 @@ using NHotkey; using NHotkey.Wpf; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Core.Resource; +using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Hotkey; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; @@ -278,7 +279,7 @@ namespace Flow.Launcher private void OpenPluginFolder(object sender, RoutedEventArgs e) { - FilesFolders.OpenPath(Path.Combine(DataLocation.DataDirectory(), "Themes")); + FilesFolders.OpenPath(Path.Combine(DataLocation.DataDirectory(), Constant.Themes)); } } } From 7fca0e72792d02e85831b823ad6db0a77f838a99 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 16 Nov 2020 06:42:34 +1100 Subject: [PATCH 076/146] version bump --- SolutionAssemblyInfo.cs | 6 +++--- appveyor.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SolutionAssemblyInfo.cs b/SolutionAssemblyInfo.cs index fc81e57e7..018084a66 100644 --- a/SolutionAssemblyInfo.cs +++ b/SolutionAssemblyInfo.cs @@ -16,6 +16,6 @@ using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("1.4.0")] -[assembly: AssemblyFileVersion("1.4.0")] -[assembly: AssemblyInformationalVersion("1.4.0")] \ No newline at end of file +[assembly: AssemblyVersion("1.5.0")] +[assembly: AssemblyFileVersion("1.5.0")] +[assembly: AssemblyInformationalVersion("1.5.0")] \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 1c10892c0..f5841da3e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.4.0.{build}' +version: '1.5.0.{build}' init: - ps: | From 1bd0fcedb97ce286201f03dac670b1192941d70f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 16 Nov 2020 06:49:08 +1100 Subject: [PATCH 077/146] version bump plugins --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Calculator/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Color/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.ControlPanel/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Shell/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Sys/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Url/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index 98db163ec..de4f3849b 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json @@ -4,7 +4,7 @@ "Name": "Browser Bookmarks", "Description": "Search your browser bookmarks", "Author": "qianlifeng, Ioannis G.", - "Version": "1.2.1", + "Version": "1.3.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json index 16a46f4e5..5ec1ac002 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json @@ -4,7 +4,7 @@ "Name": "Calculator", "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", "Author": "cxfksword", - "Version": "1.0.2", + "Version": "1.1.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Color/plugin.json b/Plugins/Flow.Launcher.Plugin.Color/plugin.json index dbba029c6..8c0c483ba 100644 --- a/Plugins/Flow.Launcher.Plugin.Color/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Color/plugin.json @@ -4,7 +4,7 @@ "Name": "Colors", "Description": "Provide hex color preview.(Try #000 in Flow Launcher)", "Author": "qianlifeng", - "Version": "1.0.1", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Color.dll", diff --git a/Plugins/Flow.Launcher.Plugin.ControlPanel/plugin.json b/Plugins/Flow.Launcher.Plugin.ControlPanel/plugin.json index d7940125e..4f552a014 100644 --- a/Plugins/Flow.Launcher.Plugin.ControlPanel/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.ControlPanel/plugin.json @@ -4,7 +4,7 @@ "Name": "Control Panel", "Description": "Search within the Control Panel.", "Author": "CoenraadS", - "Version": "1.0.1", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.ControlPanel.dll", diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json index 7b2f66989..80900a445 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json @@ -4,7 +4,7 @@ "Name": "Plugin Indicator", "Description": "Provide plugin actionword suggestion", "Author": "qianlifeng", - "Version": "1.0.1", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginIndicator.dll", diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json index 3d73c2197..7b8262f79 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json @@ -4,7 +4,7 @@ "Name": "Plugin Management", "Description": "Install/Remove/Update Flow Launcher plugins", "Author": "qianlifeng", - "Version": "1.0.1", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginManagement.dll", diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json b/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json index 3e7ba4043..d769397a8 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json @@ -4,7 +4,7 @@ "Name":"Process Killer", "Description":"kill running processes from Flow", "Author":"Flow-Launcher", - "Version":"1.1.1", + "Version":"1.2.1", "Language":"csharp", "Website":"https://github.com/Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller", "IcoPath":"Images\\app.png", diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 3eb4a40e1..90a90e3ef 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "1.1.0", + "Version": "1.2.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json index 19c617799..63e74d678 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json @@ -4,7 +4,7 @@ "Name": "Shell", "Description": "Provide executing commands from Flow Launcher. Commands should start with >", "Author": "qianlifeng", - "Version": "1.0.1", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Shell.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index 269cba07e..8d4b9a238 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock,setting etc.", "Author": "qianlifeng", - "Version": "1.0.1", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Url/plugin.json b/Plugins/Flow.Launcher.Plugin.Url/plugin.json index d2817fd35..be64f6708 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Url/plugin.json @@ -4,7 +4,7 @@ "Name": "URL", "Description": "Open the typed URL from Flow Launcher", "Author": "qianlifeng", - "Version": "1.0.1", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Url.dll", diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json index 7b40caea5..329f1c41d 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json @@ -25,7 +25,7 @@ "Name": "Web Searches", "Description": "Provide the web search ability", "Author": "qianlifeng", - "Version": "1.0.2", + "Version": "1.1.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll", From 27313cdddc7aafcfaeb70ee1f284e41f5df6083e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Tue, 17 Nov 2020 20:41:11 +0800 Subject: [PATCH 078/146] Fix unauthorize exception lead to the whole directory unable to index. --- Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 092418b6c..77278330a 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -131,7 +131,7 @@ namespace Flow.Launcher.Plugin.Program.Programs ? $"/select,\"{FullPath}\"" : Settings.ExplorerArgs; - Main.StartProcess(Process.Start, + Main.StartProcess(Process.Start, new ProcessStartInfo( !string.IsNullOrWhiteSpace(Main._settings.CustomizedExplorer) ? Main._settings.CustomizedExplorer @@ -267,10 +267,14 @@ namespace Flow.Launcher.Plugin.Program.Programs return new string[] { }; try { - var paths = Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories) + var paths = Directory.EnumerateFiles(directory, "*", new EnumerationOptions + { + IgnoreInaccessible = true, + RecurseSubdirectories = true + }) .Where(x => suffixes.Contains(Extension(x))); - return paths; + return paths; } catch (DirectoryNotFoundException e) { From 5cf0f65b022157388433ca54bd9e3800050050b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Tue, 17 Nov 2020 20:44:56 +0800 Subject: [PATCH 079/146] try to fix the index out of bound for programlogger --- .../Logger/ProgramLogger.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Logger/ProgramLogger.cs b/Plugins/Flow.Launcher.Plugin.Program/Logger/ProgramLogger.cs index 3c8ad783f..06264c06c 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Logger/ProgramLogger.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Logger/ProgramLogger.cs @@ -98,17 +98,17 @@ namespace Flow.Launcher.Plugin.Program.Logger internal static void LogException(string message, Exception e) { //Index 0 is always empty. - var parts = message.Split('|'); + var parts = message.Split('|', StringSplitOptions.RemoveEmptyEntries); if (parts.Length < 4) { var logger = LogManager.GetLogger(""); logger.Error(e, $"fail to log exception in program logger, parts length is too small: {parts.Length}, message: {message}"); } - var classname = parts[1]; - var callingMethodName = parts[2]; - var loadingProgramPath = parts[3]; - var interpretationMessage = parts[4]; + var classname = parts[0]; + var callingMethodName = parts[1]; + var loadingProgramPath = parts[2]; + var interpretationMessage = parts[3]; LogException(classname, callingMethodName, loadingProgramPath, interpretationMessage, e); } From 898bb0679961546afcdff11f36e6e6b3318341d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Tue, 17 Nov 2020 20:46:06 +0800 Subject: [PATCH 080/146] bump version --- Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 3eb4a40e1..f3c378ba4 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "1.1.0", + "Version": "1.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", From df3a9a4c973c5cbad7dab6947ee79ffe43496353 Mon Sep 17 00:00:00 2001 From: taooceros <45326534+taooceros@users.noreply.github.com> Date: Fri, 20 Nov 2020 22:26:29 +0800 Subject: [PATCH 081/146] Use default system browser (#214) --- .../SharedCommands/SearchWeb.cs | 30 ++++++++++++++++++- Flow.Launcher/ReportWindow.xaml.cs | 4 +-- Flow.Launcher/SettingWindow.xaml.cs | 4 +-- Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index b23da730e..95d057707 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -1,3 +1,4 @@ +using Microsoft.Win32; using System; using System.Diagnostics; using System.IO; @@ -7,12 +8,37 @@ namespace Flow.Launcher.Plugin.SharedCommands { public static class SearchWeb { + private static string GetDefaultBrowserPath() + { + string name = string.Empty; + try + { + using var regDefault = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice", false); + var stringDefault = regDefault.GetValue("ProgId"); + + using var regKey = Registry.ClassesRoot.OpenSubKey(stringDefault + "\\shell\\open\\command", false); + name = regKey.GetValue(null).ToString().ToLower().Replace("\"", ""); + + if (!name.EndsWith("exe")) + name = name.Substring(0, name.LastIndexOf(".exe") + 4); + + } + catch + { + return string.Empty; + } + + return name; + } + /// /// Opens search in a new browser. If no browser path is passed in then Chrome is used. /// Leave browser path blank to use Chrome. /// public static void NewBrowserWindow(this string url, string browserPath = "") { + browserPath = string.IsNullOrEmpty(browserPath) ? GetDefaultBrowserPath() : browserPath; + var browserExecutableName = browserPath? .Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.None) .Last(); @@ -44,7 +70,9 @@ namespace Flow.Launcher.Plugin.SharedCommands /// public static void NewTabInBrowser(this string url, string browserPath = "") { - var psi = new ProcessStartInfo() { UseShellExecute = true}; + browserPath = string.IsNullOrEmpty(browserPath) ? GetDefaultBrowserPath() : browserPath; + + var psi = new ProcessStartInfo() { UseShellExecute = true }; try { if (!string.IsNullOrEmpty(browserPath)) diff --git a/Flow.Launcher/ReportWindow.xaml.cs b/Flow.Launcher/ReportWindow.xaml.cs index b4e0414ab..7318fe4cd 100644 --- a/Flow.Launcher/ReportWindow.xaml.cs +++ b/Flow.Launcher/ReportWindow.xaml.cs @@ -52,8 +52,8 @@ namespace Flow.Launcher var link = new Hyperlink { IsEnabled = true }; link.Inlines.Add(url); link.NavigateUri = new Uri(url); - link.RequestNavigate += (s, e) => SearchWeb.NewBrowserWindow(e.Uri.ToString()); - link.Click += (s, e) => SearchWeb.NewBrowserWindow(url); + link.RequestNavigate += (s, e) => SearchWeb.NewTabInBrowser(e.Uri.ToString()); + link.Click += (s, e) => SearchWeb.NewTabInBrowser(url); paragraph.Inlines.Add(textBeforeUrl); paragraph.Inlines.Add(link); diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index c38ed4d22..e5583da33 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -229,7 +229,7 @@ namespace Flow.Launcher var uri = new Uri(website); if (Uri.CheckSchemeName(uri.Scheme)) { - SearchWeb.NewBrowserWindow(website); + SearchWeb.NewTabInBrowser(website); } } } @@ -263,7 +263,7 @@ namespace Flow.Launcher private void OnRequestNavigate(object sender, RequestNavigateEventArgs e) { - SearchWeb.NewBrowserWindow(e.Uri.AbsoluteUri); + SearchWeb.NewTabInBrowser(e.Uri.AbsoluteUri); e.Handled = true; } diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index f18b74022..7a3aa9f2f 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -136,7 +136,7 @@ namespace Flow.Launcher.ViewModel StartHelpCommand = new RelayCommand(_ => { - SearchWeb.NewBrowserWindow("https://github.com/Flow-Launcher/Flow.Launcher/wiki/Flow-Launcher/"); + SearchWeb.NewTabInBrowser("https://github.com/Flow-Launcher/Flow.Launcher/wiki/Flow-Launcher/"); }); OpenResultCommand = new RelayCommand(index => From 11952a4c7d79a496e592c387a07308f9633acac9 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sat, 21 Nov 2020 11:49:39 +1100 Subject: [PATCH 082/146] version bump Flow.Launcher.Plugin --- Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index c5ab7dd3b..0f6450d18 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -14,10 +14,10 @@ - 1.2.2 - 1.2.2 - 1.2.2 - 1.2.2 + 1.3.0 + 1.3.0 + 1.3.0 + 1.3.0 Flow.Launcher.Plugin Flow-Launcher MIT From 81ec3ef3d5e623f24d38ce9b5ae10d89c29c4306 Mon Sep 17 00:00:00 2001 From: kubalav Date: Sun, 22 Nov 2020 10:41:13 +0100 Subject: [PATCH 083/146] - Flow Launcher Slovak translation polish - Calculator plugin string shortened - Program plugin add missing strings --- Flow.Launcher/Languages/sk.xaml | 12 ++++++------ .../Languages/sk.xaml | 2 +- .../Flow.Launcher.Plugin.Program/Languages/sk.xaml | 7 ++++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 8b9487b21..bf001d507 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -5,8 +5,8 @@ Nepodarilo sa registrovať klávesovú skratku {0} Nepodarilo sa spustiť {0} Neplatný formát súboru pre plugin Flow Launchera - Pri tomto dopyte umiestniť navrchu - Zrušiť umiestnenie navrchu pri tomto dopyte + Pri tomto zadaní umiestniť navrchu + Zrušiť umiestnenie navrchu pri tomto zadaní Spustiť dopyt: {0} Posledný čas realizácie: {0} Otvoriť @@ -22,7 +22,7 @@ Nezobrazovať upozornenia na novú verziu Zapamätať si posledné umiestnenie Jazyk - Posledný dopyt + Posledné vyhľadávanie Ponechať Označiť Vymazať @@ -34,7 +34,7 @@ Schovať Flow Launcher po spustení Schovať ikonu z oblasti oznámení Presnosť vyhľadávania - Dá sa použiť Pinyin + Použiť Pinyin Plugin @@ -96,11 +96,11 @@ Verzia Flow Launcher bol aktivovaný {0}-krát Skontrolovať aktualizácie - Je dostupná nová verzia {0}, prosím, reštartujte Flow Launcher. + Je dostupná nová verzia {0}, chcete reštartovať Flow Launcher, aby sa mohol aktualizovať? Kontrola aktualizácií zlyhala, prosím, skontrolujte pripojenie na internet a nastavenie proxy k api.github.com. Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy k github-cloud.s3.amazonaws.com, - alebo prejdite na https://github.com/Flow-Launcher/Flow.Launcher/releases pre manuálne stiahnutie aktualizácií. + alebo prejdite na https://github.com/Flow-Launcher/Flow.Launcher/releases pre manuálne stiahnutie aktualizácie. Poznámky k vydaniu diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml index dd52d5279..c08f0265c 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml @@ -12,5 +12,5 @@ Použiť podľa systému Čiarka (,) Bodka (.) - Max. desatinných miest + Desatinné miesta \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml index ece9fea81..851233407 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/sk.xaml @@ -40,7 +40,12 @@ Vyhľadávanie programov vo Flow Launcheri Neplatná cesta - + + Vlastný správca súborov + Arg. + Môžete si prispôsobiť otváranie umiestnenia priečinka vložením Premenných prostredia, ktoré chcete použiť. Dostupnosť premenných prostredia môžete vyskúšať cez príkazový riadok. + Zadajte argumenty, ktoré chcete pridať pre správcu súborov. %s pre rodičovský priečinok, %f pre celú cestu (funguje iba pre win32). Pre podrobnosti pozrite webovú stránku správcu súborov. + Úspešné Úspešne zakázané zobrazovanie tohto programu vo výsledkoch vyhľadávania From 341275fbbdda51d7c9bb1f1e80134895d499f2ed Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 23 Nov 2020 13:30:45 +1100 Subject: [PATCH 084/146] version bump for Calculator & Program plugins --- Plugins/Flow.Launcher.Plugin.Calculator/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json index 5ec1ac002..709757d1a 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json @@ -4,7 +4,7 @@ "Name": "Calculator", "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", "Author": "cxfksword", - "Version": "1.1.2", + "Version": "1.1.3", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 9b5af94fb..7d7a42e03 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "1.2.1", + "Version": "1.2.2", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", From 2c14c2120f83eb4761efc91dd5190daac0f60e51 Mon Sep 17 00:00:00 2001 From: Qian Bao Date: Fri, 23 Oct 2020 10:45:22 +0800 Subject: [PATCH 085/146] Lazy Load Image --- Flow.Launcher/ResultListBox.xaml | 2 +- Flow.Launcher/ViewModel/ResultViewModel.cs | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/ResultListBox.xaml b/Flow.Launcher/ResultListBox.xaml index 3280dc457..072196605 100644 --- a/Flow.Launcher/ResultListBox.xaml +++ b/Flow.Launcher/ResultListBox.xaml @@ -42,7 +42,7 @@ + Source="{Binding Image.Value}" /> diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index a4fe2ede4..a64836285 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -18,6 +18,7 @@ namespace Flow.Launcher.ViewModel if (result != null) { Result = result; + Image = new Lazy(() => SetImage); } Settings = settings; @@ -36,8 +37,10 @@ namespace Flow.Launcher.ViewModel public string ShowSubTitleToolTip => string.IsNullOrEmpty(Result.SubTitleToolTip) ? Result.SubTitle : Result.SubTitleToolTip; + + public Lazy Image { get; set; } - public ImageSource Image + private ImageSource SetImage { get { @@ -75,6 +78,7 @@ namespace Flow.Launcher.ViewModel } } + public override int GetHashCode() { return Result.GetHashCode(); From 1439ee7e9ed6adbcc5f17221dca1eb406c00ae58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 15 Nov 2020 20:45:00 +0800 Subject: [PATCH 086/146] Use a default image to list when the image hasn't been loaded in cache. Co-authored-by: Bao-Qian --- .../Image/ImageCache.cs | 13 +++++---- .../Image/ImageLoader.cs | 11 +++++++- Flow.Launcher/ViewModel/ResultViewModel.cs | 28 +++++++++++++------ 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 80c6684f5..7482ac1cf 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -26,7 +26,7 @@ namespace Flow.Launcher.Infrastructure.Image private const int MaxCached = 50; public ConcurrentDictionary Data { get; private set; } = new ConcurrentDictionary(); private const int permissibleFactor = 2; - + public void Initialization(Dictionary usage) { foreach (var key in usage.Keys) @@ -44,14 +44,14 @@ namespace Flow.Launcher.Infrastructure.Image value.usage++; return value.imageSource; } - + return null; } set { Data.AddOrUpdate( - path, - new ImageUsage(0, value), + path, + new ImageUsage(0, value), (k, v) => { v.imageSource = value; @@ -67,7 +67,8 @@ namespace Flow.Launcher.Infrastructure.Image // To delete the images from the data dictionary based on the resizing of the Usage Dictionary. - foreach (var key in Data.OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached).Select(x => x.Key)) + foreach (var key in Data.Where(x => x.Key != Constant.MissingImgIcon) + .OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached).Select(x => x.Key)) { if (!(key.Equals(Constant.ErrorIcon) || key.Equals(Constant.DefaultIcon))) { @@ -80,7 +81,7 @@ namespace Flow.Launcher.Infrastructure.Image public bool ContainsKey(string key) { - var contains = Data.ContainsKey(key); + var contains = Data.ContainsKey(key) && Data[key] != null; return contains; } diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index edfb88cbf..bc924926c 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -61,7 +61,7 @@ namespace Flow.Launcher.Infrastructure.Image { lock (_storage) { - _storage.Save(ImageCache.Data.Select(x => (x.Key, x.Value.usage)).ToDictionary(x => x.Key, y => y.usage)); + _storage.Save(ImageCache.Data.Select(x => (x.Key, x.Value.usage)).ToDictionary(x => x.Key, x => x.usage)); } } @@ -211,6 +211,15 @@ namespace Flow.Launcher.Infrastructure.Image option); } + public static bool CacheContainImage(string path) + { + return ImageCache.ContainsKey(path); + } + public static ImageSource LoadDefault(bool loadFullImage = false) + { + return LoadInternal(Constant.MissingImgIcon, loadFullImage).ImageSource; + } + public static ImageSource Load(string path, bool loadFullImage = false) { var imageResult = LoadInternal(path, loadFullImage); diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index a64836285..76c2a3e48 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Threading; @@ -26,18 +27,18 @@ namespace Flow.Launcher.ViewModel public Settings Settings { get; private set; } - public Visibility ShowOpenResultHotkey => Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Hidden; + public Visibility ShowOpenResultHotkey => Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Hidden; public string OpenResultModifiers => Settings.OpenResultModifiers; public string ShowTitleToolTip => string.IsNullOrEmpty(Result.TitleToolTip) - ? Result.Title + ? Result.Title : Result.TitleToolTip; public string ShowSubTitleToolTip => string.IsNullOrEmpty(Result.SubTitleToolTip) - ? Result.SubTitle + ? Result.SubTitle : Result.SubTitleToolTip; - + public Lazy Image { get; set; } private ImageSource SetImage @@ -57,9 +58,20 @@ namespace Flow.Launcher.ViewModel imagePath = Constant.MissingImgIcon; } } - - // will get here either when icoPath has value\icon delegate is null\when had exception in delegate - return ImageLoader.Load(imagePath); + + if (ImageLoader.CacheContainImage(imagePath)) + // will get here either when icoPath has value\icon delegate is null\when had exception in delegate + return ImageLoader.Load(imagePath); + else + { + Task.Run(() => + { + Image = new Lazy(() => ImageLoader.Load(imagePath)); + OnPropertyChanged(nameof(Image)); + }); + + return ImageLoader.LoadDefault(); + } } } @@ -78,7 +90,7 @@ namespace Flow.Launcher.ViewModel } } - + public override int GetHashCode() { return Result.GetHashCode(); From 99086e26444498bc5ebe0a7ca5654eeedb99dc9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 16 Nov 2020 10:12:32 +0800 Subject: [PATCH 087/146] change SetImage to method instead of property to avoid unintended use --- Flow.Launcher/ViewModel/ResultViewModel.cs | 49 ++++++++++------------ 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 76c2a3e48..8ce35227f 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -19,7 +19,7 @@ namespace Flow.Launcher.ViewModel if (result != null) { Result = result; - Image = new Lazy(() => SetImage); + Image = new Lazy(SetImage); } Settings = settings; @@ -41,38 +41,35 @@ namespace Flow.Launcher.ViewModel public Lazy Image { get; set; } - private ImageSource SetImage + private ImageSource SetImage() { - get + var imagePath = Result.IcoPath; + if (string.IsNullOrEmpty(imagePath) && Result.Icon != null) { - var imagePath = Result.IcoPath; - if (string.IsNullOrEmpty(imagePath) && Result.Icon != null) + try { - try - { - return Result.Icon(); - } - catch (Exception e) - { - Log.Exception($"|ResultViewModel.Image|IcoPath is empty and exception when calling Icon() for result <{Result.Title}> of plugin <{Result.PluginDirectory}>", e); - imagePath = Constant.MissingImgIcon; - } + return Result.Icon(); } - - if (ImageLoader.CacheContainImage(imagePath)) - // will get here either when icoPath has value\icon delegate is null\when had exception in delegate - return ImageLoader.Load(imagePath); - else + catch (Exception e) { - Task.Run(() => - { - Image = new Lazy(() => ImageLoader.Load(imagePath)); - OnPropertyChanged(nameof(Image)); - }); - - return ImageLoader.LoadDefault(); + Log.Exception($"|ResultViewModel.Image|IcoPath is empty and exception when calling Icon() for result <{Result.Title}> of plugin <{Result.PluginDirectory}>", e); + imagePath = Constant.MissingImgIcon; } } + + if (ImageLoader.CacheContainImage(imagePath)) + // will get here either when icoPath has value\icon delegate is null\when had exception in delegate + return ImageLoader.Load(imagePath); + else + { + Task.Run(() => + { + Image = new Lazy(() => ImageLoader.Load(imagePath)); + OnPropertyChanged(nameof(Image)); + }); + + return ImageLoader.LoadDefault(); + } } public Result Result { get; } From a7310d5d22663af9119bc0d96b7fd0fa849afbf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 16 Nov 2020 12:46:39 +0800 Subject: [PATCH 088/146] Use Customized LazyAsync class to load image instead of the weird way of updating lazy class async --- .../Image/ImageLoader.cs | 12 ++-- Flow.Launcher/ViewModel/ResultViewModel.cs | 56 +++++++++++++++---- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index bc924926c..f61d4615a 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -18,6 +18,8 @@ namespace Flow.Launcher.Infrastructure.Image private static readonly ConcurrentDictionary GuidToKey = new ConcurrentDictionary(); private static IImageHashGenerator _hashGenerator; private static bool EnableImageHash = true; + public static ImageSource defaultImage { get; } = new BitmapImage(new Uri(Constant.MissingImgIcon)); + private static readonly string[] ImageExtensions = { @@ -37,6 +39,7 @@ namespace Flow.Launcher.Infrastructure.Image var usage = LoadStorageToConcurrentDictionary(); + foreach (var icon in new[] { Constant.DefaultIcon, Constant.MissingImgIcon }) { ImageSource img = new BitmapImage(new Uri(icon)); @@ -213,13 +216,10 @@ namespace Flow.Launcher.Infrastructure.Image public static bool CacheContainImage(string path) { - return ImageCache.ContainsKey(path); - } - public static ImageSource LoadDefault(bool loadFullImage = false) - { - return LoadInternal(Constant.MissingImgIcon, loadFullImage).ImageSource; + return ImageCache.ContainsKey(path) && ImageCache[path] != null; } + public static ImageSource Load(string path, bool loadFullImage = false) { var imageResult = LoadInternal(path, loadFullImage); @@ -230,7 +230,7 @@ namespace Flow.Launcher.Infrastructure.Image string hash = EnableImageHash ? _hashGenerator.GetHashFromImage(img) : null; if (hash != null) { - + if (GuidToKey.TryGetValue(hash, out string key)) { // image already exists img = ImageCache[key] ?? img; diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 8ce35227f..511df5e59 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -8,18 +8,57 @@ using Flow.Launcher.Infrastructure.Image; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; - +using Microsoft.FSharp.Core; namespace Flow.Launcher.ViewModel { public class ResultViewModel : BaseModel { + public class LazyAsync : Lazy> + { + private T defaultValue; + + + private readonly Action _updateCallback; + public T Value + { + get + { + if (!IsValueCreated) + { + base.Value.ContinueWith(_ => + { + _updateCallback(); + }); + return defaultValue; + } + else if (!base.Value.IsCompleted) + { + return defaultValue; + } + else return base.Value.Result; + } + } + public LazyAsync(Func> factory, T defaultValue, Action updateCallback) : base(factory) + { + if (defaultValue != null) + { + this.defaultValue = defaultValue; + } + _updateCallback = updateCallback; + + } + } + public ResultViewModel(Result result, Settings settings) { if (result != null) { Result = result; - Image = new Lazy(SetImage); + Image = new LazyAsync(SetImage, ImageLoader.defaultImage, () => + { + OnPropertyChanged(nameof(Image)); + }); } Settings = settings; @@ -39,9 +78,9 @@ namespace Flow.Launcher.ViewModel ? Result.SubTitle : Result.SubTitleToolTip; - public Lazy Image { get; set; } + public LazyAsync Image { get; set; } - private ImageSource SetImage() + private async Task SetImage() { var imagePath = Result.IcoPath; if (string.IsNullOrEmpty(imagePath) && Result.Icon != null) @@ -62,14 +101,9 @@ namespace Flow.Launcher.ViewModel return ImageLoader.Load(imagePath); else { - Task.Run(() => - { - Image = new Lazy(() => ImageLoader.Load(imagePath)); - OnPropertyChanged(nameof(Image)); - }); - - return ImageLoader.LoadDefault(); + return await Task.Run(() => ImageLoader.Load(imagePath)); } + } public Result Result { get; } From b3df2fd590bf81883a03f17a955a0d13541ed284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Mon, 16 Nov 2020 12:58:53 +0800 Subject: [PATCH 089/146] change default image property name --- Flow.Launcher.Infrastructure/Image/ImageLoader.cs | 2 +- Flow.Launcher/ViewModel/ResultViewModel.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index f61d4615a..fb2f426a0 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -18,7 +18,7 @@ namespace Flow.Launcher.Infrastructure.Image private static readonly ConcurrentDictionary GuidToKey = new ConcurrentDictionary(); private static IImageHashGenerator _hashGenerator; private static bool EnableImageHash = true; - public static ImageSource defaultImage { get; } = new BitmapImage(new Uri(Constant.MissingImgIcon)); + public static ImageSource DefaultImage { get; } = new BitmapImage(new Uri(Constant.MissingImgIcon)); private static readonly string[] ImageExtensions = diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 511df5e59..f4a51070f 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -55,7 +55,7 @@ namespace Flow.Launcher.ViewModel if (result != null) { Result = result; - Image = new LazyAsync(SetImage, ImageLoader.defaultImage, () => + Image = new LazyAsync(SetImage, ImageLoader.DefaultImage, () => { OnPropertyChanged(nameof(Image)); }); From dd8a31ccd87bb71d5fc3d3ab74a170e96d2aa0da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Wed, 25 Nov 2020 23:26:35 +0800 Subject: [PATCH 090/146] Add new to Value Property of the LazyAsync clas --- Flow.Launcher/ViewModel/ResultViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index f4a51070f..0909b342f 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -20,7 +20,7 @@ namespace Flow.Launcher.ViewModel private readonly Action _updateCallback; - public T Value + public new T Value { get { From efcb6a7833e030f9463e6792fdc63579a8c787d5 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 26 Nov 2020 20:47:04 +1100 Subject: [PATCH 091/146] add status check when base.Value has faulted --- .../Image/ImageCache.cs | 6 +++--- .../Image/ImageLoader.cs | 2 -- Flow.Launcher/ViewModel/ResultViewModel.cs | 19 ++++++++----------- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 7482ac1cf..3c819236b 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -66,9 +66,10 @@ namespace Flow.Launcher.Infrastructure.Image { // To delete the images from the data dictionary based on the resizing of the Usage Dictionary. - foreach (var key in Data.Where(x => x.Key != Constant.MissingImgIcon) - .OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached).Select(x => x.Key)) + .OrderBy(x => x.Value.usage) + .Take(Data.Count - MaxCached) + .Select(x => x.Key)) { if (!(key.Equals(Constant.ErrorIcon) || key.Equals(Constant.DefaultIcon))) { @@ -98,5 +99,4 @@ namespace Flow.Launcher.Infrastructure.Image return Data.Values.Select(x => x.imageSource).Distinct().Count(); } } - } \ No newline at end of file diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index fb2f426a0..ac333d567 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -39,7 +39,6 @@ namespace Flow.Launcher.Infrastructure.Image var usage = LoadStorageToConcurrentDictionary(); - foreach (var icon in new[] { Constant.DefaultIcon, Constant.MissingImgIcon }) { ImageSource img = new BitmapImage(new Uri(icon)); @@ -219,7 +218,6 @@ namespace Flow.Launcher.Infrastructure.Image return ImageCache.ContainsKey(path) && ImageCache[path] != null; } - public static ImageSource Load(string path, bool loadFullImage = false) { var imageResult = LoadInternal(path, loadFullImage); diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 0909b342f..6e00d3421 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -2,13 +2,11 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Media; -using System.Windows.Threading; using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Image; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; -using Microsoft.FSharp.Core; namespace Flow.Launcher.ViewModel { @@ -18,7 +16,6 @@ namespace Flow.Launcher.ViewModel { private T defaultValue; - private readonly Action _updateCallback; public new T Value { @@ -30,13 +27,14 @@ namespace Flow.Launcher.ViewModel { _updateCallback(); }); + return defaultValue; } - else if (!base.Value.IsCompleted) - { + + if (!base.Value.IsCompleted || base.Value.IsFaulted) return defaultValue; - } - else return base.Value.Result; + + return base.Value.Result; } } public LazyAsync(Func> factory, T defaultValue, Action updateCallback) : base(factory) @@ -45,8 +43,8 @@ namespace Flow.Launcher.ViewModel { this.defaultValue = defaultValue; } + _updateCallback = updateCallback; - } } @@ -97,13 +95,14 @@ namespace Flow.Launcher.ViewModel } if (ImageLoader.CacheContainImage(imagePath)) + { // will get here either when icoPath has value\icon delegate is null\when had exception in delegate return ImageLoader.Load(imagePath); + } else { return await Task.Run(() => ImageLoader.Load(imagePath)); } - } public Result Result { get; } @@ -121,7 +120,6 @@ namespace Flow.Launcher.ViewModel } } - public override int GetHashCode() { return Result.GetHashCode(); @@ -131,6 +129,5 @@ namespace Flow.Launcher.ViewModel { return Result.ToString(); } - } } From ac945f48147c8901861bb1ed9f2c9d2d7966e044 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 27 Nov 2020 07:04:39 +1100 Subject: [PATCH 092/146] revert unneeded condition on Constant.MissingImgIcon --- Flow.Launcher.Infrastructure/Image/ImageCache.cs | 5 +---- Flow.Launcher/ViewModel/ResultViewModel.cs | 12 ++++++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 3c819236b..0cb5779d2 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -66,10 +66,7 @@ namespace Flow.Launcher.Infrastructure.Image { // To delete the images from the data dictionary based on the resizing of the Usage Dictionary. - foreach (var key in Data.Where(x => x.Key != Constant.MissingImgIcon) - .OrderBy(x => x.Value.usage) - .Take(Data.Count - MaxCached) - .Select(x => x.Key)) + foreach (var key in Data.OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached).Select(x => x.Key)) { if (!(key.Equals(Constant.ErrorIcon) || key.Equals(Constant.DefaultIcon))) { diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 6e00d3421..00a0e1ae5 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -53,10 +53,14 @@ namespace Flow.Launcher.ViewModel if (result != null) { Result = result; - Image = new LazyAsync(SetImage, ImageLoader.DefaultImage, () => - { - OnPropertyChanged(nameof(Image)); - }); + + Image = new LazyAsync( + SetImage, + ImageLoader.DefaultImage, + () => + { + OnPropertyChanged(nameof(Image)); + }); } Settings = settings; From f20c721ad1adba428602290efe45a4c351ed233b Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 27 Nov 2020 13:12:09 +1100 Subject: [PATCH 093/146] allow MissingImgIcon and DefaultIcon to be removed from image cache --- Flow.Launcher.Infrastructure/Image/ImageCache.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 0cb5779d2..b1c09024f 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -65,14 +65,8 @@ namespace Flow.Launcher.Infrastructure.Image if (Data.Count > permissibleFactor * MaxCached) { // To delete the images from the data dictionary based on the resizing of the Usage Dictionary. - foreach (var key in Data.OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached).Select(x => x.Key)) - { - if (!(key.Equals(Constant.ErrorIcon) || key.Equals(Constant.DefaultIcon))) - { - Data.TryRemove(key, out _); - } - } + Data.TryRemove(key, out _); } } } From c1ca76dd15800ad72f540cffc521a9790493288d Mon Sep 17 00:00:00 2001 From: YFdyh000 Date: Sun, 29 Nov 2020 16:11:58 +0800 Subject: [PATCH 094/146] fix tray menu translation --- Flow.Launcher/MainWindow.xaml.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 2c0beaaab..28ad80603 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -53,11 +53,12 @@ namespace Flow.Launcher private void OnInitialized(object sender, EventArgs e) { // show notify icon when flowlauncher is hided - InitializeNotifyIcon(); } private void OnLoaded(object sender, RoutedEventArgs _) { + InitializeNotifyIcon(); + // todo is there a way to set blur only once? ThemeManager.Instance.SetBlurForWindow(); WindowsInteropHelper.DisableControlBox(this); From 9bc89ea2784384ea9755ffde4acfd148a9ea36b7 Mon Sep 17 00:00:00 2001 From: Zero Date: Sun, 29 Nov 2020 17:01:51 +0800 Subject: [PATCH 095/146] :see_no_evil: ignore some files/folders --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 28366cd03..a293100e6 100644 --- a/.gitignore +++ b/.gitignore @@ -300,4 +300,8 @@ migrateToAutomaticPackageRestore.ps1 *.pyc *.diagsession Output-Performance.txt -*.diff \ No newline at end of file +*.diff + +# vscode +.vscode +.history \ No newline at end of file From 835b9214af0d17137fb7ac3613f2197834ec35ac Mon Sep 17 00:00:00 2001 From: Zero Date: Sun, 29 Nov 2020 17:09:27 +0800 Subject: [PATCH 096/146] :art: :recycle: format & rebuild json rpc python script - :art: format source via formatter - :recycle: more informations see https://github.com/Flow-Launcher/Flow.Launcher.JsonRPC.Python --- JsonRPC/wox.py | 115 ------------------------------------------------- README.md | 24 ++++++----- 2 files changed, 14 insertions(+), 125 deletions(-) delete mode 100644 JsonRPC/wox.py diff --git a/JsonRPC/wox.py b/JsonRPC/wox.py deleted file mode 100644 index 1beaa1d7e..000000000 --- a/JsonRPC/wox.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import print_function -import json -import sys -import inspect - -class FlowLauncher(object): - """ - Flow.Launcher python plugin base - """ - - def __init__(self): - rpc_request = json.loads(sys.argv[1]) - # proxy is not working now - self.proxy = rpc_request.get("proxy",{}) - request_method_name = rpc_request.get("method") - request_parameters = rpc_request.get("parameters") - methods = inspect.getmembers(self, predicate=inspect.ismethod) - - request_method = dict(methods)[request_method_name] - results = request_method(*request_parameters) - - if request_method_name == "query" or request_method_name == "context_menu": - print(json.dumps({"result": results})) - - def query(self,query): - """ - sub class need to override this method - """ - return [] - - def context_menu(self, data): - """ - optional context menu entries for a result - """ - return [] - - def debug(self,msg): - """ - alert msg - """ - print("DEBUG:{}".format(msg)) - sys.exit() - -class FlowLauncherAPI(object): - - @classmethod - def change_query(cls,query,requery = False): - """ - change flowlauncher query - """ - print(json.dumps({"method": "Flow.Launcher.ChangeQuery","parameters":[query,requery]})) - - @classmethod - def shell_run(cls,cmd): - """ - run shell commands - """ - print(json.dumps({"method": "Flow.Launcher.ShellRun","parameters":[cmd]})) - - @classmethod - def close_app(cls): - """ - close flowlauncher - """ - print(json.dumps({"method": "Flow.Launcher.CloseApp","parameters":[]})) - - @classmethod - def hide_app(cls): - """ - hide flowlauncher - """ - print(json.dumps({"method": "Flow.Launcher.HideApp","parameters":[]})) - - @classmethod - def show_app(cls): - """ - show flowlauncher - """ - print(json.dumps({"method": "Flow.Launcher.ShowApp","parameters":[]})) - - @classmethod - def show_msg(cls,title,sub_title,ico_path=""): - """ - show messagebox - """ - print(json.dumps({"method": "Flow.Launcher.ShowMsg","parameters":[title,sub_title,ico_path]})) - - @classmethod - def open_setting_dialog(cls): - """ - open setting dialog - """ - print(json.dumps({"method": "Flow.Launcher.OpenSettingDialog","parameters":[]})) - - @classmethod - def start_loadingbar(cls): - """ - start loading animation in flowlauncher - """ - print(json.dumps({"method": "Flow.Launcher.StartLoadingBar","parameters":[]})) - - @classmethod - def stop_loadingbar(cls): - """ - stop loading animation in flowlauncher - """ - print(json.dumps({"method": "Flow.Launcher.StopLoadingBar","parameters":[]})) - - @classmethod - def reload_plugins(cls): - """ - reload all flowlauncher plugins - """ - print(json.dumps({"method": "Flow.Launcher.ReloadPlugins","parameters":[]})) diff --git a/README.md b/README.md index d7f8dd7ba..94d59bb93 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Flow Launcher. Dedicated to make your workflow flow more seamlessly. Aimed at be ![The Flow](https://user-images.githubusercontent.com/26427004/82151677-fa9c7100-989f-11ea-9143-81de60aaf07d.gif) - Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. -- Search for file contents +- Search for file contents. - Support search using environment variable paths - Run batch and PowerShell commands as Administrator or a different user. - Support languages from Chinese to Italian and more. @@ -26,20 +26,24 @@ Flow Launcher. Dedicated to make your workflow flow more seamlessly. Aimed at be ## Running Flow Launcher -| [Windows 7 and up](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest) -| ------------- | +| [Windows 7 and up](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest) | +| ---------------------------------------------------------------------------------- | Windows may complain about security due to code not being signed, this will be completed at a later stage. If you downloaded from this repo, you are good to continue the set up. -**Integrations:** - - If you use python plugins, install [python3](https://www.python.org/downloads/): `.exe` installer + add it to `%PATH%` or set it in flow's settings - - Flow searches files and contents via Windows Index Search, to use Everything, download the plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.Everything/releases/latest) +**Integrations** + - If you use Python plugins: + - Install [Python3](https://www.python.org/downloads/), download `.exe` installer. + - Add Python to `%PATH%` or set it in flow's settings. + - Use `pip` to install `flowlauncher`, cmd in `pip install flowlauncher`. + - Start to launch your Python plugins. + - Flow searches files and contents via Windows Index Search, to use Everything, download the plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.Everything/releases/latest). **Usage** -- Open flow's search window: Alt+Space is the default hotkey -- Open context menu: Ctrl+O/Shift+Enter -- Cancel/Return to previous screen: Esc -- Install/Uninstall plugins: in the search window, type `wpm install/uninstall` + the plugin name +- Open flow's search window: Alt+Space is the default hotkey. +- Open context menu: Ctrl+O/Shift+Enter. +- Cancel/Return to previous screen: Esc. +- Install/Uninstall plugins: in the search window, type `wpm install/uninstall` + the plugin name. - Saved user settings are located: - If using roaming: `%APPDATA%\FlowLauncher` - If using portable, by default: `%localappdata%\FlowLauncher\app-\UserData` From 5a9c631577cba212869cd6388fba57cd084f7dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sun, 29 Nov 2020 20:50:28 +0800 Subject: [PATCH 097/146] Use PropertyChange event to change text when language has changed. --- .../Resource/Internationalization.cs | 3 ++- .../UserSettings/Settings.cs | 10 ++++++- Flow.Launcher/MainWindow.xaml.cs | 27 ++++++++++++++++--- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index 1df6f2a04..9c5bb9cc3 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Reflection; using System.Windows; +using Flow.Launcher; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Logger; @@ -88,7 +89,6 @@ namespace Flow.Launcher.Core.Resource { language = language.NonNull(); - Settings.Language = language.LanguageCode; RemoveOldLanguageFiles(); if (language != AvailableLanguages.English) @@ -96,6 +96,7 @@ namespace Flow.Launcher.Core.Resource LoadLanguage(language); } UpdatePluginMetadataTranslations(); + Settings.Language = language.LanguageCode; } diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 837fe3b71..832b6fbfa 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -9,10 +9,18 @@ namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel { + private string language = "en"; + public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}"; public string OpenResultModifiers { get; set; } = KeyConstant.Alt; public bool ShowOpenResultHotkey { get; set; } = true; - public string Language { get; set; } = "en"; + public string Language + { + get => language; set { + language = value; + OnPropertyChanged(); + } + } public string Theme { get; set; } = Constant.DefaultTheme; public bool UseDropShadowEffect { get; set; } = false; public string QueryBoxFont { get; set; } = FontFamily.GenericSansSerif.Name; diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 28ad80603..558388762 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -52,11 +52,12 @@ namespace Flow.Launcher private void OnInitialized(object sender, EventArgs e) { - // show notify icon when flowlauncher is hided + } private void OnLoaded(object sender, RoutedEventArgs _) { + // show notify icon when flowlauncher is hidden InitializeNotifyIcon(); // todo is there a way to set blur only once? @@ -88,11 +89,19 @@ namespace Flow.Launcher }; _settings.PropertyChanged += (o, e) => { - if (e.PropertyName == nameof(Settings.HideNotifyIcon)) + switch (e.PropertyName) { - _notifyIcon.Visible = !_settings.HideNotifyIcon; + case nameof(Settings.HideNotifyIcon): + _notifyIcon.Visible = !_settings.HideNotifyIcon; + break; + case nameof(Settings.Language): + UpdateNotifyIconText(); + break; } }; + + + InitializePosition(); } @@ -104,6 +113,18 @@ namespace Flow.Launcher _settings.WindowLeft = Left; } + private void UpdateNotifyIconText() + { + var menu = _notifyIcon.ContextMenuStrip; + var open = menu.Items[0]; + var setting = menu.Items[1]; + var exit = menu.Items[2]; + + open.Text = InternationalizationManager.Instance.GetTranslation("iconTrayOpen"); + setting.Text = InternationalizationManager.Instance.GetTranslation("iconTraySettings"); + exit.Text = InternationalizationManager.Instance.GetTranslation("iconTrayExit"); + } + private void InitializeNotifyIcon() { _notifyIcon = new NotifyIcon From ac6dea1322a319e282c4233449ca02e0507d510a Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 30 Nov 2020 07:31:38 +1100 Subject: [PATCH 098/146] clear whitespaces, no code changes --- Flow.Launcher.Core/Resource/Internationalization.cs | 1 - Flow.Launcher/MainWindow.xaml.cs | 5 ----- 2 files changed, 6 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index 9c5bb9cc3..64b949cbb 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -4,7 +4,6 @@ using System.IO; using System.Linq; using System.Reflection; using System.Windows; -using Flow.Launcher; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Logger; diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 558388762..993eb76c5 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -100,8 +100,6 @@ namespace Flow.Launcher } }; - - InitializePosition(); } @@ -201,7 +199,6 @@ namespace Flow.Launcher } } - private void OnDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) @@ -316,7 +313,5 @@ namespace Flow.Launcher _viewModel.QueryTextCursorMovedToEnd = false; } } - - } } \ No newline at end of file From e11daa0867ea6fdf75fb1a793d4338fd03f52db1 Mon Sep 17 00:00:00 2001 From: Zero Date: Mon, 30 Nov 2020 09:52:25 +0800 Subject: [PATCH 099/146] Update LICENSE --- LICENSE | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index cb4b563c0..0b9ce01e4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,44 @@ +FlowLauncher are licensed under the terms of the MIT license, reproduced below. + + +A. HISTORY OF THE SOFTWARE +========================== + +- Copyright (c) 2015-2019 Wox. All rights reserved. +- Copyright (c) 2019-2020+ Flow-Launcher. All rights reserved. + + +B. FlowLauncher LICENSE +========================== + The MIT License (MIT) -Copyright (c) 2015 Wox +Copyright (c) 2019-2020+ Flow-Launcher. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +C. Wox LICENSE +========================== + +The MIT License (MIT) + +Copyright (c) 2020 Wox https://github.com/Wox-launcher/Wox Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From a460aefa1f6faca89a47491c86598365a5c9ea1c Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Dec 2020 19:58:27 +1100 Subject: [PATCH 100/146] add PluginsManager --- Flow.Launcher.sln | 16 +++++++ ...Flow.Launcher.Plugin.PluginsManager.csproj | 30 ++++++++++++ .../Main.cs | 10 ++++ .../Plugins.cs | 13 ++++++ .../PluginsManager.cs | 46 +++++++++++++++++++ .../PluginsManifest.cs | 35 ++++++++++++++ .../plugin.json | 14 ++++++ 7 files changed, 164 insertions(+) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 6196aa5df..22086b0bd 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -20,6 +20,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher", "Flow.Launc {59BD9891-3837-438A-958D-ADC7F91F6F7E} = {59BD9891-3837-438A-958D-ADC7F91F6F7E} {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} = {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} {F35190AA-4758-4D9E-A193-E3BDF6AD3567} = {F35190AA-4758-4D9E-A193-E3BDF6AD3567} + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} = {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} {9B130CC5-14FB-41FF-B310-0A95B6894C37} = {9B130CC5-14FB-41FF-B310-0A95B6894C37} {FDED22C8-B637-42E8-824A-63B5B6E05A3A} = {FDED22C8-B637-42E8-824A-63B5B6E05A3A} {A3DCCBCA-ACC1-421D-B16E-210896234C26} = {A3DCCBCA-ACC1-421D-B16E-210896234C26} @@ -71,6 +72,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.Explor EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.ProcessKiller", "Plugins\Flow.Launcher.Plugin.ProcessKiller\Flow.Launcher.Plugin.ProcessKiller.csproj", "{588088F4-3262-4F9F-9663-A05DE12534C3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Flow.Launcher.Plugin.PluginsManager", "Plugins\Flow.Launcher.Plugin.PluginManager\Flow.Launcher.Plugin.PluginsManager.csproj", "{70CB72BC-1CD6-453D-9CA5-F7E2441426FE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -298,6 +301,18 @@ Global {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x64.Build.0 = Release|Any CPU {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x86.ActiveCfg = Release|Any CPU {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x86.Build.0 = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x64.ActiveCfg = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x64.Build.0 = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x86.ActiveCfg = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x86.Build.0 = Debug|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|Any CPU.Build.0 = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x64.ActiveCfg = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x64.Build.0 = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x86.ActiveCfg = Release|Any CPU + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -316,6 +331,7 @@ Global {59BD9891-3837-438A-958D-ADC7F91F6F7E} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {F9C4C081-4CC3-4146-95F1-E102B4E10A5F} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {588088F4-3262-4F9F-9663-A05DE12534C3} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} + {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F26ACB50-3F6C-4907-B0C9-1ADACC1D0DED} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj new file mode 100644 index 000000000..b1d0c6f68 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj @@ -0,0 +1,30 @@ + + + + Library + netcoreapp3.1 + true + true + true + false + + + + ..\..\Output\Debug\Plugins\Flow.Launcher.Plugin.PluginsManager + + + + ..\..\Output\Release\Plugins\Flow.Launcher.Plugin.PluginsManager + + + + + + + + + + PreserveNewest + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs new file mode 100644 index 000000000..36e40bf1b --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + class Main + { + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs new file mode 100644 index 000000000..f6538b7ef --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + internal class Plugin + { + public string Name { get; set; } + public string Url { get; set; } + public string Version { get; set; } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs new file mode 100644 index 000000000..055e027ad --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -0,0 +1,46 @@ +using Flow.Launcher.Infrastructure.Http; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + internal class PluginsManager + { + internal void PluginInstall(Plugin plugin) + { + if (PluginExists()) + { + //prompt user if want to install + + return; + } + + PluginDowload(plugin.Url, ""); + } + + private void PluginDowload(string downloadUrl, string toFilePath) + { + using (var wc = new WebClient { Proxy = Http.WebProxy() }) + { + wc.DownloadFile(downloadUrl, toFilePath); + } + } + + internal void PluginUpdate() + { + + } + + internal bool PluginExists() + { + return false; + } + + internal void PluginsManifestSiteOpen() + { + + } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs new file mode 100644 index 000000000..d470a996c --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs @@ -0,0 +1,35 @@ +using Flow.Launcher.Infrastructure.Http; +using Flow.Launcher.Infrastructure.Logger; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + class PluginsManifest + { + public List Plugins { get; private set; } + public PluginsManifest() + { + var json = string.Empty; + + using (var wc = new WebClient { Proxy = Http.WebProxy() }) + { + try + { + json = wc.DownloadString("https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher.PluginsManifest/main/plugins.json"); + } + catch (Exception e) + { + Log.Exception("|PluginManagement.GetManifest|Encountered error trying to download plugins manifest", e); + + Plugins = new List(); + } + } + + Plugins = !string.IsNullOrEmpty(json) ? JsonConvert.DeserializeObject>(json) : new List(); + } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json new file mode 100644 index 000000000..327011ac3 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json @@ -0,0 +1,14 @@ +{ + "ID": "9f8f9b14-2518-4907-b211-35ab6290dee7", + "ActionKeywords": [ + "pm" + ], + "Name": "Plugins Manager", + "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", + "Author": "Jeremy Wu", + "Version": "1.0.0", + "Language": "csharp", + "Website": "https://github.com/Flow-Launcher/Flow.Launcher", + "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", + "IcoPath": "Images\\pluginsmanager.png" +} From 9ae9d69a570fa2073979b9dbeb31dc23112c5d07 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Dec 2020 20:39:26 +1100 Subject: [PATCH 101/146] update Plugin json mapping --- .../Flow.Launcher.Plugin.PluginManager/Plugins.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs index f6538b7ef..56f01e86b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs @@ -6,8 +6,14 @@ namespace Flow.Launcher.Plugin.PluginsManager { internal class Plugin { - public string Name { get; set; } - public string Url { get; set; } - public string Version { get; set; } + internal string ID { get; set; } + internal string Name { get; set; } + internal string Description { get; set; } + internal string Author { get; set; } + internal string Version { get; set; } + internal string Language { get; set; } + internal string Website { get; set; } + internal string UrlDownload { get; set; } + internal string UrlSourceCode { get; set; } } } From cc1d049cad8efe8298e07aa6a094dbe2d773b0ce Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 6 Dec 2020 21:10:22 +1100 Subject: [PATCH 102/146] Plugins Manager scaffolding --- .../ContextMenu.cs | 29 ++++++++++ ...Flow.Launcher.Plugin.PluginsManager.csproj | 8 +++ .../Languages/en.xaml | 15 ++++++ .../Main.cs | 54 +++++++++++++++++-- .../{ => Models}/Plugins.cs | 2 +- .../{ => Models}/PluginsManifest.cs | 2 +- .../ViewModels/SettingsViewModel.cs | 26 +++++++++ .../Views/PluginsManagerSettings.xaml | 12 +++++ .../Views/PluginsManagerSettings.xaml.cs | 22 ++++++++ 9 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/ContextMenu.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml rename Plugins/Flow.Launcher.Plugin.PluginManager/{ => Models}/Plugins.cs (90%) rename Plugins/Flow.Launcher.Plugin.PluginManager/{ => Models}/PluginsManifest.cs (95%) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/ViewModels/SettingsViewModel.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/ContextMenu.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/ContextMenu.cs new file mode 100644 index 000000000..d26c1ead4 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/ContextMenu.cs @@ -0,0 +1,29 @@ +using Flow.Launcher.Infrastructure.UserSettings; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + internal class ContextMenu : IContextMenu + { + private PluginInitContext Context { get; set; } + + private Settings Settings { get; set; } + + public ContextMenu(PluginInitContext context, Settings settings) + { + Context = context; + Settings = settings; + } + + public List LoadContextMenus(Result selectedResult) + { + // Open website + // Go to source code + // Report an issue? + // Request a feature? + return new List(); + } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj index b1d0c6f68..43a1e089b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj @@ -27,4 +27,12 @@ PreserveNewest + + + + + + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml new file mode 100644 index 000000000..75caf81ec --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml @@ -0,0 +1,15 @@ + + + + + + + + Plugins Manager + Management of installing, uninstalling or updating Flow Launcher plugins + + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs index 36e40bf1b..73d3f954c 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs @@ -1,10 +1,58 @@ -using System; +using Flow.Launcher.Infrastructure.Storage; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.Plugin.PluginsManager.ViewModels; +using Flow.Launcher.Plugin.PluginsManager.Views; using System.Collections.Generic; -using System.Text; +using System.Windows.Controls; namespace Flow.Launcher.Plugin.PluginsManager { - class Main + public class Main : ISettingProvider, IPlugin, ISavable, IContextMenu, IPluginI18n { + internal PluginInitContext Context { get; set; } + + internal Settings Settings; + + private SettingsViewModel viewModel; + + private IContextMenu contextMenu; + + public Control CreateSettingPanel() + { + return new PluginsManagerSettings(viewModel); + } + + public void Init(PluginInitContext context) + { + Context = context; + viewModel = new SettingsViewModel(context); + Settings = viewModel.Settings; + contextMenu = new ContextMenu(Context, Settings); + } + + public List LoadContextMenus(Result selectedResult) + { + return contextMenu.LoadContextMenus(selectedResult); + } + + public List Query(Query query) + { + return new List(); + } + + public void Save() + { + viewModel.Save(); + } + + public string GetTranslatedPluginTitle() + { + return Context.API.GetTranslation("plugin_pluginsmanager_plugin_name"); + } + + public string GetTranslatedPluginDescription() + { + return Context.API.GetTranslation("plugin_pluginsmanager_plugin_description"); + } } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/Plugins.cs similarity index 90% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs rename to Plugins/Flow.Launcher.Plugin.PluginManager/Models/Plugins.cs index 56f01e86b..d2f6348af 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Plugins.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/Plugins.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace Flow.Launcher.Plugin.PluginsManager +namespace Flow.Launcher.Plugin.PluginsManager.Models { internal class Plugin { diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs similarity index 95% rename from Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs rename to Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs index d470a996c..3609aba7d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManifest.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Net; using System.Text; -namespace Flow.Launcher.Plugin.PluginsManager +namespace Flow.Launcher.Plugin.PluginsManager.Models { class PluginsManifest { diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/ViewModels/SettingsViewModel.cs new file mode 100644 index 000000000..f3cf117d3 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/ViewModels/SettingsViewModel.cs @@ -0,0 +1,26 @@ +using Flow.Launcher.Infrastructure.Storage; +using Flow.Launcher.Infrastructure.UserSettings; + +namespace Flow.Launcher.Plugin.PluginsManager.ViewModels +{ + public class SettingsViewModel + { + private readonly PluginJsonStorage storage; + + internal Settings Settings { get; set; } + + internal PluginInitContext Context { get; set; } + + public SettingsViewModel(PluginInitContext context) + { + Context = context; + storage = new PluginJsonStorage(); + Settings = storage.Load(); + } + + public void Save() + { + storage.Save(); + } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml b/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml new file mode 100644 index 000000000..7f6d7ba82 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml.cs new file mode 100644 index 000000000..14204eda9 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml.cs @@ -0,0 +1,22 @@ + +using Flow.Launcher.Plugin.PluginsManager.ViewModels; + +namespace Flow.Launcher.Plugin.PluginsManager.Views +{ + /// + /// Interaction logic for PluginsManagerSettings.xaml + /// + public partial class PluginsManagerSettings + { + private readonly SettingsViewModel viewModel; + + public PluginsManagerSettings(SettingsViewModel viewModel) + { + InitializeComponent(); + + this.viewModel = viewModel; + + //RefreshView(); + } + } +} From 42f8bbe6972db523540ddd74a63533ba3b9250fc Mon Sep 17 00:00:00 2001 From: Zero Date: Sun, 6 Dec 2020 19:18:57 +0800 Subject: [PATCH 103/146] Update LICENSE --- LICENSE | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/LICENSE b/LICENSE index 0b9ce01e4..b4ba8d542 100644 --- a/LICENSE +++ b/LICENSE @@ -4,8 +4,15 @@ FlowLauncher are licensed under the terms of the MIT license, reproduced below. A. HISTORY OF THE SOFTWARE ========================== -- Copyright (c) 2015-2019 Wox. All rights reserved. -- Copyright (c) 2019-2020+ Flow-Launcher. All rights reserved. +- Copyright (c) 2015-2019 Wox +- Copyright (c) 2019-2020+ Flow-Launcher + +Flow's roots came from a rebrand of the JJW24/Wox fork and WoX. +A big thank you and all credits to Bao, the author of WoX, +and its contrbutors for all the amazing work. +The JJW24/Wox fork started adding new changes on top of +main WoX repo's code base from release v1.3.524. +Flow is a continuation of the work from JJW24/Wox B. FlowLauncher LICENSE @@ -13,7 +20,7 @@ B. FlowLauncher LICENSE The MIT License (MIT) -Copyright (c) 2019-2020+ Flow-Launcher. All rights reserved. +Copyright (c) 2019-2020+ Flow-Launcher Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -38,7 +45,7 @@ C. Wox LICENSE The MIT License (MIT) -Copyright (c) 2020 Wox https://github.com/Wox-launcher/Wox +Copyright (c) 2015 Wox Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 158701012623e0a95bf53638654609a4efc18164 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 7 Dec 2020 07:40:42 +1100 Subject: [PATCH 104/146] add plugin search --- .../Main.cs | 6 +- .../Models/Plugins.cs | 19 ------- .../Models/PluginsManifest.cs | 10 ++-- .../Models/UserPlugin.cs | 19 +++++++ .../PluginsManager.cs | 57 ++++++++++++++++++- 5 files changed, 83 insertions(+), 28 deletions(-) delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Models/Plugins.cs create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Models/UserPlugin.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs index 73d3f954c..829bb9715 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs @@ -37,7 +37,11 @@ namespace Flow.Launcher.Plugin.PluginsManager public List Query(Query query) { - return new List(); + var search = query.Search; + + var pluginManager = new PluginsManager(); + + return pluginManager.PluginsSearch(search); } public void Save() diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Models/Plugins.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/Plugins.cs deleted file mode 100644 index d2f6348af..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Models/Plugins.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Flow.Launcher.Plugin.PluginsManager.Models -{ - internal class Plugin - { - internal string ID { get; set; } - internal string Name { get; set; } - internal string Description { get; set; } - internal string Author { get; set; } - internal string Version { get; set; } - internal string Language { get; set; } - internal string Website { get; set; } - internal string UrlDownload { get; set; } - internal string UrlSourceCode { get; set; } - } -} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs index 3609aba7d..134ad7bd0 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs @@ -8,10 +8,10 @@ using System.Text; namespace Flow.Launcher.Plugin.PluginsManager.Models { - class PluginsManifest + internal class PluginsManifest { - public List Plugins { get; private set; } - public PluginsManifest() + internal List UserPlugins { get; private set; } + internal PluginsManifest() { var json = string.Empty; @@ -25,11 +25,11 @@ namespace Flow.Launcher.Plugin.PluginsManager.Models { Log.Exception("|PluginManagement.GetManifest|Encountered error trying to download plugins manifest", e); - Plugins = new List(); + UserPlugins = new List(); } } - Plugins = !string.IsNullOrEmpty(json) ? JsonConvert.DeserializeObject>(json) : new List(); + UserPlugins = !string.IsNullOrEmpty(json) ? JsonConvert.DeserializeObject>(json) : new List(); } } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Models/UserPlugin.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/UserPlugin.cs new file mode 100644 index 000000000..3bc44e0f6 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Models/UserPlugin.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager.Models +{ + public class UserPlugin + { + public string ID { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public string Author { get; set; } + public string Version { get; set; } + public string Language { get; set; } + public string Website { get; set; } + public string UrlDownload { get; set; } + public string UrlSourceCode { get; set; } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs index 055e027ad..1f3321d6a 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -1,6 +1,9 @@ -using Flow.Launcher.Infrastructure.Http; +using Flow.Launcher.Infrastructure; +using Flow.Launcher.Infrastructure.Http; +using Flow.Launcher.Plugin.PluginsManager.Models; using System; using System.Collections.Generic; +using System.Linq; using System.Net; using System.Text; @@ -8,7 +11,12 @@ namespace Flow.Launcher.Plugin.PluginsManager { internal class PluginsManager { - internal void PluginInstall(Plugin plugin) + private PluginsManifest pluginsManifest; + internal PluginsManager() + { + pluginsManifest = new PluginsManifest(); + } + internal void PluginInstall(UserPlugin plugin) { if (PluginExists()) { @@ -17,7 +25,7 @@ namespace Flow.Launcher.Plugin.PluginsManager return; } - PluginDowload(plugin.Url, ""); + PluginDowload(plugin.UrlDownload, ""); } private void PluginDowload(string downloadUrl, string toFilePath) @@ -42,5 +50,48 @@ namespace Flow.Launcher.Plugin.PluginsManager { } + + internal List PluginsSearch(string searchName) + { + var results = new List(); + + if (string.IsNullOrEmpty(searchName)) + { + pluginsManifest.UserPlugins + .ForEach(x => results.Add( + new Result + { + Title = $"{x.Name} by {x.Author}", + SubTitle = x.Description, + IcoPath = "Images\\plugin.png", + Action = e => + { + PluginInstall(x); + return false; + } + })); + + return results; + } + + pluginsManifest.UserPlugins + .Where(x => StringMatcher.FuzzySearch(searchName, x.Name).IsSearchPrecisionScoreMet()) + .Select(x => x) + .ToList() + .ForEach(x => results.Add( + new Result + { + Title = $"{x.Name} by {x.Author}", + SubTitle = x.Description, + IcoPath = "Images\\plugin.png", + Action = e => + { + PluginInstall(x); + return false; + } + })); + + return results; + } } } From 8d96899a8225212afb93d17d444e0d2032a6c7c3 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 7 Dec 2020 07:42:23 +1100 Subject: [PATCH 105/146] update icoPath --- .../Flow.Launcher.Plugin.PluginManager/PluginsManager.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs index 1f3321d6a..5457c1562 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -12,6 +12,9 @@ namespace Flow.Launcher.Plugin.PluginsManager internal class PluginsManager { private PluginsManifest pluginsManifest; + + private string icoPath = "Images\\plugin.png"; + internal PluginsManager() { pluginsManifest = new PluginsManifest(); @@ -63,7 +66,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { Title = $"{x.Name} by {x.Author}", SubTitle = x.Description, - IcoPath = "Images\\plugin.png", + IcoPath = icoPath, Action = e => { PluginInstall(x); @@ -83,7 +86,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { Title = $"{x.Name} by {x.Author}", SubTitle = x.Description, - IcoPath = "Images\\plugin.png", + IcoPath = icoPath, Action = e => { PluginInstall(x); From a72750dc65d6bf446eec7bb7eb3197445e34a4c6 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 7 Dec 2020 21:21:14 +1100 Subject: [PATCH 106/146] add plugin download behaviour --- ...Flow.Launcher.Plugin.PluginsManager.csproj | 8 ++- .../Languages/en.xaml | 4 +- .../Main.cs | 2 +- .../PluginsManager.cs | 67 +++++++++++-------- 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj index 43a1e089b..84cc5ffb1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj @@ -29,10 +29,14 @@ - + + PreserveNewest + - + + PreserveNewest + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml index 75caf81ec..7930eb743 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml @@ -3,7 +3,9 @@ xmlns:system="clr-namespace:System;assembly=mscorlib"> - + Downloading plugin + Please wait... + Successfully downloaded diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs index 829bb9715..1a21f6026 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs @@ -39,7 +39,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { var search = query.Search; - var pluginManager = new PluginsManager(); + var pluginManager = new PluginsManager(Context); return pluginManager.PluginsSearch(search); } diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs index 5457c1562..6a9da4eea 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -1,23 +1,29 @@ -using Flow.Launcher.Infrastructure; +using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Http; +using Flow.Launcher.Infrastructure.Logger; +using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.PluginsManager.Models; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Net; using System.Text; +using System.Windows; namespace Flow.Launcher.Plugin.PluginsManager { internal class PluginsManager { private PluginsManifest pluginsManifest; + private PluginInitContext context { get; set; } private string icoPath = "Images\\plugin.png"; - internal PluginsManager() + internal PluginsManager(PluginInitContext context) { pluginsManifest = new PluginsManifest(); + this.context = context; } internal void PluginInstall(UserPlugin plugin) { @@ -28,14 +34,28 @@ namespace Flow.Launcher.Plugin.PluginsManager return; } - PluginDowload(plugin.UrlDownload, ""); + var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); + PluginDownload(plugin.UrlDownload, filePath); } - private void PluginDowload(string downloadUrl, string toFilePath) + private void PluginDownload(string downloadUrl, string toFilePath) { - using (var wc = new WebClient { Proxy = Http.WebProxy() }) + try { - wc.DownloadFile(downloadUrl, toFilePath); + using (var wc = new WebClient { Proxy = Http.WebProxy() }) + { + wc.DownloadFile(downloadUrl, toFilePath); + } + + context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), + context.API.GetTranslation("plugin_pluginsmanager_download_success")); + } + catch(Exception e) + { + context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), + context.API.GetTranslation("plugin_pluginsmanager_download_success")); + + Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "PluginDownload"); } } @@ -58,9 +78,8 @@ namespace Flow.Launcher.Plugin.PluginsManager { var results = new List(); - if (string.IsNullOrEmpty(searchName)) - { - pluginsManifest.UserPlugins + pluginsManifest + .UserPlugins .ForEach(x => results.Add( new Result { @@ -69,32 +88,22 @@ namespace Flow.Launcher.Plugin.PluginsManager IcoPath = icoPath, Action = e => { + context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), + context.API.GetTranslation("plugin_pluginsmanager_please_wait")); + Application.Current.MainWindow.Hide(); PluginInstall(x); - return false; + + return true; } })); + if (string.IsNullOrEmpty(searchName)) return results; - } - pluginsManifest.UserPlugins - .Where(x => StringMatcher.FuzzySearch(searchName, x.Name).IsSearchPrecisionScoreMet()) - .Select(x => x) - .ToList() - .ForEach(x => results.Add( - new Result - { - Title = $"{x.Name} by {x.Author}", - SubTitle = x.Description, - IcoPath = icoPath, - Action = e => - { - PluginInstall(x); - return false; - } - })); - - return results; + return results + .Where(x => StringMatcher.FuzzySearch(searchName, x.Title).IsSearchPrecisionScoreMet()) + .Select(x => x) + .ToList(); } } } From 8c136580e29e8f58acca7432ae131e47da8f5dbb Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 8 Dec 2020 21:59:45 +1100 Subject: [PATCH 107/146] remove InstallPlugin method from API - do not allow InstallPlugin method to be called via API - move InstallPlugin functionality to PluginsManager for use exclusively --- Flow.Launcher.Core/Flow.Launcher.Core.csproj | 1 - Flow.Launcher.Core/Plugin/PluginInstaller.cs | 169 ------------------ Flow.Launcher.Core/Plugin/PluginManager.cs | 5 - Flow.Launcher.Plugin/IPublicAPI.cs | 6 - Flow.Launcher/PublicAPIInstance.cs | 5 - ...Flow.Launcher.Plugin.PluginsManager.csproj | 4 + .../PluginsManager.cs | 157 ++++++++++++++++ 7 files changed, 161 insertions(+), 186 deletions(-) delete mode 100644 Flow.Launcher.Core/Plugin/PluginInstaller.cs diff --git a/Flow.Launcher.Core/Flow.Launcher.Core.csproj b/Flow.Launcher.Core/Flow.Launcher.Core.csproj index 9f146a457..189a6669e 100644 --- a/Flow.Launcher.Core/Flow.Launcher.Core.csproj +++ b/Flow.Launcher.Core/Flow.Launcher.Core.csproj @@ -55,7 +55,6 @@ - diff --git a/Flow.Launcher.Core/Plugin/PluginInstaller.cs b/Flow.Launcher.Core/Plugin/PluginInstaller.cs deleted file mode 100644 index 7b980a3ee..000000000 --- a/Flow.Launcher.Core/Plugin/PluginInstaller.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System; -using System.IO; -using System.Windows; -using ICSharpCode.SharpZipLib.Zip; -using Newtonsoft.Json; -using Flow.Launcher.Plugin; -using Flow.Launcher.Infrastructure; -using Flow.Launcher.Infrastructure.Logger; - -namespace Flow.Launcher.Core.Plugin -{ - internal class PluginInstaller - { - internal static void Install(string path) - { - if (File.Exists(path)) - { - string tempFolder = Path.Combine(Path.GetTempPath(), "flowlauncher", "plugins"); - if (Directory.Exists(tempFolder)) - { - Directory.Delete(tempFolder, true); - } - UnZip(path, tempFolder, true); - - string jsonPath = Path.Combine(tempFolder, Constant.PluginMetadataFileName); - if (!File.Exists(jsonPath)) - { - MessageBox.Show("Install failed: plugin config is missing"); - return; - } - - PluginMetadata plugin = GetMetadataFromJson(tempFolder); - if (plugin == null || plugin.Name == null) - { - MessageBox.Show("Install failed: plugin config is invalid"); - return; - } - - string pluginFolderPath = Infrastructure.UserSettings.DataLocation.PluginsDirectory; - - string newPluginName = plugin.Name - .Replace("/", "_") - .Replace("\\", "_") - .Replace(":", "_") - .Replace("<", "_") - .Replace(">", "_") - .Replace("?", "_") - .Replace("*", "_") - .Replace("|", "_") - + "-" + Guid.NewGuid(); - - string newPluginPath = Path.Combine(pluginFolderPath, newPluginName); - - string content = $"Do you want to install following plugin?{Environment.NewLine}{Environment.NewLine}" + - $"Name: {plugin.Name}{Environment.NewLine}" + - $"Version: {plugin.Version}{Environment.NewLine}" + - $"Author: {plugin.Author}"; - PluginPair existingPlugin = PluginManager.GetPluginForId(plugin.ID); - - if (existingPlugin != null) - { - content = $"Do you want to update following plugin?{Environment.NewLine}{Environment.NewLine}" + - $"Name: {plugin.Name}{Environment.NewLine}" + - $"Old Version: {existingPlugin.Metadata.Version}" + - $"{Environment.NewLine}New Version: {plugin.Version}" + - $"{Environment.NewLine}Author: {plugin.Author}"; - } - - var result = MessageBox.Show(content, "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question); - if (result == MessageBoxResult.Yes) - { - if (existingPlugin != null && Directory.Exists(existingPlugin.Metadata.PluginDirectory)) - { - //when plugin is in use, we can't delete them. That's why we need to make plugin folder a random name - File.Create(Path.Combine(existingPlugin.Metadata.PluginDirectory, "NeedDelete.txt")).Close(); - } - - Directory.Move(tempFolder, newPluginPath); - - //exsiting plugins may be has loaded by application, - //if we try to delelte those kind of plugins, we will get a error that indicate the - //file is been used now. - //current solution is to restart Flow Launcher. Ugly. - //if (MainWindow.Initialized) - //{ - // Plugins.Initialize(); - //} - if (MessageBox.Show($"You have installed plugin {plugin.Name} successfully.{Environment.NewLine}" + - "Restart Flow Launcher to take effect?", - "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) - { - PluginManager.API.RestartApp(); - } - } - } - } - - private static PluginMetadata GetMetadataFromJson(string pluginDirectory) - { - string configPath = Path.Combine(pluginDirectory, Constant.PluginMetadataFileName); - PluginMetadata metadata; - - if (!File.Exists(configPath)) - { - return null; - } - - try - { - metadata = JsonConvert.DeserializeObject(File.ReadAllText(configPath)); - metadata.PluginDirectory = pluginDirectory; - } - catch (Exception e) - { - Log.Exception($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: invalid json format", e); - return null; - } - - if (!AllowedLanguage.IsAllowed(metadata.Language)) - { - Log.Error($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: invalid language {metadata.Language}"); - return null; - } - if (!File.Exists(metadata.ExecuteFilePath)) - { - Log.Error($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: file {metadata.ExecuteFilePath} doesn't exist"); - return null; - } - - return metadata; - } - - /// - /// unzip plugin contents to the given directory. - /// - /// The path to the zip file. - /// The output directory. - /// overwirte - private static void UnZip(string zipFile, string strDirectory, bool overWrite) - { - if (strDirectory == "") - strDirectory = Directory.GetCurrentDirectory(); - - using (ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipFile))) - { - ZipEntry theEntry; - - while ((theEntry = zipStream.GetNextEntry()) != null) - { - var pathToZip = theEntry.Name; - var directoryName = String.IsNullOrEmpty(pathToZip) ? "" : Path.GetDirectoryName(pathToZip); - var fileName = Path.GetFileName(pathToZip); - var destinationDir = Path.Combine(strDirectory, directoryName); - var destinationFile = Path.Combine(destinationDir, fileName); - - Directory.CreateDirectory(destinationDir); - - if (String.IsNullOrEmpty(fileName) || (File.Exists(destinationFile) && !overWrite)) - continue; - - using (FileStream streamWriter = File.Create(destinationFile)) - { - zipStream.CopyTo(streamWriter); - } - } - } - } - } -} diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index 5cde9de83..3b697a1ee 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -133,11 +133,6 @@ namespace Flow.Launcher.Core.Plugin } } - public static void InstallPlugin(string path) - { - PluginInstaller.Install(path); - } - public static List ValidPluginsForQuery(Query query) { if (NonGlobalPlugins.ContainsKey(query.ActionKeyword)) diff --git a/Flow.Launcher.Plugin/IPublicAPI.cs b/Flow.Launcher.Plugin/IPublicAPI.cs index 681973905..ccc00d5e9 100644 --- a/Flow.Launcher.Plugin/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/IPublicAPI.cs @@ -63,12 +63,6 @@ namespace Flow.Launcher.Plugin /// void OpenSettingDialog(); - /// - /// Install Flow Launcher plugin - /// - /// Plugin path (ends with .flowlauncher) - void InstallPlugin(string path); - /// /// Get translation of current language /// You need to implement IPluginI18n if you want to support multiple languages for your plugin diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 0cc5a0e5d..90d4fff63 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -115,11 +115,6 @@ namespace Flow.Launcher _mainVM.ProgressBarVisibility = Visibility.Collapsed; } - public void InstallPlugin(string path) - { - Application.Current.Dispatcher.Invoke(() => PluginManager.InstallPlugin(path)); - } - public string GetTranslation(string key) { return InternationalizationManager.Instance.GetTranslation(key); diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj index 84cc5ffb1..cc1a931ce 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj @@ -39,4 +39,8 @@ PreserveNewest + + + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs index 6a9da4eea..5484fdf85 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -3,6 +3,7 @@ using Flow.Launcher.Infrastructure.Http; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.PluginsManager.Models; +using ICSharpCode.SharpZipLib.Zip; using System; using System.Collections.Generic; using System.IO; @@ -36,6 +37,7 @@ namespace Flow.Launcher.Plugin.PluginsManager var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); PluginDownload(plugin.UrlDownload, filePath); + context.API.InstallPlugin(filePath); } private void PluginDownload(string downloadUrl, string toFilePath) @@ -105,5 +107,160 @@ namespace Flow.Launcher.Plugin.PluginsManager .Select(x => x) .ToList(); } + + private void Install(string path) + { + if (File.Exists(path)) + { + string tempFolder = Path.Combine(Path.GetTempPath(), "flowlauncher", "plugins"); + if (Directory.Exists(tempFolder)) + { + Directory.Delete(tempFolder, true); + } + UnZip(path, tempFolder, true); + + string jsonPath = Path.Combine(tempFolder, Constant.PluginMetadataFileName); + if (!File.Exists(jsonPath)) + { + MessageBox.Show("Install failed: plugin config is missing"); + return; + } + + PluginMetadata plugin = GetMetadataFromJson(tempFolder); + if (plugin == null || plugin.Name == null) + { + MessageBox.Show("Install failed: plugin config is invalid"); + return; + } + + string pluginFolderPath = Infrastructure.UserSettings.DataLocation.PluginsDirectory; + + string newPluginName = plugin.Name + .Replace("/", "_") + .Replace("\\", "_") + .Replace(":", "_") + .Replace("<", "_") + .Replace(">", "_") + .Replace("?", "_") + .Replace("*", "_") + .Replace("|", "_") + + "-" + Guid.NewGuid(); + + string newPluginPath = Path.Combine(pluginFolderPath, newPluginName); + + string content = $"Do you want to install following plugin?{Environment.NewLine}{Environment.NewLine}" + + $"Name: {plugin.Name}{Environment.NewLine}" + + $"Version: {plugin.Version}{Environment.NewLine}" + + $"Author: {plugin.Author}"; + PluginPair existingPlugin = PluginManager.GetPluginForId(plugin.ID); + + if (existingPlugin != null) + { + content = $"Do you want to update following plugin?{Environment.NewLine}{Environment.NewLine}" + + $"Name: {plugin.Name}{Environment.NewLine}" + + $"Old Version: {existingPlugin.Metadata.Version}" + + $"{Environment.NewLine}New Version: {plugin.Version}" + + $"{Environment.NewLine}Author: {plugin.Author}"; + } + + var result = MessageBox.Show(content, "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question); + if (result == MessageBoxResult.Yes) + { + if (existingPlugin != null && Directory.Exists(existingPlugin.Metadata.PluginDirectory)) + { + //when plugin is in use, we can't delete them. That's why we need to make plugin folder a random name + File.Create(Path.Combine(existingPlugin.Metadata.PluginDirectory, "NeedDelete.txt")).Close(); + } + + Directory.Move(tempFolder, newPluginPath); + + //exsiting plugins may be has loaded by application, + //if we try to delelte those kind of plugins, we will get a error that indicate the + //file is been used now. + //current solution is to restart Flow Launcher. Ugly. + //if (MainWindow.Initialized) + //{ + // Plugins.Initialize(); + //} + if (MessageBox.Show($"You have installed plugin {plugin.Name} successfully.{Environment.NewLine}" + + "Restart Flow Launcher to take effect?", + "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) + { + PluginManager.API.RestartApp(); + } + } + } + } + + private PluginMetadata GetMetadataFromJson(string pluginDirectory) + { + string configPath = Path.Combine(pluginDirectory, Constant.PluginMetadataFileName); + PluginMetadata metadata; + + if (!File.Exists(configPath)) + { + return null; + } + + try + { + metadata = JsonConvert.DeserializeObject(File.ReadAllText(configPath)); + metadata.PluginDirectory = pluginDirectory; + } + catch (Exception e) + { + Log.Exception($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: invalid json format", e); + return null; + } + + if (!AllowedLanguage.IsAllowed(metadata.Language)) + { + Log.Error($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: invalid language {metadata.Language}"); + return null; + } + if (!File.Exists(metadata.ExecuteFilePath)) + { + Log.Error($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: file {metadata.ExecuteFilePath} doesn't exist"); + return null; + } + + return metadata; + } + + /// + /// unzip plugin contents to the given directory. + /// + /// The path to the zip file. + /// The output directory. + /// overwirte + private void UnZip(string zipFile, string strDirectory, bool overWrite) + { + if (strDirectory == "") + strDirectory = Directory.GetCurrentDirectory(); + + using (ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipFile))) + { + ZipEntry theEntry; + + while ((theEntry = zipStream.GetNextEntry()) != null) + { + var pathToZip = theEntry.Name; + var directoryName = String.IsNullOrEmpty(pathToZip) ? "" : Path.GetDirectoryName(pathToZip); + var fileName = Path.GetFileName(pathToZip); + var destinationDir = Path.Combine(strDirectory, directoryName); + var destinationFile = Path.Combine(destinationDir, fileName); + + Directory.CreateDirectory(destinationDir); + + if (String.IsNullOrEmpty(fileName) || (File.Exists(destinationFile) && !overWrite)) + continue; + + using (FileStream streamWriter = File.Create(destinationFile)) + { + zipStream.CopyTo(streamWriter); + } + } + } + } } } From eaf3267353710db159eac311af8983ad7ad60667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Tue, 8 Dec 2020 19:48:42 +0800 Subject: [PATCH 108/146] Add space for pinyin translation --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 38f1ab879..9396226c7 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -36,8 +36,8 @@ namespace Flow.Launcher.Infrastructure { if (WordsHelper.HasChinese(content)) { - var result = WordsHelper.GetPinyin(content, ";"); - result = GetFirstPinyinChar(result) + result.Replace(";", ""); + var result = WordsHelper.GetPinyin(content, " "); + result = GetFirstPinyinChar(result) + result; _pinyinCache[content] = result; return result; } @@ -59,7 +59,7 @@ namespace Flow.Launcher.Infrastructure private string GetFirstPinyinChar(string content) { - return string.Concat(content.Split(';').Select(x => x.First())); + return string.Concat(content.Split(' ').Select(x => x.First())); } } } \ No newline at end of file From d8191f71bf0e24e91f5135d1c4e0537a82b7b922 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 9 Dec 2020 05:28:58 +1100 Subject: [PATCH 109/146] adjust temporary working directory path --- .../PluginsManager.cs | 129 ++++++++---------- 1 file changed, 54 insertions(+), 75 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs index 5484fdf85..4290767c3 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -4,6 +4,7 @@ using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.PluginsManager.Models; using ICSharpCode.SharpZipLib.Zip; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; @@ -37,7 +38,7 @@ namespace Flow.Launcher.Plugin.PluginsManager var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); PluginDownload(plugin.UrlDownload, filePath); - context.API.InstallPlugin(filePath); + Application.Current.Dispatcher.Invoke(() => Install(plugin, filePath)); } private void PluginDownload(string downloadUrl, string toFilePath) @@ -108,51 +109,62 @@ namespace Flow.Launcher.Plugin.PluginsManager .ToList(); } - private void Install(string path) + private void Install(UserPlugin plugin, string downloadedFilePath) { - if (File.Exists(path)) + if (File.Exists(downloadedFilePath)) { - string tempFolder = Path.Combine(Path.GetTempPath(), "flowlauncher", "plugins"); - if (Directory.Exists(tempFolder)) + var tempFolderPath = Path.Combine(Path.GetTempPath(), "flowlauncher"); + var tempPluginFolderPath = Path.Combine(tempFolderPath, "plugin"); + + if (Directory.Exists(tempFolderPath)) { - Directory.Delete(tempFolder, true); + Directory.Delete(tempFolderPath, true); } - UnZip(path, tempFolder, true); - string jsonPath = Path.Combine(tempFolder, Constant.PluginMetadataFileName); - if (!File.Exists(jsonPath)) + Directory.CreateDirectory(tempFolderPath); + + var zipFilePath = Path.Combine(tempFolderPath, Path.GetFileName(downloadedFilePath)); + + File.Move(downloadedFilePath, zipFilePath); + + UnZip(zipFilePath, tempPluginFolderPath, true); + + var unzippedParentFolderPath = tempPluginFolderPath; + + var metadataJsonFilePath = string.Empty; + + var pluginFolderPath = string.Empty; + + var unzippedFolderCount = Directory.GetDirectories(unzippedParentFolderPath).Length; + var unzippedFilesCount = Directory.GetFiles(unzippedParentFolderPath).Length; + + // addjust path depending on how the plugin is zipped up + // the recommended should be to zip up the folder not the contents + if (unzippedFolderCount == 1 && unzippedFilesCount == 0) + // folder is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/pluginFolderName/ + pluginFolderPath = Directory.GetDirectories(unzippedParentFolderPath)[0]; + + if (unzippedFilesCount > 1) + // content is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/ + pluginFolderPath = unzippedParentFolderPath; + + if (File.Exists(Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName))) + metadataJsonFilePath = Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName); + + if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath)) { - MessageBox.Show("Install failed: plugin config is missing"); + MessageBox.Show("Install failed: unable to find the plugin.json metadata file"); return; } - PluginMetadata plugin = GetMetadataFromJson(tempFolder); - if (plugin == null || plugin.Name == null) - { - MessageBox.Show("Install failed: plugin config is invalid"); - return; - } - - string pluginFolderPath = Infrastructure.UserSettings.DataLocation.PluginsDirectory; - - string newPluginName = plugin.Name - .Replace("/", "_") - .Replace("\\", "_") - .Replace(":", "_") - .Replace("<", "_") - .Replace(">", "_") - .Replace("?", "_") - .Replace("*", "_") - .Replace("|", "_") - + "-" + Guid.NewGuid(); - - string newPluginPath = Path.Combine(pluginFolderPath, newPluginName); + string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}"); string content = $"Do you want to install following plugin?{Environment.NewLine}{Environment.NewLine}" + $"Name: {plugin.Name}{Environment.NewLine}" + $"Version: {plugin.Version}{Environment.NewLine}" + $"Author: {plugin.Author}"; - PluginPair existingPlugin = PluginManager.GetPluginForId(plugin.ID); + + var existingPlugin = context.API.GetAllPlugins().Where(x => x.Metadata.ID == plugin.ID).FirstOrDefault(); if (existingPlugin != null) { @@ -172,7 +184,7 @@ namespace Flow.Launcher.Plugin.PluginsManager File.Create(Path.Combine(existingPlugin.Metadata.PluginDirectory, "NeedDelete.txt")).Close(); } - Directory.Move(tempFolder, newPluginPath); + Directory.Move(pluginFolderPath, newPluginPath); //exsiting plugins may be has loaded by application, //if we try to delelte those kind of plugins, we will get a error that indicate the @@ -186,73 +198,38 @@ namespace Flow.Launcher.Plugin.PluginsManager "Restart Flow Launcher to take effect?", "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { - PluginManager.API.RestartApp(); + context.API.RestartApp(); } } } } - private PluginMetadata GetMetadataFromJson(string pluginDirectory) - { - string configPath = Path.Combine(pluginDirectory, Constant.PluginMetadataFileName); - PluginMetadata metadata; - - if (!File.Exists(configPath)) - { - return null; - } - - try - { - metadata = JsonConvert.DeserializeObject(File.ReadAllText(configPath)); - metadata.PluginDirectory = pluginDirectory; - } - catch (Exception e) - { - Log.Exception($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: invalid json format", e); - return null; - } - - if (!AllowedLanguage.IsAllowed(metadata.Language)) - { - Log.Error($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: invalid language {metadata.Language}"); - return null; - } - if (!File.Exists(metadata.ExecuteFilePath)) - { - Log.Error($"|PluginInstaller.GetMetadataFromJson|plugin config {configPath} failed: file {metadata.ExecuteFilePath} doesn't exist"); - return null; - } - - return metadata; - } - /// /// unzip plugin contents to the given directory. /// - /// The path to the zip file. + /// The path to the zip file. /// The output directory. - /// overwirte - private void UnZip(string zipFile, string strDirectory, bool overWrite) + /// overwrite + private void UnZip(string zipFilePath, string strDirectory, bool overwrite) { if (strDirectory == "") strDirectory = Directory.GetCurrentDirectory(); - using (ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipFile))) + using (ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipFilePath))) { ZipEntry theEntry; while ((theEntry = zipStream.GetNextEntry()) != null) { var pathToZip = theEntry.Name; - var directoryName = String.IsNullOrEmpty(pathToZip) ? "" : Path.GetDirectoryName(pathToZip); + var directoryName = string.IsNullOrEmpty(pathToZip) ? "" : Path.GetDirectoryName(pathToZip); var fileName = Path.GetFileName(pathToZip); var destinationDir = Path.Combine(strDirectory, directoryName); var destinationFile = Path.Combine(destinationDir, fileName); Directory.CreateDirectory(destinationDir); - if (String.IsNullOrEmpty(fileName) || (File.Exists(destinationFile) && !overWrite)) + if (string.IsNullOrEmpty(fileName) || (File.Exists(destinationFile) && !overwrite)) continue; using (FileStream streamWriter = File.Create(destinationFile)) @@ -262,5 +239,7 @@ namespace Flow.Launcher.Plugin.PluginsManager } } } + + //delete the zip file when done } } From 519342178f0bc1730e2df34b8605f8e6e3bcab13 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 13:29:47 +1100 Subject: [PATCH 110/146] move download and unzip to utilities class --- .../PluginsManager.cs | 61 +++---------------- .../Utilities.cs | 50 +++++++++++++++ 2 files changed, 57 insertions(+), 54 deletions(-) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginManager/Utilities.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs index 4290767c3..e7e61460e 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs @@ -3,14 +3,11 @@ using Flow.Launcher.Infrastructure.Http; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.PluginsManager.Models; -using ICSharpCode.SharpZipLib.Zip; -using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; -using System.Text; using System.Windows; namespace Flow.Launcher.Plugin.PluginsManager @@ -37,29 +34,23 @@ namespace Flow.Launcher.Plugin.PluginsManager } var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); - PluginDownload(plugin.UrlDownload, filePath); - Application.Current.Dispatcher.Invoke(() => Install(plugin, filePath)); - } - - private void PluginDownload(string downloadUrl, string toFilePath) - { + try { - using (var wc = new WebClient { Proxy = Http.WebProxy() }) - { - wc.DownloadFile(downloadUrl, toFilePath); - } + Utilities.Download(plugin.UrlDownload, filePath); context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), - context.API.GetTranslation("plugin_pluginsmanager_download_success")); + context.API.GetTranslation("plugin_pluginsmanager_download_success")); } - catch(Exception e) + catch (Exception e) { context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), context.API.GetTranslation("plugin_pluginsmanager_download_success")); Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "PluginDownload"); } + + Application.Current.Dispatcher.Invoke(() => Install(plugin, filePath)); } internal void PluginUpdate() @@ -127,7 +118,7 @@ namespace Flow.Launcher.Plugin.PluginsManager File.Move(downloadedFilePath, zipFilePath); - UnZip(zipFilePath, tempPluginFolderPath, true); + Utilities.UnZip(zipFilePath, tempPluginFolderPath, true); var unzippedParentFolderPath = tempPluginFolderPath; @@ -203,43 +194,5 @@ namespace Flow.Launcher.Plugin.PluginsManager } } } - - /// - /// unzip plugin contents to the given directory. - /// - /// The path to the zip file. - /// The output directory. - /// overwrite - private void UnZip(string zipFilePath, string strDirectory, bool overwrite) - { - if (strDirectory == "") - strDirectory = Directory.GetCurrentDirectory(); - - using (ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipFilePath))) - { - ZipEntry theEntry; - - while ((theEntry = zipStream.GetNextEntry()) != null) - { - var pathToZip = theEntry.Name; - var directoryName = string.IsNullOrEmpty(pathToZip) ? "" : Path.GetDirectoryName(pathToZip); - var fileName = Path.GetFileName(pathToZip); - var destinationDir = Path.Combine(strDirectory, directoryName); - var destinationFile = Path.Combine(destinationDir, fileName); - - Directory.CreateDirectory(destinationDir); - - if (string.IsNullOrEmpty(fileName) || (File.Exists(destinationFile) && !overwrite)) - continue; - - using (FileStream streamWriter = File.Create(destinationFile)) - { - zipStream.CopyTo(streamWriter); - } - } - } - } - - //delete the zip file when done } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginManager/Utilities.cs new file mode 100644 index 000000000..1ff42fdbd --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginManager/Utilities.cs @@ -0,0 +1,50 @@ +using Flow.Launcher.Infrastructure.Http; +using ICSharpCode.SharpZipLib.Zip; +using System.IO; +using System.Net; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + internal static class Utilities + { + /// + /// Unzip contents to the given directory. + /// + /// The path to the zip file. + /// The output directory. + /// overwrite + internal static void UnZip(string zipFilePath, string strDirectory, bool overwrite) + { + if (strDirectory == "") + strDirectory = Directory.GetCurrentDirectory(); + + using var zipStream = new ZipInputStream(File.OpenRead(zipFilePath)); + + ZipEntry theEntry; + + while ((theEntry = zipStream.GetNextEntry()) != null) + { + var pathToZip = theEntry.Name; + var directoryName = string.IsNullOrEmpty(pathToZip) ? "" : Path.GetDirectoryName(pathToZip); + var fileName = Path.GetFileName(pathToZip); + var destinationDir = Path.Combine(strDirectory, directoryName); + var destinationFile = Path.Combine(destinationDir, fileName); + + Directory.CreateDirectory(destinationDir); + + if (string.IsNullOrEmpty(fileName) || (File.Exists(destinationFile) && !overwrite)) + continue; + + using var streamWriter = File.Create(destinationFile); + zipStream.CopyTo(streamWriter); + } + } + + internal static void Download(string downloadUrl, string toFilePath) + { + using var wc = new WebClient { Proxy = Http.WebProxy() }; + + wc.DownloadFile(downloadUrl, toFilePath); + } + } +} From 311222ecd57ae602abf6665c6603b24b795783bc Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 19:54:30 +1100 Subject: [PATCH 111/146] update file name update method name --- Flow.Launcher.sln | 30 +++++++++---------- .../ContextMenu.cs | 0 ...Flow.Launcher.Plugin.PluginsManager.csproj | 0 .../Languages/en.xaml | 0 .../Main.cs | 2 +- .../Models/PluginsManifest.cs | 0 .../Models/UserPlugin.cs | 0 .../PluginsManager.cs | 12 ++++---- .../Utilities.cs | 0 .../ViewModels/SettingsViewModel.cs | 0 .../Views/PluginsManagerSettings.xaml | 0 .../Views/PluginsManagerSettings.xaml.cs | 0 .../plugin.json | 0 13 files changed, 22 insertions(+), 22 deletions(-) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/ContextMenu.cs (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Flow.Launcher.Plugin.PluginsManager.csproj (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Languages/en.xaml (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Main.cs (96%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Models/PluginsManifest.cs (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Models/UserPlugin.cs (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/PluginsManager.cs (95%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Utilities.cs (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/ViewModels/SettingsViewModel.cs (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Views/PluginsManagerSettings.xaml (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/Views/PluginsManagerSettings.xaml.cs (100%) rename Plugins/{Flow.Launcher.Plugin.PluginManager => Flow.Launcher.Plugin.PluginsManager}/plugin.json (100%) diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 22086b0bd..c873bc147 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -15,12 +15,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher", "Flow.Launc ProjectSection(ProjectDependencies) = postProject {1EE20B48-82FB-48A2-8086-675D6DDAB4F0} = {1EE20B48-82FB-48A2-8086-675D6DDAB4F0} {0B9DE348-9361-4940-ADB6-F5953BFFCCEC} = {0B9DE348-9361-4940-ADB6-F5953BFFCCEC} + {4792A74A-0CEA-4173-A8B2-30E6764C6217} = {4792A74A-0CEA-4173-A8B2-30E6764C6217} {FDB3555B-58EF-4AE6-B5F1-904719637AB4} = {FDB3555B-58EF-4AE6-B5F1-904719637AB4} {F9C4C081-4CC3-4146-95F1-E102B4E10A5F} = {F9C4C081-4CC3-4146-95F1-E102B4E10A5F} {59BD9891-3837-438A-958D-ADC7F91F6F7E} = {59BD9891-3837-438A-958D-ADC7F91F6F7E} {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} = {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} {F35190AA-4758-4D9E-A193-E3BDF6AD3567} = {F35190AA-4758-4D9E-A193-E3BDF6AD3567} - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} = {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} {9B130CC5-14FB-41FF-B310-0A95B6894C37} = {9B130CC5-14FB-41FF-B310-0A95B6894C37} {FDED22C8-B637-42E8-824A-63B5B6E05A3A} = {FDED22C8-B637-42E8-824A-63B5B6E05A3A} {A3DCCBCA-ACC1-421D-B16E-210896234C26} = {A3DCCBCA-ACC1-421D-B16E-210896234C26} @@ -72,7 +72,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.Explor EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.ProcessKiller", "Plugins\Flow.Launcher.Plugin.ProcessKiller\Flow.Launcher.Plugin.ProcessKiller.csproj", "{588088F4-3262-4F9F-9663-A05DE12534C3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Flow.Launcher.Plugin.PluginsManager", "Plugins\Flow.Launcher.Plugin.PluginManager\Flow.Launcher.Plugin.PluginsManager.csproj", "{70CB72BC-1CD6-453D-9CA5-F7E2441426FE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.PluginsManager", "Plugins\Flow.Launcher.Plugin.PluginsManager\Flow.Launcher.Plugin.PluginsManager.csproj", "{4792A74A-0CEA-4173-A8B2-30E6764C6217}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -301,18 +301,18 @@ Global {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x64.Build.0 = Release|Any CPU {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x86.ActiveCfg = Release|Any CPU {588088F4-3262-4F9F-9663-A05DE12534C3}.Release|x86.Build.0 = Release|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x64.ActiveCfg = Debug|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x64.Build.0 = Debug|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x86.ActiveCfg = Debug|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Debug|x86.Build.0 = Debug|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|Any CPU.Build.0 = Release|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x64.ActiveCfg = Release|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x64.Build.0 = Release|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x86.ActiveCfg = Release|Any CPU - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE}.Release|x86.Build.0 = Release|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Debug|x64.ActiveCfg = Debug|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Debug|x64.Build.0 = Debug|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Debug|x86.ActiveCfg = Debug|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Debug|x86.Build.0 = Debug|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|Any CPU.Build.0 = Release|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|x64.ActiveCfg = Release|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|x64.Build.0 = Release|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|x86.ActiveCfg = Release|Any CPU + {4792A74A-0CEA-4173-A8B2-30E6764C6217}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -331,7 +331,7 @@ Global {59BD9891-3837-438A-958D-ADC7F91F6F7E} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {F9C4C081-4CC3-4146-95F1-E102B4E10A5F} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {588088F4-3262-4F9F-9663-A05DE12534C3} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} - {70CB72BC-1CD6-453D-9CA5-F7E2441426FE} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} + {4792A74A-0CEA-4173-A8B2-30E6764C6217} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F26ACB50-3F6C-4907-B0C9-1ADACC1D0DED} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/ContextMenu.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/ContextMenu.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj b/Plugins/Flow.Launcher.Plugin.PluginsManager/Flow.Launcher.Plugin.PluginsManager.csproj similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Flow.Launcher.Plugin.PluginsManager.csproj rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Flow.Launcher.Plugin.PluginsManager.csproj diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Languages/en.xaml rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs similarity index 96% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index 1a21f6026..70ff7915c 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -41,7 +41,7 @@ namespace Flow.Launcher.Plugin.PluginsManager var pluginManager = new PluginsManager(Context); - return pluginManager.PluginsSearch(search); + return pluginManager.Search(search); } public void Save() diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/PluginsManifest.cs similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Models/PluginsManifest.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Models/PluginsManifest.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Models/UserPlugin.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/UserPlugin.cs similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Models/UserPlugin.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Models/UserPlugin.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs similarity index 95% rename from Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index e7e61460e..d35c8c16b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -17,14 +17,14 @@ namespace Flow.Launcher.Plugin.PluginsManager private PluginsManifest pluginsManifest; private PluginInitContext context { get; set; } - private string icoPath = "Images\\plugin.png"; + private readonly string icoPath = "Images\\plugin.png"; internal PluginsManager(PluginInitContext context) { pluginsManifest = new PluginsManifest(); this.context = context; } - internal void PluginInstall(UserPlugin plugin) + internal void InstallOrUpdate(UserPlugin plugin) { if (PluginExists()) { @@ -53,7 +53,7 @@ namespace Flow.Launcher.Plugin.PluginsManager Application.Current.Dispatcher.Invoke(() => Install(plugin, filePath)); } - internal void PluginUpdate() + internal void Update() { } @@ -65,10 +65,10 @@ namespace Flow.Launcher.Plugin.PluginsManager internal void PluginsManifestSiteOpen() { - + //Open https://git.vcmq.workers.dev/Flow-Launcher/Flow.Launcher.PluginsManifest } - internal List PluginsSearch(string searchName) + internal List Search(string searchName) { var results = new List(); @@ -85,7 +85,7 @@ namespace Flow.Launcher.Plugin.PluginsManager context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), context.API.GetTranslation("plugin_pluginsmanager_please_wait")); Application.Current.MainWindow.Hide(); - PluginInstall(x); + InstallOrUpdate(x); return true; } diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Utilities.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/SettingsViewModel.cs similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/ViewModels/SettingsViewModel.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/SettingsViewModel.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml.cs similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/Views/PluginsManagerSettings.xaml.cs rename to Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json similarity index 100% rename from Plugins/Flow.Launcher.Plugin.PluginManager/plugin.json rename to Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json From 1a59da4adc757653cbb014c3803208abf785fbac Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 21:28:01 +1100 Subject: [PATCH 112/146] add plugin uninstall method --- .../Languages/en.xaml | 1 + .../Main.cs | 9 +- .../PluginsManager.cs | 91 +++++++++++++------ 3 files changed, 73 insertions(+), 28 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index 7930eb743..01a9052ed 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml @@ -6,6 +6,7 @@ Downloading plugin Please wait... Successfully downloaded + Do you want to uninstall the following plugin? diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index 70ff7915c..f763826a8 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -39,9 +39,14 @@ namespace Flow.Launcher.Plugin.PluginsManager { var search = query.Search; - var pluginManager = new PluginsManager(Context); + var uninstallCmd = "uninstall"; - return pluginManager.Search(search); + var pluginManager = new PluginsManager(Context); + + if (search.ToLower().StartsWith($"{uninstallCmd} ") || search.ToLower() == uninstallCmd) + return pluginManager.RequestUninstall(search.Replace(uninstallCmd, string.Empty).Trim()); + + return pluginManager.RequestInstallOrUpdate(search); } public void Save() diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index d35c8c16b..ad62ac7b7 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -15,14 +15,14 @@ namespace Flow.Launcher.Plugin.PluginsManager internal class PluginsManager { private PluginsManifest pluginsManifest; - private PluginInitContext context { get; set; } + private PluginInitContext Context { get; set; } private readonly string icoPath = "Images\\plugin.png"; internal PluginsManager(PluginInitContext context) { pluginsManifest = new PluginsManifest(); - this.context = context; + Context = context; } internal void InstallOrUpdate(UserPlugin plugin) { @@ -39,13 +39,13 @@ namespace Flow.Launcher.Plugin.PluginsManager { Utilities.Download(plugin.UrlDownload, filePath); - context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), - context.API.GetTranslation("plugin_pluginsmanager_download_success")); + Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), + Context.API.GetTranslation("plugin_pluginsmanager_download_success")); } catch (Exception e) { - context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), - context.API.GetTranslation("plugin_pluginsmanager_download_success")); + Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), + Context.API.GetTranslation("plugin_pluginsmanager_download_success")); Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "PluginDownload"); } @@ -68,7 +68,18 @@ namespace Flow.Launcher.Plugin.PluginsManager //Open https://git.vcmq.workers.dev/Flow-Launcher/Flow.Launcher.PluginsManifest } - internal List Search(string searchName) + internal List Search(List results, string searchName) + { + if (string.IsNullOrEmpty(searchName)) + return results; + + return results + .Where(x => StringMatcher.FuzzySearch(searchName, x.Title).IsSearchPrecisionScoreMet()) + .Select(x => x) + .ToList(); + } + + internal List RequestInstallOrUpdate(string searchName) { var results = new List(); @@ -82,8 +93,8 @@ namespace Flow.Launcher.Plugin.PluginsManager IcoPath = icoPath, Action = e => { - context.API.ShowMsg(context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), - context.API.GetTranslation("plugin_pluginsmanager_please_wait")); + Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), + Context.API.GetTranslation("plugin_pluginsmanager_please_wait")); Application.Current.MainWindow.Hide(); InstallOrUpdate(x); @@ -91,13 +102,7 @@ namespace Flow.Launcher.Plugin.PluginsManager } })); - if (string.IsNullOrEmpty(searchName)) - return results; - - return results - .Where(x => StringMatcher.FuzzySearch(searchName, x.Title).IsSearchPrecisionScoreMet()) - .Select(x => x) - .ToList(); + return Search(results, searchName); } private void Install(UserPlugin plugin, string downloadedFilePath) @@ -155,7 +160,7 @@ namespace Flow.Launcher.Plugin.PluginsManager $"Version: {plugin.Version}{Environment.NewLine}" + $"Author: {plugin.Author}"; - var existingPlugin = context.API.GetAllPlugins().Where(x => x.Metadata.ID == plugin.ID).FirstOrDefault(); + var existingPlugin = Context.API.GetAllPlugins().Where(x => x.Metadata.ID == plugin.ID).FirstOrDefault(); if (existingPlugin != null) { @@ -177,22 +182,56 @@ namespace Flow.Launcher.Plugin.PluginsManager Directory.Move(pluginFolderPath, newPluginPath); - //exsiting plugins may be has loaded by application, - //if we try to delelte those kind of plugins, we will get a error that indicate the - //file is been used now. - //current solution is to restart Flow Launcher. Ugly. - //if (MainWindow.Initialized) - //{ - // Plugins.Initialize(); - //} if (MessageBox.Show($"You have installed plugin {plugin.Name} successfully.{Environment.NewLine}" + "Restart Flow Launcher to take effect?", "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { - context.API.RestartApp(); + Context.API.RestartApp(); } } } } + + internal List RequestUninstall(string search) + { + var results = new List(); + + Context.API.GetAllPlugins() + .ForEach(x => results.Add( + new Result + { + Title = $"{x.Metadata.Name} by {x.Metadata.Author}", + SubTitle = x.Metadata.Description, + IcoPath = icoPath, + Action = e => + { + Application.Current.MainWindow.Hide(); + Uninstall(x.Metadata); + + return true; + } + })); + + return Search(results, search); + } + + private void Uninstall(PluginMetadata plugin) + { + string message = Context.API.GetTranslation("plugin_pluginsmanager_uninstall_prompt")+ + $"{Environment.NewLine}{Environment.NewLine}" + + $"{plugin.Name} by {plugin.Author}"; + + if (MessageBox.Show(message, "Flow Launcher", MessageBoxButton.YesNo) == MessageBoxResult.Yes) + { + File.Create(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")).Close(); + var result = MessageBox.Show($"You have uninstalled plugin {plugin.Name} successfully.{Environment.NewLine}" + + "Restart Flow Launcher to take effect?", + "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question); + if (result == MessageBoxResult.Yes) + { + Context.API.RestartApp(); + } + } + } } } From 402e2da061fa82258d024b7be718f8319ddd3738 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 21:31:21 +1100 Subject: [PATCH 113/146] use plugin icopath when displaying uninstall plugins --- Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index ad62ac7b7..5a3304912 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -14,7 +14,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { internal class PluginsManager { - private PluginsManifest pluginsManifest; + private readonly PluginsManifest pluginsManifest; private PluginInitContext Context { get; set; } private readonly string icoPath = "Images\\plugin.png"; @@ -202,7 +202,7 @@ namespace Flow.Launcher.Plugin.PluginsManager { Title = $"{x.Metadata.Name} by {x.Metadata.Author}", SubTitle = x.Metadata.Description, - IcoPath = icoPath, + IcoPath = x.Metadata.IcoPath, Action = e => { Application.Current.MainWindow.Hide(); From 712a1456a2fde36a65b03ed58fc234a05c81eb42 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 22:09:27 +1100 Subject: [PATCH 114/146] add plugin icopath --- .../Images/pluginsmanager.png | Bin 0 -> 496093 bytes .../PluginsManager.cs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginsManager/Images/pluginsmanager.png diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/pluginsmanager.png b/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/pluginsmanager.png new file mode 100644 index 0000000000000000000000000000000000000000..65f0e41dc144cc1e332f181332c86031dfb37a11 GIT binary patch literal 496093 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 OK+Pm{Am42@dKRN*4Q22h_@G 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/t)Li`SQ4z>PGiq@V!DQWEKy3bH|%yH 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 f(`8UrH!@cOj?01h`ag$cQ6(@nc;gm$ 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

|t)cS~J?bP4-^_vHP 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 Jy=NQx{{T`VG&2AI literal 0 HcmV?d00001 diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 5a3304912..29065122b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -17,7 +17,7 @@ namespace Flow.Launcher.Plugin.PluginsManager private readonly PluginsManifest pluginsManifest; private PluginInitContext Context { get; set; } - private readonly string icoPath = "Images\\plugin.png"; + private readonly string icoPath = "Images\\pluginsmanager.png"; internal PluginsManager(PluginInitContext context) { From 4365520feabd145f7736f22cab13f3ebe9da4a36 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 22:18:21 +1100 Subject: [PATCH 115/146] update settings window to user control --- .../Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 4 +--- .../Views/PluginsManagerSettings.xaml | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 29065122b..f18d52d4c 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -1,5 +1,4 @@ using Flow.Launcher.Infrastructure; -using Flow.Launcher.Infrastructure.Http; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.PluginsManager.Models; @@ -7,7 +6,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Net; using System.Windows; namespace Flow.Launcher.Plugin.PluginsManager @@ -65,7 +63,7 @@ namespace Flow.Launcher.Plugin.PluginsManager internal void PluginsManifestSiteOpen() { - //Open https://git.vcmq.workers.dev/Flow-Launcher/Flow.Launcher.PluginsManifest + //Open from context menu https://git.vcmq.workers.dev/Flow-Launcher/Flow.Launcher.PluginsManifest } internal List Search(List results, string searchName) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml index 7f6d7ba82..89d27f6ff 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml @@ -1,12 +1,12 @@ - + d:DesignHeight="450" d:DesignWidth="800"> - + From b17dbcc31764f9ef8eade2d3e588e3d411c3b1cd Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 22:58:18 +1100 Subject: [PATCH 116/146] refactor --- .../PluginsManager.cs | 145 +++++++----------- .../Utilities.cs | 18 +++ 2 files changed, 73 insertions(+), 90 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index f18d52d4c..776c01144 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -24,13 +24,24 @@ namespace Flow.Launcher.Plugin.PluginsManager } internal void InstallOrUpdate(UserPlugin plugin) { - if (PluginExists()) + if (PluginExists(plugin.ID)) { - //prompt user if want to install + var updateMessage = $"Do you want to update following plugin?{Environment.NewLine}{Environment.NewLine}" + + $"Name: {plugin.Name}{Environment.NewLine}" + + $"{Environment.NewLine}New Version: {plugin.Version}" + + $"{Environment.NewLine}Author: {plugin.Author}"; - return; + throw new NotImplementedException(); } + var message = $"Do you want to install following plugin?{Environment.NewLine}{Environment.NewLine}" + + $"Name: {plugin.Name}{Environment.NewLine}" + + $"Version: {plugin.Version}{Environment.NewLine}" + + $"Author: {plugin.Author}"; + + if(MessageBox.Show(message, "Install plugin", MessageBoxButton.YesNo) == MessageBoxResult.No) + return; + var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); try @@ -53,17 +64,18 @@ namespace Flow.Launcher.Plugin.PluginsManager internal void Update() { - + throw new NotImplementedException(); } - internal bool PluginExists() + internal bool PluginExists(string id) { - return false; + return Context.API.GetAllPlugins().Any(x => x.Metadata.ID == id); } internal void PluginsManifestSiteOpen() { //Open from context menu https://git.vcmq.workers.dev/Flow-Launcher/Flow.Launcher.PluginsManifest + throw new NotImplementedException(); } internal List Search(List results, string searchName) @@ -105,89 +117,43 @@ namespace Flow.Launcher.Plugin.PluginsManager private void Install(UserPlugin plugin, string downloadedFilePath) { - if (File.Exists(downloadedFilePath)) + if (!File.Exists(downloadedFilePath)) + return; + + var tempFolderPath = Path.Combine(Path.GetTempPath(), "flowlauncher"); + var tempFolderPluginPath = Path.Combine(tempFolderPath, "plugin"); + + if (Directory.Exists(tempFolderPath)) + Directory.Delete(tempFolderPath, true); + + Directory.CreateDirectory(tempFolderPath); + + var zipFilePath = Path.Combine(tempFolderPath, Path.GetFileName(downloadedFilePath)); + + File.Move(downloadedFilePath, zipFilePath); + + Utilities.UnZip(zipFilePath, tempFolderPluginPath, true); + + var pluginFolderPath = Utilities.GetContainingFolderPathAfterUnzip(tempFolderPluginPath); + + var metadataJsonFilePath = string.Empty; + if (File.Exists(Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName))) + metadataJsonFilePath = Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName); + + if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath)) { - var tempFolderPath = Path.Combine(Path.GetTempPath(), "flowlauncher"); - var tempPluginFolderPath = Path.Combine(tempFolderPath, "plugin"); - - if (Directory.Exists(tempFolderPath)) - { - Directory.Delete(tempFolderPath, true); - } - - Directory.CreateDirectory(tempFolderPath); - - var zipFilePath = Path.Combine(tempFolderPath, Path.GetFileName(downloadedFilePath)); - - File.Move(downloadedFilePath, zipFilePath); - - Utilities.UnZip(zipFilePath, tempPluginFolderPath, true); - - var unzippedParentFolderPath = tempPluginFolderPath; - - var metadataJsonFilePath = string.Empty; - - var pluginFolderPath = string.Empty; - - var unzippedFolderCount = Directory.GetDirectories(unzippedParentFolderPath).Length; - var unzippedFilesCount = Directory.GetFiles(unzippedParentFolderPath).Length; - - // addjust path depending on how the plugin is zipped up - // the recommended should be to zip up the folder not the contents - if (unzippedFolderCount == 1 && unzippedFilesCount == 0) - // folder is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/pluginFolderName/ - pluginFolderPath = Directory.GetDirectories(unzippedParentFolderPath)[0]; - - if (unzippedFilesCount > 1) - // content is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/ - pluginFolderPath = unzippedParentFolderPath; - - if (File.Exists(Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName))) - metadataJsonFilePath = Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName); - - if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath)) - { - MessageBox.Show("Install failed: unable to find the plugin.json metadata file"); - return; - } - - string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}"); - - string content = $"Do you want to install following plugin?{Environment.NewLine}{Environment.NewLine}" + - $"Name: {plugin.Name}{Environment.NewLine}" + - $"Version: {plugin.Version}{Environment.NewLine}" + - $"Author: {plugin.Author}"; - - var existingPlugin = Context.API.GetAllPlugins().Where(x => x.Metadata.ID == plugin.ID).FirstOrDefault(); - - if (existingPlugin != null) - { - content = $"Do you want to update following plugin?{Environment.NewLine}{Environment.NewLine}" + - $"Name: {plugin.Name}{Environment.NewLine}" + - $"Old Version: {existingPlugin.Metadata.Version}" + - $"{Environment.NewLine}New Version: {plugin.Version}" + - $"{Environment.NewLine}Author: {plugin.Author}"; - } - - var result = MessageBox.Show(content, "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question); - if (result == MessageBoxResult.Yes) - { - if (existingPlugin != null && Directory.Exists(existingPlugin.Metadata.PluginDirectory)) - { - //when plugin is in use, we can't delete them. That's why we need to make plugin folder a random name - File.Create(Path.Combine(existingPlugin.Metadata.PluginDirectory, "NeedDelete.txt")).Close(); - } - - Directory.Move(pluginFolderPath, newPluginPath); - - if (MessageBox.Show($"You have installed plugin {plugin.Name} successfully.{Environment.NewLine}" + - "Restart Flow Launcher to take effect?", - "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) - { - Context.API.RestartApp(); - } - } + MessageBox.Show("Install failed: unable to find the plugin.json metadata file from the new plugin"); + return; } + + string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}"); + + Directory.Move(pluginFolderPath, newPluginPath); + + if (MessageBox.Show($"You have installed plugin {plugin.Name} successfully.{Environment.NewLine}" + + "Restart Flow Launcher to take effect?", + "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) + Context.API.RestartApp(); } internal List RequestUninstall(string search) @@ -221,14 +187,13 @@ namespace Flow.Launcher.Plugin.PluginsManager if (MessageBox.Show(message, "Flow Launcher", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { - File.Create(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")).Close(); + using var _ = File.CreateText(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")); + var result = MessageBox.Show($"You have uninstalled plugin {plugin.Name} successfully.{Environment.NewLine}" + "Restart Flow Launcher to take effect?", "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) - { Context.API.RestartApp(); - } } } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs index 1ff42fdbd..4c82a855b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs @@ -40,6 +40,24 @@ namespace Flow.Launcher.Plugin.PluginsManager } } + internal static string GetContainingFolderPathAfterUnzip(string unzippedParentFolderPath) + { + var unzippedFolderCount = Directory.GetDirectories(unzippedParentFolderPath).Length; + var unzippedFilesCount = Directory.GetFiles(unzippedParentFolderPath).Length; + + // addjust path depending on how the plugin is zipped up + // the recommended should be to zip up the folder not the contents + if (unzippedFolderCount == 1 && unzippedFilesCount == 0) + // folder is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/pluginFolderName/ + return Directory.GetDirectories(unzippedParentFolderPath)[0]; + + if (unzippedFilesCount > 1) + // content is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/ + return unzippedParentFolderPath; + + return string.Empty; + } + internal static void Download(string downloadUrl, string toFilePath) { using var wc = new WebClient { Proxy = Http.WebProxy() }; From 7a7815b9c1ad14338e8fb5dc029019b79657969a Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 10 Dec 2020 23:07:17 +1100 Subject: [PATCH 117/146] remove plugin PluginManagement --- Flow.Launcher.sln | 16 -- Flow.Launcher/MainWindow.xaml | 1 - Flow.Launcher/MainWindow.xaml.cs | 18 -- ...ow.Launcher.Plugin.PluginManagement.csproj | 102 ------- .../Flow.Launcher.PluginResult.cs | 11 - .../Images/plugin.png | Bin 269 -> 0 bytes .../Languages/de.xaml | 8 - .../Languages/en.xaml | 8 - .../Languages/pl.xaml | 8 - .../Languages/sk.xaml | 8 - .../Languages/tr.xaml | 8 - .../Languages/zh-cn.xaml | 8 - .../Languages/zh-tw.xaml | 8 - .../Main.cs | 258 ------------------ .../plugin.json | 12 - 15 files changed, 474 deletions(-) delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.PluginResult.cs delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Images/plugin.png delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/de.xaml delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/en.xaml delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/pl.xaml delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/tr.xaml delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-cn.xaml delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-tw.xaml delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/Main.cs delete mode 100644 Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index c873bc147..4d8997177 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -24,15 +24,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher", "Flow.Launc {9B130CC5-14FB-41FF-B310-0A95B6894C37} = {9B130CC5-14FB-41FF-B310-0A95B6894C37} {FDED22C8-B637-42E8-824A-63B5B6E05A3A} = {FDED22C8-B637-42E8-824A-63B5B6E05A3A} {A3DCCBCA-ACC1-421D-B16E-210896234C26} = {A3DCCBCA-ACC1-421D-B16E-210896234C26} - {049490F0-ECD2-4148-9B39-2135EC346EBE} = {049490F0-ECD2-4148-9B39-2135EC346EBE} {403B57F2-1856-4FC7-8A24-36AB346B763E} = {403B57F2-1856-4FC7-8A24-36AB346B763E} {588088F4-3262-4F9F-9663-A05DE12534C3} = {588088F4-3262-4F9F-9663-A05DE12534C3} EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Infrastructure", "Flow.Launcher.Infrastructure\Flow.Launcher.Infrastructure.csproj", "{4FD29318-A8AB-4D8F-AA47-60BC241B8DA3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.PluginManagement", "Plugins\Flow.Launcher.Plugin.PluginManagement\Flow.Launcher.Plugin.PluginManagement.csproj", "{049490F0-ECD2-4148-9B39-2135EC346EBE}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Core", "Flow.Launcher.Core\Flow.Launcher.Core.csproj", "{B749F0DB-8E75-47DB-9E5E-265D16D0C0D2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.Program", "Plugins\Flow.Launcher.Plugin.Program\Flow.Launcher.Plugin.Program.csproj", "{FDB3555B-58EF-4AE6-B5F1-904719637AB4}" @@ -132,18 +129,6 @@ Global {4FD29318-A8AB-4D8F-AA47-60BC241B8DA3}.Release|x64.Build.0 = Release|Any CPU {4FD29318-A8AB-4D8F-AA47-60BC241B8DA3}.Release|x86.ActiveCfg = Release|Any CPU {4FD29318-A8AB-4D8F-AA47-60BC241B8DA3}.Release|x86.Build.0 = Release|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|x64.ActiveCfg = Debug|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|x64.Build.0 = Debug|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|x86.ActiveCfg = Debug|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|x86.Build.0 = Debug|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|Any CPU.Build.0 = Release|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|x64.ActiveCfg = Release|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|x64.Build.0 = Release|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|x86.ActiveCfg = Release|Any CPU - {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|x86.Build.0 = Release|Any CPU {B749F0DB-8E75-47DB-9E5E-265D16D0C0D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B749F0DB-8E75-47DB-9E5E-265D16D0C0D2}.Debug|Any CPU.Build.0 = Debug|Any CPU {B749F0DB-8E75-47DB-9E5E-265D16D0C0D2}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -318,7 +303,6 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {049490F0-ECD2-4148-9B39-2135EC346EBE} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {FDB3555B-58EF-4AE6-B5F1-904719637AB4} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {403B57F2-1856-4FC7-8A24-36AB346B763E} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {1EE20B48-82FB-48A2-8086-675D6DDAB4F0} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 0cc671ef6..07bb96339 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -22,7 +22,6 @@ Loaded="OnLoaded" Initialized="OnInitialized" Closing="OnClosing" - Drop="OnDrop" LocationChanged="OnLocationChanged" Deactivated="OnDeactivated" PreviewKeyDown="OnKeyDown" diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 993eb76c5..3812b4e1f 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -199,24 +199,6 @@ namespace Flow.Launcher } } - private void OnDrop(object sender, DragEventArgs e) - { - if (e.Data.GetDataPresent(DataFormats.FileDrop)) - { - // Note that you can have more than one file. - string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); - if (files[0].ToLower().EndsWith(".flowlauncher")) - { - PluginManager.InstallPlugin(files[0]); - } - else - { - MessageBox.Show(InternationalizationManager.Instance.GetTranslation("invalidFlowLauncherPluginFileFormat")); - } - } - e.Handled = false; - } - private void OnPreviewDragOver(object sender, DragEventArgs e) { e.Handled = true; diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj b/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj deleted file mode 100644 index 08e89d861..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.Plugin.PluginManagement.csproj +++ /dev/null @@ -1,102 +0,0 @@ - - - - Library - netcoreapp3.1 - {049490F0-ECD2-4148-9B39-2135EC346EBE} - Properties - Flow.Launcher.Plugin.PluginManagement - Flow.Launcher.Plugin.PluginManagement - true - true - false - false - - - - true - full - false - ..\..\Output\Debug\Plugins\Flow.Launcher.Plugin.PluginManagement\ - DEBUG;TRACE - prompt - 4 - false - - - - pdbonly - true - ..\..\Output\Release\Plugins\Flow.Launcher.Plugin.PluginManagement\ - TRACE - prompt - 4 - false - - - - - - - - - - PreserveNewest - - - - - - PreserveNewest - - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.PluginResult.cs b/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.PluginResult.cs deleted file mode 100644 index 7f5d75d4e..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Flow.Launcher.PluginResult.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Flow.Launcher.Plugin.PluginManagement -{ - public class FlowLauncherPluginResult - { - public string plugin_file; - public string description; - public int liked_count; - public string name; - public string version; - } -} \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Images/plugin.png b/Plugins/Flow.Launcher.Plugin.PluginManagement/Images/plugin.png deleted file mode 100644 index 6ff9b8b1576145ac919a9e545d53b3b4d54e74e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt)}iE{-7? zjc;#kHvTfzwzgn&H8z5?V p7Dxgm(-_V|G#}kB6xf20n;ZREG~9lkehSc444$rjF6*2UngA2gT8sby diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/de.xaml deleted file mode 100644 index 38b2f1b4b..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/de.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - Flow Launcher Plugin Verwaltung - Installiere/Entferne/Aktualisiere Flow Launcher Plugins - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/en.xaml deleted file mode 100644 index b49f33c76..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/en.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - Plugin Management - Install, remove or update Flow Launcher plugins - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/pl.xaml deleted file mode 100644 index 362db73e5..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/pl.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - Zarządzanie wtyczkami Flow Launcher - Pozwala na instalacje, usuwanie i aktualizacje wtyczek - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml deleted file mode 100644 index b51eceb6a..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/sk.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - Správca pluginov - Inštalácia, odinštalácia alebo aktualizácia pluginov Flow Launchera - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/tr.xaml deleted file mode 100644 index fee82a78b..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/tr.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - Flow Launcher Eklenti Yöneticisi - Flow Launcher eklentilerini kurun, kaldırın ya da güncelleyin - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-cn.xaml deleted file mode 100644 index 009fd976c..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-cn.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - Flow Launcher插件管理 - 安装/卸载/更新Flow Launcher插件 - - \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-tw.xaml deleted file mode 100644 index c93d740f1..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Languages/zh-tw.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - Flow Launcher 外掛管理 - 安裝/解除安裝/更新 Flow Launcher 外掛 - - diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginManagement/Main.cs deleted file mode 100644 index e1b631517..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/Main.cs +++ /dev/null @@ -1,258 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows; -using Newtonsoft.Json; -using Flow.Launcher.Infrastructure; -using Flow.Launcher.Infrastructure.Http; -using Flow.Launcher.Infrastructure.Logger; - -namespace Flow.Launcher.Plugin.PluginManagement -{ - public class Main : IPlugin, IPluginI18n - { - private static string APIBASE = "http://api.wox.one"; - private static string pluginSearchUrl = APIBASE + "/plugin/search/"; - private const string ListCommand = "list"; - private const string InstallCommand = "install"; - private const string UninstallCommand = "uninstall"; - private PluginInitContext context; - - public List Query(Query query) - { - List results = new List(); - - if (string.IsNullOrEmpty(query.Search)) - { - results.Add(ResultForListCommandAutoComplete(query)); - results.Add(ResultForInstallCommandAutoComplete(query)); - results.Add(ResultForUninstallCommandAutoComplete(query)); - return results; - } - - string command = query.FirstSearch.ToLower(); - if (string.IsNullOrEmpty(command)) return results; - - if (command == ListCommand) - { - return ResultForListInstalledPlugins(); - } - if (command == UninstallCommand) - { - return ResultForUnInstallPlugin(query); - } - if (command == InstallCommand) - { - return ResultForInstallPlugin(query); - } - - if (InstallCommand.Contains(command)) - { - results.Add(ResultForInstallCommandAutoComplete(query)); - } - if (UninstallCommand.Contains(command)) - { - results.Add(ResultForUninstallCommandAutoComplete(query)); - } - if (ListCommand.Contains(command)) - { - results.Add(ResultForListCommandAutoComplete(query)); - } - - return results; - } - - private Result ResultForListCommandAutoComplete(Query query) - { - string title = ListCommand; - string subtitle = "list installed plugins"; - return ResultForCommand(query, ListCommand, title, subtitle); - } - - private Result ResultForInstallCommandAutoComplete(Query query) - { - string title = $"{InstallCommand} "; - string subtitle = "list installed plugins"; - return ResultForCommand(query, InstallCommand, title, subtitle); - } - - private Result ResultForUninstallCommandAutoComplete(Query query) - { - string title = $"{UninstallCommand} "; - string subtitle = "list installed plugins"; - return ResultForCommand(query, UninstallCommand, title, subtitle); - } - - private Result ResultForCommand(Query query, string command, string title, string subtitle) - { - const string seperater = Plugin.Query.TermSeperater; - var result = new Result - { - Title = title, - IcoPath = "Images\\plugin.png", - SubTitle = subtitle, - Action = e => - { - context.API.ChangeQuery($"{query.ActionKeyword}{seperater}{command}{seperater}"); - return false; - } - }; - return result; - } - - private List ResultForInstallPlugin(Query query) - { - List results = new List(); - string pluginName = query.SecondSearch; - if (string.IsNullOrEmpty(pluginName)) return results; - string json; - try - { - json = Http.Get(pluginSearchUrl + pluginName).Result; - } - catch (WebException e) - { - //todo happlebao add option in log to decide give user prompt or not - context.API.ShowMsg("PluginManagement.ResultForInstallPlugin: Can't connect to Wox plugin website, check your conenction"); - Log.Exception("|PluginManagement.ResultForInstallPlugin|Can't connect to Wox plugin website, check your conenction", e); - return new List(); - } - List searchedPlugins; - try - { - searchedPlugins = JsonConvert.DeserializeObject>(json); - } - catch (JsonSerializationException e) - { - context.API.ShowMsg("PluginManagement.ResultForInstallPlugin: Coundn't parse api search results, Please update your Flow Launcher!"); - Log.Exception("|PluginManagement.ResultForInstallPlugin|Coundn't parse api search results, Please update your Flow Launcher!", e); - return results; - } - - foreach (FlowLauncherPluginResult r in searchedPlugins) - { - FlowLauncherPluginResult r1 = r; - results.Add(new Result - { - Title = r.name, - SubTitle = r.description, - IcoPath = "Images\\plugin.png", - TitleHighlightData = StringMatcher.FuzzySearch(query.SecondSearch, r.name).MatchData, - SubTitleHighlightData = StringMatcher.FuzzySearch(query.SecondSearch, r.description).MatchData, - Action = c => - { - MessageBoxResult result = MessageBox.Show("Are you sure you wish to install the \'" + r.name + "\' plugin", - "Install plugin", MessageBoxButton.YesNo); - - if (result == MessageBoxResult.Yes) - { - string folder = Path.Combine(Path.GetTempPath(), "FlowLauncherPluginDownload"); - if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); - string filePath = Path.Combine(folder, Guid.NewGuid().ToString() + ".flowlauncher"); - - string pluginUrl = APIBASE + "/media/" + r1.plugin_file; - - try - { - Http.Download(pluginUrl, filePath); - } - catch (WebException e) - { - context.API.ShowMsg($"PluginManagement.ResultForInstallPlugin: download failed for <{r.name}>"); - Log.Exception($"|PluginManagement.ResultForInstallPlugin|download failed for <{r.name}>", e); - return false; - } - context.API.InstallPlugin(filePath); - } - return false; - } - }); - } - return results; - } - - private List ResultForUnInstallPlugin(Query query) - { - List results = new List(); - List allInstalledPlugins = context.API.GetAllPlugins().Select(o => o.Metadata).ToList(); - if (!string.IsNullOrEmpty(query.SecondSearch)) - { - allInstalledPlugins = - allInstalledPlugins.Where(o => o.Name.ToLower().Contains(query.SecondSearch.ToLower())).ToList(); - } - - foreach (PluginMetadata plugin in allInstalledPlugins) - { - results.Add(new Result - { - Title = plugin.Name, - SubTitle = plugin.Description, - IcoPath = plugin.IcoPath, - TitleHighlightData = StringMatcher.FuzzySearch(query.SecondSearch, plugin.Name).MatchData, - SubTitleHighlightData = StringMatcher.FuzzySearch(query.SecondSearch, plugin.Description).MatchData, - Action = e => - { - UnInstallPlugin(plugin); - return false; - } - }); - } - return results; - } - - private void UnInstallPlugin(PluginMetadata plugin) - { - string content = $"Do you want to uninstall following plugin?{Environment.NewLine}{Environment.NewLine}" + - $"Name: {plugin.Name}{Environment.NewLine}" + - $"Version: {plugin.Version}{Environment.NewLine}" + - $"Author: {plugin.Author}"; - if (MessageBox.Show(content, "Flow Launcher", MessageBoxButton.YesNo) == MessageBoxResult.Yes) - { - File.Create(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")).Close(); - var result = MessageBox.Show($"You have uninstalled plugin {plugin.Name} successfully.{Environment.NewLine}" + - "Restart Flow Launcher to take effect?", - "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question); - if (result == MessageBoxResult.Yes) - { - context.API.RestartApp(); - } - } - } - - private List ResultForListInstalledPlugins() - { - List results = new List(); - foreach (PluginMetadata plugin in context.API.GetAllPlugins().Select(o => o.Metadata)) - { - string actionKeywordString = string.Join(" or ", plugin.ActionKeywords.ToArray()); - results.Add(new Result - { - Title = $"{plugin.Name} - Action Keywords: {actionKeywordString}", - SubTitle = plugin.Description, - IcoPath = plugin.IcoPath - }); - } - return results; - } - - public void Init(PluginInitContext context) - { - this.context = context; - } - - public string GetTranslatedPluginTitle() - { - return context.API.GetTranslation("flowlauncher_plugin_plugin_management_plugin_name"); - } - - public string GetTranslatedPluginDescription() - { - return context.API.GetTranslation("flowlauncher_plugin_plugin_management_plugin_description"); - } - } -} diff --git a/Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json deleted file mode 100644 index 7b8262f79..000000000 --- a/Plugins/Flow.Launcher.Plugin.PluginManagement/plugin.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ID": "D2D2C23B084D422DB66FE0C79D6C2A6A", - "ActionKeyword": "wpm", - "Name": "Plugin Management", - "Description": "Install/Remove/Update Flow Launcher plugins", - "Author": "qianlifeng", - "Version": "1.1.1", - "Language": "csharp", - "Website": "https://github.com/Flow-Launcher/Flow.Launcher", - "ExecuteFileName": "Flow.Launcher.Plugin.PluginManagement.dll", - "IcoPath": "Images\\plugin.png" -} From c4b27421985f183329676f655341d1fd20f408c4 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 11 Dec 2020 07:45:01 +1100 Subject: [PATCH 118/146] add translation method for messages --- .../Languages/en.xaml | 8 ++- .../PluginsManager.cs | 50 +++++++++---------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index 01a9052ed..fc13f0c2f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml @@ -6,7 +6,13 @@ Downloading plugin Please wait... Successfully downloaded - Do you want to uninstall the following plugin? + Do you want to uninstall the following plugin?{0}{1}{2} by {3} + Do you want to install the following plugin?{0}{1}{2} by {3} + Plugin Install + Plugin Uninstall + Install failed: unable to find the plugin.json metadata file from the new plugin + You have installed plugin {0} successfully.{1}Would you like to restart Flow Launcher to take effect? + You have uninstalled plugin {0} successfully.{1}Would you like to restart Flow Launcher to take effect? diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 776c01144..6bfd246cd 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -24,28 +24,26 @@ namespace Flow.Launcher.Plugin.PluginsManager } internal void InstallOrUpdate(UserPlugin plugin) { - if (PluginExists(plugin.ID)) + if (PluginExists(plugin.ID)) { - var updateMessage = $"Do you want to update following plugin?{Environment.NewLine}{Environment.NewLine}" + - $"Name: {plugin.Name}{Environment.NewLine}" + - $"{Environment.NewLine}New Version: {plugin.Version}" + - $"{Environment.NewLine}Author: {plugin.Author}"; - - throw new NotImplementedException(); + Context.API.ShowMsg("Plugin already installed"); + return; } - var message = $"Do you want to install following plugin?{Environment.NewLine}{Environment.NewLine}" + - $"Name: {plugin.Name}{Environment.NewLine}" + - $"Version: {plugin.Version}{Environment.NewLine}" + - $"Author: {plugin.Author}"; + var message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_prompt"), + Environment.NewLine, Environment.NewLine, + plugin.Name, plugin.Author); - if(MessageBox.Show(message, "Install plugin", MessageBoxButton.YesNo) == MessageBoxResult.No) + if(MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo) == MessageBoxResult.No) return; var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); try { + Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), + Context.API.GetTranslation("plugin_pluginsmanager_please_wait")); + Utilities.Download(plugin.UrlDownload, filePath); Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), @@ -103,8 +101,6 @@ namespace Flow.Launcher.Plugin.PluginsManager IcoPath = icoPath, Action = e => { - Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), - Context.API.GetTranslation("plugin_pluginsmanager_please_wait")); Application.Current.MainWindow.Hide(); InstallOrUpdate(x); @@ -142,7 +138,7 @@ namespace Flow.Launcher.Plugin.PluginsManager if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath)) { - MessageBox.Show("Install failed: unable to find the plugin.json metadata file from the new plugin"); + MessageBox.Show(Context.API.GetTranslation("plugin_pluginsmanager_install_errormetadatafile")); return; } @@ -150,9 +146,10 @@ namespace Flow.Launcher.Plugin.PluginsManager Directory.Move(pluginFolderPath, newPluginPath); - if (MessageBox.Show($"You have installed plugin {plugin.Name} successfully.{Environment.NewLine}" + - "Restart Flow Launcher to take effect?", - "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) + if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_successandrestart"), + plugin.Name, Environment.NewLine), + Context.API.GetTranslation("plugin_pluginsmanager_install_title"), + MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) Context.API.RestartApp(); } @@ -181,18 +178,19 @@ namespace Flow.Launcher.Plugin.PluginsManager private void Uninstall(PluginMetadata plugin) { - string message = Context.API.GetTranslation("plugin_pluginsmanager_uninstall_prompt")+ - $"{Environment.NewLine}{Environment.NewLine}" + - $"{plugin.Name} by {plugin.Author}"; + string message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_prompt"), + Environment.NewLine, Environment.NewLine, + plugin.Name, plugin.Author); - if (MessageBox.Show(message, "Flow Launcher", MessageBoxButton.YesNo) == MessageBoxResult.Yes) + if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_uninstall_title"), + MessageBoxButton.YesNo) == MessageBoxResult.Yes) { using var _ = File.CreateText(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")); - var result = MessageBox.Show($"You have uninstalled plugin {plugin.Name} successfully.{Environment.NewLine}" + - "Restart Flow Launcher to take effect?", - "Install plugin", MessageBoxButton.YesNo, MessageBoxImage.Question); - if (result == MessageBoxResult.Yes) + if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_successandrestart"), + plugin.Name, Environment.NewLine), + Context.API.GetTranslation("plugin_pluginsmanager_uninstall_title"), + MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) Context.API.RestartApp(); } } From aaa938191ad3e69aff5ae9de1daabfc69b5a9b74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Fri, 11 Dec 2020 22:08:46 +0800 Subject: [PATCH 119/146] Manually add sapce to only the cinese character and the surrounding. --- .../PinyinAlphabet.cs | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 9396226c7..d35250398 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -9,6 +9,7 @@ using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Infrastructure.UserSettings; using ToolGood.Words.Pinyin; using System.Threading.Tasks; +using Microsoft.AspNetCore.Localization; namespace Flow.Launcher.Infrastructure { @@ -36,10 +37,43 @@ namespace Flow.Launcher.Infrastructure { if (WordsHelper.HasChinese(content)) { - var result = WordsHelper.GetPinyin(content, " "); - result = GetFirstPinyinChar(result) + result; - _pinyinCache[content] = result; - return result; + var resultList = WordsHelper.GetPinyinList(content); + + List chineseIndexs = new List(); + + for (int i = 0; i < content.Length; i++) + { + if (resultList[i].Length != 1 || !(resultList[i][0] == content[i])) + chineseIndexs.Add(i); + } + StringBuilder resultBuilder = new StringBuilder(); + resultBuilder.Append(string.Concat(resultList.Where((r, i) => chineseIndexs.Contains(i)).Select(s => s.First()))); + resultBuilder.Append(' '); + + int currentChineseIndex = 0; + int lastChineseIndex = -1; + for (int i = 0; i < resultList.Length; i++) + { + if (currentChineseIndex < chineseIndexs.Count && chineseIndexs[currentChineseIndex] == i) + { + resultBuilder.Append(' '); + + resultBuilder.Append(resultList[i]); + currentChineseIndex++; + lastChineseIndex = i; + } + else + { + if (i == lastChineseIndex + 1) + { + resultBuilder.Append(' '); + } + resultBuilder.Append(resultList[i]); + } + } + + + return _pinyinCache[content] = resultBuilder.ToString(); } else { From d64b4b5b0c27918281975f2260f8bc2d1d50c0d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Fri, 11 Dec 2020 22:20:09 +0800 Subject: [PATCH 120/146] Change the way getting acronym --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index d35250398..59bd897be 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -47,7 +47,11 @@ namespace Flow.Launcher.Infrastructure chineseIndexs.Add(i); } StringBuilder resultBuilder = new StringBuilder(); - resultBuilder.Append(string.Concat(resultList.Where((r, i) => chineseIndexs.Contains(i)).Select(s => s.First()))); + + foreach (var chineseIndex in chineseIndexs) + { + resultBuilder.Append(resultList[chineseIndex].First()); + } resultBuilder.Append(' '); int currentChineseIndex = 0; @@ -90,10 +94,5 @@ namespace Flow.Launcher.Infrastructure return content; } } - - private string GetFirstPinyinChar(string content) - { - return string.Concat(content.Split(' ').Select(x => x.First())); - } } } \ No newline at end of file From 64d67c1aa58c112d457d5997b4c8c0ce17855e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Sat, 12 Dec 2020 14:55:41 +0800 Subject: [PATCH 121/146] Update PinyinAlphabet.cs optimize Chinese character check logic Co-Authored-By: ToolGood --- .../PinyinAlphabet.cs | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 59bd897be..d5271437c 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -39,37 +39,32 @@ namespace Flow.Launcher.Infrastructure { var resultList = WordsHelper.GetPinyinList(content); - List chineseIndexs = new List(); - - for (int i = 0; i < content.Length; i++) - { - if (resultList[i].Length != 1 || !(resultList[i][0] == content[i])) - chineseIndexs.Add(i); - } StringBuilder resultBuilder = new StringBuilder(); + - foreach (var chineseIndex in chineseIndexs) - { - resultBuilder.Append(resultList[chineseIndex].First()); - } - resultBuilder.Append(' '); - - int currentChineseIndex = 0; - int lastChineseIndex = -1; for (int i = 0; i < resultList.Length; i++) { - if (currentChineseIndex < chineseIndexs.Count && chineseIndexs[currentChineseIndex] == i) + if (content[i] >= 0x3400 && content[i] <= 0x9FD5) + resultBuilder.Append(resultList[i].First()); + } + + resultBuilder.Append(' '); + + bool pre = false; + + for (int i = 0; i < resultList.Length; i++) + { + if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { resultBuilder.Append(' '); - resultBuilder.Append(resultList[i]); - currentChineseIndex++; - lastChineseIndex = i; + pre = true; } else { - if (i == lastChineseIndex + 1) + if (pre) { + pre = false; resultBuilder.Append(' '); } resultBuilder.Append(resultList[i]); From c8b251d63ac0bdac58ba2fc1221566d88e4488e9 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 08:41:18 +1100 Subject: [PATCH 122/146] use Http.Get from Infrastructure --- Flow.Launcher.Infrastructure/Http/Http.cs | 18 ++++------ .../Models/PluginsManifest.cs | 33 +++++++++++-------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Http/Http.cs b/Flow.Launcher.Infrastructure/Http/Http.cs index b7d274205..1d5f240e1 100644 --- a/Flow.Launcher.Infrastructure/Http/Http.cs +++ b/Flow.Launcher.Infrastructure/Http/Http.cs @@ -66,18 +66,12 @@ namespace Flow.Launcher.Infrastructure.Http response = response.NonNull(); var stream = response.GetResponseStream().NonNull(); - using (var reader = new StreamReader(stream, Encoding.GetEncoding(encoding))) - { - var content = await reader.ReadToEndAsync(); - if (response.StatusCode == HttpStatusCode.OK) - { - return content; - } - else - { - throw new HttpRequestException($"Error code <{response.StatusCode}> with content <{content}> returned from <{url}>"); - } - } + using var reader = new StreamReader(stream, Encoding.GetEncoding(encoding)); + var content = await reader.ReadToEndAsync(); + if (response.StatusCode != HttpStatusCode.OK) + throw new HttpRequestException($"Error code <{response.StatusCode}> with content <{content}> returned from <{url}>"); + + return content; } } } \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/PluginsManifest.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/PluginsManifest.cs index 134ad7bd0..290221710 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/PluginsManifest.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/PluginsManifest.cs @@ -3,8 +3,7 @@ using Flow.Launcher.Infrastructure.Logger; using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.Net; -using System.Text; +using System.Threading.Tasks; namespace Flow.Launcher.Plugin.PluginsManager.Models { @@ -12,24 +11,30 @@ namespace Flow.Launcher.Plugin.PluginsManager.Models { internal List UserPlugins { get; private set; } internal PluginsManifest() + { + DownloadManifest(); + } + + private void DownloadManifest() { var json = string.Empty; - - using (var wc = new WebClient { Proxy = Http.WebProxy() }) + try { - try - { - json = wc.DownloadString("https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher.PluginsManifest/main/plugins.json"); - } - catch (Exception e) - { - Log.Exception("|PluginManagement.GetManifest|Encountered error trying to download plugins manifest", e); + var t = Task.Run( + async () => + json = await Http.Get("https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher.PluginsManifest/main/plugins.json")); - UserPlugins = new List(); - } + t.Wait(); + + UserPlugins = JsonConvert.DeserializeObject>(json); + } + catch (Exception e) + { + Log.Exception("|PluginManagement.GetManifest|Encountered error trying to download plugins manifest", e); + + UserPlugins = new List(); } - UserPlugins = !string.IsNullOrEmpty(json) ? JsonConvert.DeserializeObject>(json) : new List(); } } } From ee0fc1ac478e3977fb22a81814334dd3f0775b3a Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 08:42:42 +1100 Subject: [PATCH 123/146] fix typo --- Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs index 4c82a855b..87c368f7f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs @@ -45,7 +45,7 @@ namespace Flow.Launcher.Plugin.PluginsManager var unzippedFolderCount = Directory.GetDirectories(unzippedParentFolderPath).Length; var unzippedFilesCount = Directory.GetFiles(unzippedParentFolderPath).Length; - // addjust path depending on how the plugin is zipped up + // adjust path depending on how the plugin is zipped up // the recommended should be to zip up the folder not the contents if (unzippedFolderCount == 1 && unzippedFilesCount == 0) // folder is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/pluginFolderName/ From 49b657b84ea0fa8147060106ee4dd14780c294fd Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 08:48:55 +1100 Subject: [PATCH 124/146] use Infrastructure.Http.Get to download plugins --- .../Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 3 ++- Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs | 7 ------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 6bfd246cd..527ce99f7 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -1,4 +1,5 @@ using Flow.Launcher.Infrastructure; +using Flow.Launcher.Infrastructure.Http; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.PluginsManager.Models; @@ -44,7 +45,7 @@ namespace Flow.Launcher.Plugin.PluginsManager Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), Context.API.GetTranslation("plugin_pluginsmanager_please_wait")); - Utilities.Download(plugin.UrlDownload, filePath); + Http.Download(plugin.UrlDownload, filePath); Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), Context.API.GetTranslation("plugin_pluginsmanager_download_success")); diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs index 87c368f7f..2853ffc9e 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs @@ -57,12 +57,5 @@ namespace Flow.Launcher.Plugin.PluginsManager return string.Empty; } - - internal static void Download(string downloadUrl, string toFilePath) - { - using var wc = new WebClient { Proxy = Http.WebProxy() }; - - wc.DownloadFile(downloadUrl, toFilePath); - } } } From b8a3ad8c427072aa82a51cee64aef4fa8376e662 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 13:46:37 +1100 Subject: [PATCH 125/146] change foreach to select --- .../PluginsManager.cs | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 527ce99f7..7d729193b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -90,24 +90,24 @@ namespace Flow.Launcher.Plugin.PluginsManager internal List RequestInstallOrUpdate(string searchName) { - var results = new List(); - - pluginsManifest + var results = + pluginsManifest .UserPlugins - .ForEach(x => results.Add( - new Result + .Select(x => + new Result + { + Title = $"{x.Name} by {x.Author}", + SubTitle = x.Description, + IcoPath = icoPath, + Action = e => { - Title = $"{x.Name} by {x.Author}", - SubTitle = x.Description, - IcoPath = icoPath, - Action = e => - { - Application.Current.MainWindow.Hide(); - InstallOrUpdate(x); + Application.Current.MainWindow.Hide(); + InstallOrUpdate(x); - return true; - } - })); + return true; + } + }) + .ToList(); return Search(results, searchName); } @@ -156,23 +156,23 @@ namespace Flow.Launcher.Plugin.PluginsManager internal List RequestUninstall(string search) { - var results = new List(); + var results= Context.API + .GetAllPlugins() + .Select(x => + new Result + { + Title = $"{x.Metadata.Name} by {x.Metadata.Author}", + SubTitle = x.Metadata.Description, + IcoPath = x.Metadata.IcoPath, + Action = e => + { + Application.Current.MainWindow.Hide(); + Uninstall(x.Metadata); - Context.API.GetAllPlugins() - .ForEach(x => results.Add( - new Result - { - Title = $"{x.Metadata.Name} by {x.Metadata.Author}", - SubTitle = x.Metadata.Description, - IcoPath = x.Metadata.IcoPath, - Action = e => - { - Application.Current.MainWindow.Hide(); - Uninstall(x.Metadata); - - return true; - } - })); + return true; + } + }) + .ToList(); return Search(results, search); } From 5d7102eadb92ea117a26ae50fb09b275e5b9f3f6 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 14:11:53 +1100 Subject: [PATCH 126/146] remove select --- Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 7d729193b..8f1b86eef 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -84,7 +84,6 @@ namespace Flow.Launcher.Plugin.PluginsManager return results .Where(x => StringMatcher.FuzzySearch(searchName, x.Title).IsSearchPrecisionScoreMet()) - .Select(x => x) .ToList(); } From 8a86bf749665574752d4c022c0273a9fd203ab21 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 19:14:50 +1100 Subject: [PATCH 127/146] add fuzzy search score for ordering --- .../PluginsManager.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 8f1b86eef..77672e05f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -83,7 +83,14 @@ namespace Flow.Launcher.Plugin.PluginsManager return results; return results - .Where(x => StringMatcher.FuzzySearch(searchName, x.Title).IsSearchPrecisionScoreMet()) + .Where(x => + { + var matchResult = StringMatcher.FuzzySearch(searchName, x.Title); + if (matchResult.IsSearchPrecisionScoreMet()) + x.Score = matchResult.Score; + + return matchResult.IsSearchPrecisionScoreMet(); + }) .ToList(); } From d69337c17aec0a0408d374223f90233ced74e719 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 21:05:32 +1100 Subject: [PATCH 128/146] add uninstall autocomplete & move uninstall hotkey to settings --- .../Main.cs | 11 ++-- .../PluginsManager.cs | 58 ++++++++++++++----- .../Settings.cs | 11 ++++ 3 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index f763826a8..58ec5005f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -37,14 +37,13 @@ namespace Flow.Launcher.Plugin.PluginsManager public List Query(Query query) { - var search = query.Search; + var search = query.Search.ToLower(); - var uninstallCmd = "uninstall"; + var pluginManager = new PluginsManager(Context, Settings); - var pluginManager = new PluginsManager(Context); - - if (search.ToLower().StartsWith($"{uninstallCmd} ") || search.ToLower() == uninstallCmd) - return pluginManager.RequestUninstall(search.Replace(uninstallCmd, string.Empty).Trim()); + if (!string.IsNullOrEmpty(search) + && ($"{Settings.UninstallHotkey} ".StartsWith(search) || search.StartsWith($"{Settings.UninstallHotkey} "))) + return pluginManager.RequestUninstall(search); return pluginManager.RequestInstallOrUpdate(search); } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 77672e05f..fc4abc800 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -14,32 +14,36 @@ namespace Flow.Launcher.Plugin.PluginsManager internal class PluginsManager { private readonly PluginsManifest pluginsManifest; + private PluginInitContext Context { get; set; } + private Settings Settings { get; set; } + private readonly string icoPath = "Images\\pluginsmanager.png"; - internal PluginsManager(PluginInitContext context) + internal PluginsManager(PluginInitContext context, Settings settings) { pluginsManifest = new PluginsManifest(); Context = context; + Settings = settings; } internal void InstallOrUpdate(UserPlugin plugin) { - if (PluginExists(plugin.ID)) + if (PluginExists(plugin.ID)) { Context.API.ShowMsg("Plugin already installed"); return; } - var message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_prompt"), - Environment.NewLine, Environment.NewLine, + var message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_prompt"), + Environment.NewLine, Environment.NewLine, plugin.Name, plugin.Author); - if(MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo) == MessageBoxResult.No) + if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo) == MessageBoxResult.No) return; var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); - + try { Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"), @@ -89,14 +93,14 @@ namespace Flow.Launcher.Plugin.PluginsManager if (matchResult.IsSearchPrecisionScoreMet()) x.Score = matchResult.Score; - return matchResult.IsSearchPrecisionScoreMet(); + return matchResult.IsSearchPrecisionScoreMet(); }) .ToList(); } internal List RequestInstallOrUpdate(string searchName) { - var results = + var results = pluginsManifest .UserPlugins .Select(x => @@ -122,10 +126,10 @@ namespace Flow.Launcher.Plugin.PluginsManager { if (!File.Exists(downloadedFilePath)) return; - + var tempFolderPath = Path.Combine(Path.GetTempPath(), "flowlauncher"); var tempFolderPluginPath = Path.Combine(tempFolderPath, "plugin"); - + if (Directory.Exists(tempFolderPath)) Directory.Delete(tempFolderPath, true); @@ -150,18 +154,44 @@ namespace Flow.Launcher.Plugin.PluginsManager } string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}"); - + Directory.Move(pluginFolderPath, newPluginPath); - if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_successandrestart"), + if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_successandrestart"), plugin.Name, Environment.NewLine), - Context.API.GetTranslation("plugin_pluginsmanager_install_title"), + Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) Context.API.RestartApp(); } internal List RequestUninstall(string search) { + if (!string.IsNullOrEmpty(search) + && Settings.UninstallHotkey.StartsWith(search) + && (Settings.UninstallHotkey != search || !search.StartsWith(Settings.UninstallHotkey))) + { + return + new List + { + new Result + { + Title = "Uninstall", + IcoPath = icoPath, + SubTitle = "Select a plugin to uninstall", + Action = e => + { + Context + .API + .ChangeQuery($"{Context.CurrentPluginMetadata.ActionKeywords.FirstOrDefault()} {Settings.UninstallHotkey} "); + + return false; + } + } + }; + } + + var uninstallSearch = search.Replace(Settings.UninstallHotkey, string.Empty).TrimStart(); + var results= Context.API .GetAllPlugins() .Select(x => @@ -180,7 +210,7 @@ namespace Flow.Launcher.Plugin.PluginsManager }) .ToList(); - return Search(results, search); + return Search(results, uninstallSearch); } private void Uninstall(PluginMetadata plugin) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs new file mode 100644 index 000000000..0c647e6ae --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Flow.Launcher.Plugin.PluginsManager +{ + internal class Settings + { + internal string UninstallHotkey { get; set; } = "uninstall"; + } +} From 4c773dbaa1842f15e4890139216637a83dacdcb2 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 21:21:48 +1100 Subject: [PATCH 129/146] clean up, no code changes --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index d5271437c..80fd12820 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -1,15 +1,10 @@ using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Linq; using System.Text; using JetBrains.Annotations; -using Flow.Launcher.Infrastructure.Logger; -using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Infrastructure.UserSettings; using ToolGood.Words.Pinyin; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Localization; namespace Flow.Launcher.Infrastructure { @@ -28,7 +23,6 @@ namespace Flow.Launcher.Infrastructure _settings = settings ?? throw new ArgumentNullException(nameof(settings)); } - public string Translate(string content) { if (_settings.ShouldUsePinyin) @@ -40,7 +34,6 @@ namespace Flow.Launcher.Infrastructure var resultList = WordsHelper.GetPinyinList(content); StringBuilder resultBuilder = new StringBuilder(); - for (int i = 0; i < resultList.Length; i++) { @@ -71,7 +64,6 @@ namespace Flow.Launcher.Infrastructure } } - return _pinyinCache[content] = resultBuilder.ToString(); } else From 10dea22588894f6e57e1a81d5b8430f2dbc04b5b Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 15 Dec 2020 07:17:19 +1100 Subject: [PATCH 130/146] add link to website in readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 94d59bb93..206f3f7d9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@

- + + +

![Maintenance](https://img.shields.io/maintenance/yes/2020) From 24372eb76d5ddebdfa255adad791514c7d041bca Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 15 Dec 2020 20:10:59 +1100 Subject: [PATCH 131/146] installation and uninstallation restart after done --- .../Languages/en.xaml | 6 ++--- .../PluginsManager.cs | 24 +++++++------------ 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index fc13f0c2f..7f8557c28 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml @@ -6,13 +6,11 @@ Downloading plugin Please wait... Successfully downloaded - Do you want to uninstall the following plugin?{0}{1}{2} by {3} - Do you want to install the following plugin?{0}{1}{2} by {3} + {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. Plugin Install Plugin Uninstall Install failed: unable to find the plugin.json metadata file from the new plugin - You have installed plugin {0} successfully.{1}Would you like to restart Flow Launcher to take effect? - You have uninstalled plugin {0} successfully.{1}Would you like to restart Flow Launcher to take effect? diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index fc4abc800..c141916aa 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -36,8 +36,8 @@ namespace Flow.Launcher.Plugin.PluginsManager } var message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_prompt"), - Environment.NewLine, Environment.NewLine, - plugin.Name, plugin.Author); + plugin.Name, plugin.Author, + Environment.NewLine, Environment.NewLine); if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo) == MessageBoxResult.No) return; @@ -156,12 +156,8 @@ namespace Flow.Launcher.Plugin.PluginsManager string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}"); Directory.Move(pluginFolderPath, newPluginPath); - - if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_successandrestart"), - plugin.Name, Environment.NewLine), - Context.API.GetTranslation("plugin_pluginsmanager_install_title"), - MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) - Context.API.RestartApp(); + + Context.API.RestartApp(); } internal List RequestUninstall(string search) @@ -216,19 +212,15 @@ namespace Flow.Launcher.Plugin.PluginsManager private void Uninstall(PluginMetadata plugin) { string message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_prompt"), - Environment.NewLine, Environment.NewLine, - plugin.Name, plugin.Author); + plugin.Name, plugin.Author, + Environment.NewLine, Environment.NewLine); if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_uninstall_title"), MessageBoxButton.YesNo) == MessageBoxResult.Yes) { using var _ = File.CreateText(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")); - - if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_successandrestart"), - plugin.Name, Environment.NewLine), - Context.API.GetTranslation("plugin_pluginsmanager_uninstall_title"), - MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) - Context.API.RestartApp(); + + Context.API.RestartApp(); } } } From 1fabbe9ead0ab6abc5dba845094b0d0ba5ddba2d Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 15 Dec 2020 20:13:02 +1100 Subject: [PATCH 132/146] PluginsManager version bump --- Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index 327011ac3..0353fffcc 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json @@ -6,7 +6,7 @@ "Name": "Plugins Manager", "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", "Author": "Jeremy Wu", - "Version": "1.0.0", + "Version": "1.1.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", From 006eac23d4ddad8d6a7ac7ba21d0c9bd3f06862f Mon Sep 17 00:00:00 2001 From: Zero Date: Tue, 15 Dec 2020 20:36:03 +0800 Subject: [PATCH 133/146] :page_facing_up: wox -> flow, update owner --- LICENSE | 46 +--------------------------------------------- README.md | 7 ------- attribution.md | 6 ++++++ 3 files changed, 7 insertions(+), 52 deletions(-) create mode 100644 attribution.md diff --git a/LICENSE b/LICENSE index b4ba8d542..8be14c31d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,50 +1,6 @@ -FlowLauncher are licensed under the terms of the MIT license, reproduced below. - - -A. HISTORY OF THE SOFTWARE -========================== - -- Copyright (c) 2015-2019 Wox -- Copyright (c) 2019-2020+ Flow-Launcher - -Flow's roots came from a rebrand of the JJW24/Wox fork and WoX. -A big thank you and all credits to Bao, the author of WoX, -and its contrbutors for all the amazing work. -The JJW24/Wox fork started adding new changes on top of -main WoX repo's code base from release v1.3.524. -Flow is a continuation of the work from JJW24/Wox - - -B. FlowLauncher LICENSE -========================== - -The MIT License (MIT) - -Copyright (c) 2019-2020+ Flow-Launcher - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -C. Wox LICENSE -========================== - The MIT License (MIT) +Copyright (c) 2019 Flow-Launcher Copyright (c) 2015 Wox Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/README.md b/README.md index 206f3f7d9..f0c08d8a0 100644 --- a/README.md +++ b/README.md @@ -80,10 +80,3 @@ Install .Net Core 3.1 SDK via Visual Studio installer or manually from [here](ht ## Documentation [Wiki](https://github.com/Flow-Launcher/Flow.Launcher/wiki) - -## A history of the flow -Flow's roots came from a rebrand of the [JJW24/Wox fork](https://github.com/jjw24/Wox/issues/156) and WoX. - -A big thank you and all credits to [Bao](https://github.com/bao-qian), the author of WoX, and its contrbutors for all the amazing work. - -The JJW24/Wox fork started adding new changes on top of main WoX repo's code base from release v1.3.524. Flow is a continuation of the work from JJW24/Wox diff --git a/attribution.md b/attribution.md new file mode 100644 index 000000000..c47542d6a --- /dev/null +++ b/attribution.md @@ -0,0 +1,6 @@ +Flow's roots came from a rebrand of the [JJW24/Wox fork](https://github.com/jjw24/Wox/issues/156) and [WoX](https://github.com/Wox-launcher/Wox). + +A big thank you and all credits to [Bao](https://github.com/bao-qian), the author of WoX, and its contributors for all the amazing work. + +The JJW24/Wox fork started adding new changes on top of main WoX repo's code base from release v1.3.524. +Flow is a continuation of the work from JJW24/Wox. From 88af30207c594aa99c59c17826cb3aedc6e5b849 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 16 Dec 2020 21:52:00 +1100 Subject: [PATCH 134/146] add context menu for PluginsManager --- .../ContextMenu.cs | 60 ++++++++++++++++-- .../Images/request.png | Bin 0 -> 50820 bytes .../Images/sourcecode.png | Bin 0 -> 11842 bytes .../Images/website.png | Bin 0 -> 133947 bytes .../Languages/en.xaml | 8 +++ .../PluginsManager.cs | 3 +- 6 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 Plugins/Flow.Launcher.Plugin.PluginsManager/Images/request.png create mode 100644 Plugins/Flow.Launcher.Plugin.PluginsManager/Images/sourcecode.png create mode 100644 Plugins/Flow.Launcher.Plugin.PluginsManager/Images/website.png diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs index d26c1ead4..f071e0e98 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs @@ -1,4 +1,5 @@ using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.Plugin.PluginsManager.Models; using System; using System.Collections.Generic; using System.Text; @@ -19,11 +20,60 @@ namespace Flow.Launcher.Plugin.PluginsManager public List LoadContextMenus(Result selectedResult) { - // Open website - // Go to source code - // Report an issue? - // Request a feature? - return new List(); + var pluginManifestInfo = selectedResult.ContextData as UserPlugin; + + return new List + { + new Result + { + Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_openwebsite_title"), + SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_openwebsite_subtitle"), + IcoPath = "Images\\website.png", + Action = _ => + { + SharedCommands.SearchWeb.NewBrowserWindow(pluginManifestInfo.Website); + return true; + } + }, + new Result + { + Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_title"), + SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_subtitle"), + IcoPath = "Images\\sourcecode.png", + Action = _ => + { + SharedCommands.SearchWeb.NewBrowserWindow(pluginManifestInfo.UrlSourceCode); + return true; + } + }, + new Result + { + Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_newissue_title"), + SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_newissue_subtitle"), + IcoPath = "Images\\request.png", + Action = _ => + { + // standard UrlSourceCode format in PluginsManifest's plugins.json file: https://github.com/jjw24/WoxDictionary/tree/master + var link = pluginManifestInfo.UrlSourceCode.StartsWith("https://github.com") + ? pluginManifestInfo.UrlSourceCode.Replace("/tree/master", "/issues/new/choose") + : pluginManifestInfo.UrlSourceCode; + + SharedCommands.SearchWeb.NewBrowserWindow(link); + return true; + } + }, + new Result + { + Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_title"), + SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_subtitle"), + IcoPath = selectedResult.IcoPath, + Action = _ => + { + SharedCommands.SearchWeb.NewBrowserWindow("https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest"); + return true; + } + } + }; } } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/request.png b/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/request.png new file mode 100644 index 0000000000000000000000000000000000000000..a9126cb9bd8e06e3a0772e6405cd0e87c053c265 GIT binary patch literal 50820 zcmeFZ`(KRt|37|JRJMaGk{H!CBP3KbAST4o|0*lulj*`o%kam99X4xi2%I`uEy(3?J(lI&aw|+&NtI{Y!g(yUwmhHDi5Ik$vC) zOqE4_zp7*CxW!Ev!u#U!i+CAX){cig+sWl!;+{*g_BSjq�~L-@m>Yh>ChJ?fcWH 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 U3ySeQFB**(xMcq6d2zq|C#DQg!2kdN literal 0 HcmV?d00001 diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/sourcecode.png b/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/sourcecode.png new file mode 100644 index 0000000000000000000000000000000000000000..8efbdaa487d0ab825010fa3f3e7331824fd6f207 GIT binary patch literal 11842 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 literal 0 HcmV?d00001 diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index fc13f0c2f..14fc2d586 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml @@ -20,5 +20,13 @@ Management of installing, uninstalling or updating Flow Launcher plugins + Open website + Visit the plugin's website + See source code + See the plugin's source code + Suggest an enhancement or submit an issue + Suggest an enhancement or submit an issue to the plugin developer + Go to Flow's plugins repository + Visit the PluginsManifest repository to see comunity-made plugin submissions \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index fc4abc800..3ccf696cc 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -115,7 +115,8 @@ namespace Flow.Launcher.Plugin.PluginsManager InstallOrUpdate(x); return true; - } + }, + ContextData = x }) .ToList(); From 407ff8266661c67f58bd7bd0682228d0ef6476e7 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 16 Dec 2020 21:53:02 +1100 Subject: [PATCH 135/146] version bump for PluginsManager --- Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index 0353fffcc..73e03d525 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json @@ -6,7 +6,7 @@ "Name": "Plugins Manager", "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", "Author": "Jeremy Wu", - "Version": "1.1.0", + "Version": "1.2.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", From 919f72ba62e1b1a6fdad77d8f0c3bc74e26caed9 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 17 Dec 2020 06:31:33 +1100 Subject: [PATCH 136/146] use open tab in browser --- Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs index f071e0e98..76cb0f86b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/ContextMenu.cs @@ -31,7 +31,7 @@ namespace Flow.Launcher.Plugin.PluginsManager IcoPath = "Images\\website.png", Action = _ => { - SharedCommands.SearchWeb.NewBrowserWindow(pluginManifestInfo.Website); + SharedCommands.SearchWeb.NewTabInBrowser(pluginManifestInfo.Website); return true; } }, @@ -42,7 +42,7 @@ namespace Flow.Launcher.Plugin.PluginsManager IcoPath = "Images\\sourcecode.png", Action = _ => { - SharedCommands.SearchWeb.NewBrowserWindow(pluginManifestInfo.UrlSourceCode); + SharedCommands.SearchWeb.NewTabInBrowser(pluginManifestInfo.UrlSourceCode); return true; } }, From f12ea653d29fe2152293460f72483ae397551d74 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 17 Dec 2020 18:54:30 +1100 Subject: [PATCH 137/146] move autocomplete to method --- .../PluginsManager.cs | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index c141916aa..ea94ab6ef 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -42,7 +42,7 @@ namespace Flow.Launcher.Plugin.PluginsManager if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo) == MessageBoxResult.No) return; - var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip"); + var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}-{plugin.Version}.zip"); try { @@ -65,9 +65,9 @@ namespace Flow.Launcher.Plugin.PluginsManager Application.Current.Dispatcher.Invoke(() => Install(plugin, filePath)); } - internal void Update() + internal void Update(string search) { - throw new NotImplementedException(); + } internal bool PluginExists(string id) @@ -75,12 +75,6 @@ namespace Flow.Launcher.Plugin.PluginsManager return Context.API.GetAllPlugins().Any(x => x.Metadata.ID == id); } - internal void PluginsManifestSiteOpen() - { - //Open from context menu https://git.vcmq.workers.dev/Flow-Launcher/Flow.Launcher.PluginsManifest - throw new NotImplementedException(); - } - internal List Search(List results, string searchName) { if (string.IsNullOrEmpty(searchName)) @@ -162,29 +156,13 @@ namespace Flow.Launcher.Plugin.PluginsManager internal List RequestUninstall(string search) { - if (!string.IsNullOrEmpty(search) - && Settings.UninstallHotkey.StartsWith(search) - && (Settings.UninstallHotkey != search || !search.StartsWith(Settings.UninstallHotkey))) - { - return - new List - { - new Result - { - Title = "Uninstall", - IcoPath = icoPath, - SubTitle = "Select a plugin to uninstall", - Action = e => - { - Context - .API - .ChangeQuery($"{Context.CurrentPluginMetadata.ActionKeywords.FirstOrDefault()} {Settings.UninstallHotkey} "); + var autocompletedResults = AutoCompleteReturnAllResults(search, + Settings.UninstallHotkey, + "Uninstall", + "Select a plugin to uninstall"); - return false; - } - } - }; - } + if (autocompletedResults.Any()) + return autocompletedResults; var uninstallSearch = search.Replace(Settings.UninstallHotkey, string.Empty).TrimStart(); @@ -223,5 +201,34 @@ namespace Flow.Launcher.Plugin.PluginsManager Context.API.RestartApp(); } } + + private List AutoCompleteReturnAllResults(string search, string hotkey, string title, string subtitle) + { + if (!string.IsNullOrEmpty(search) + && hotkey.StartsWith(search) + && (hotkey != search || !search.StartsWith(hotkey))) + { + return + new List + { + new Result + { + Title = title, + IcoPath = icoPath, + SubTitle = subtitle, + Action = e => + { + Context + .API + .ChangeQuery($"{Context.CurrentPluginMetadata.ActionKeywords.FirstOrDefault()} {hotkey} "); + + return false; + } + } + }; + } + + return new List(); + } } } From df454778ec2d6fedad6e3b57d1e39a5b5acc8879 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 17 Dec 2020 19:00:27 +1100 Subject: [PATCH 138/146] update plugin containing folder name from id to version --- Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index ea94ab6ef..1b13dabf8 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -147,7 +147,7 @@ namespace Flow.Launcher.Plugin.PluginsManager return; } - string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}"); + string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}-{plugin.Version}"); Directory.Move(pluginFolderPath, newPluginPath); From 7e8c49502e38e9473affba6f57a793a6e89e21a5 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 17 Dec 2020 20:37:01 +1100 Subject: [PATCH 139/146] add plugin update call --- .../Languages/en.xaml | 5 + .../Main.cs | 8 +- .../Models/UserPlugin.cs | 5 +- .../PluginsManager.cs | 110 ++++++++++++++---- .../Settings.cs | 4 +- 5 files changed, 105 insertions(+), 27 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index 7f8557c28..f69f23f6b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml @@ -11,6 +11,11 @@ Plugin Install Plugin Uninstall Install failed: unable to find the plugin.json metadata file from the new plugin + No update available + All plugins are up to date + {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + Plugin Update + diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs index 58ec5005f..43f92e7b9 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs @@ -42,9 +42,13 @@ namespace Flow.Launcher.Plugin.PluginsManager var pluginManager = new PluginsManager(Context, Settings); if (!string.IsNullOrEmpty(search) - && ($"{Settings.UninstallHotkey} ".StartsWith(search) || search.StartsWith($"{Settings.UninstallHotkey} "))) + && ($"{Settings.HotkeyUninstall} ".StartsWith(search) || search.StartsWith($"{Settings.HotkeyUninstall} "))) return pluginManager.RequestUninstall(search); - + + if (!string.IsNullOrEmpty(search) + && ($"{Settings.HotkeyUpdate} ".StartsWith(search) || search.StartsWith($"{Settings.HotkeyUpdate} "))) + return pluginManager.RequestUpdate(search); + return pluginManager.RequestInstallOrUpdate(search); } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/UserPlugin.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/UserPlugin.cs index 3bc44e0f6..c1af3014b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/UserPlugin.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Models/UserPlugin.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - + namespace Flow.Launcher.Plugin.PluginsManager.Models { public class UserPlugin diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 1b13dabf8..37051e4da 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -62,12 +62,82 @@ namespace Flow.Launcher.Plugin.PluginsManager Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "PluginDownload"); } - Application.Current.Dispatcher.Invoke(() => Install(plugin, filePath)); + Application.Current.Dispatcher.Invoke(() => { Install(plugin, filePath); Context.API.RestartApp(); }); } - internal void Update(string search) + internal List RequestUpdate(string search) { + var autocompletedResults = AutoCompleteReturnAllResults(search, + Settings.HotkeyUpdate, + "Update", + "Select a plugin to update"); + if (autocompletedResults.Any()) + return autocompletedResults; + + var uninstallSearch = search.Replace(Settings.HotkeyUpdate, string.Empty).TrimStart(); + + + var resultsForUpdate = + from existingPlugin in Context.API.GetAllPlugins() + join pluginFromManifest in pluginsManifest.UserPlugins + on existingPlugin.Metadata.ID equals pluginFromManifest.ID + where existingPlugin.Metadata.Version != pluginFromManifest.Version + select + new + { + pluginFromManifest.Name, + pluginFromManifest.Author, + CurrentVersion = existingPlugin.Metadata.Version, + NewVersion = pluginFromManifest.Version, + existingPlugin.Metadata.IcoPath, + PluginExistingMetadata = existingPlugin.Metadata, + PluginNewUserPlugin = pluginFromManifest + }; + + if (!resultsForUpdate.Any()) + return new List { + new Result + { + Title = Context.API.GetTranslation("plugin_pluginsmanager_update_noresult_title"), + SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_update_noresult_subtitle"), + IcoPath = icoPath + }}; + + + var results = resultsForUpdate + .Select(x => + new Result + { + Title = $"{x.Name} by {x.Author}", + SubTitle = $"Update from version {x.CurrentVersion} to {x.NewVersion}", + IcoPath = x.IcoPath, + Action = e => + { + string message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_update_prompt"), + x.Name, x.Author, + Environment.NewLine, Environment.NewLine); + + if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_update_title"), + MessageBoxButton.YesNo) == MessageBoxResult.Yes) + { + Uninstall(x.PluginExistingMetadata); + + var downloadToFilePath = Path.Combine(DataLocation.PluginsDirectory, $"{x.Name}-{x.NewVersion}.zip"); + Http.Download(x.PluginNewUserPlugin.UrlDownload, downloadToFilePath); + Install(x.PluginNewUserPlugin, downloadToFilePath); + + Context.API.RestartApp(); + + return true; + } + + return false; + } + }) + .ToList(); + + return Search(results, uninstallSearch); } internal bool PluginExists(string id) @@ -150,21 +220,19 @@ namespace Flow.Launcher.Plugin.PluginsManager string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}-{plugin.Version}"); Directory.Move(pluginFolderPath, newPluginPath); - - Context.API.RestartApp(); } internal List RequestUninstall(string search) { var autocompletedResults = AutoCompleteReturnAllResults(search, - Settings.UninstallHotkey, + Settings.HotkeyUninstall, "Uninstall", "Select a plugin to uninstall"); if (autocompletedResults.Any()) return autocompletedResults; - var uninstallSearch = search.Replace(Settings.UninstallHotkey, string.Empty).TrimStart(); + var uninstallSearch = search.Replace(Settings.HotkeyUninstall, string.Empty).TrimStart(); var results= Context.API .GetAllPlugins() @@ -176,10 +244,21 @@ namespace Flow.Launcher.Plugin.PluginsManager IcoPath = x.Metadata.IcoPath, Action = e => { - Application.Current.MainWindow.Hide(); - Uninstall(x.Metadata); + string message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_prompt"), + x.Metadata.Name, x.Metadata.Author, + Environment.NewLine, Environment.NewLine); - return true; + if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_uninstall_title"), + MessageBoxButton.YesNo) == MessageBoxResult.Yes) + { + Application.Current.MainWindow.Hide(); + Uninstall(x.Metadata); + Context.API.RestartApp(); + + return true; + } + + return false; } }) .ToList(); @@ -189,17 +268,8 @@ namespace Flow.Launcher.Plugin.PluginsManager private void Uninstall(PluginMetadata plugin) { - string message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_prompt"), - plugin.Name, plugin.Author, - Environment.NewLine, Environment.NewLine); - - if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_uninstall_title"), - MessageBoxButton.YesNo) == MessageBoxResult.Yes) - { - using var _ = File.CreateText(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")); - - Context.API.RestartApp(); - } + // Marked for deletion. Will be deleted on next start up + using var _ = File.CreateText(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt")); } private List AutoCompleteReturnAllResults(string search, string hotkey, string title, string subtitle) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs index 0c647e6ae..e2e8d22e5 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs @@ -6,6 +6,8 @@ namespace Flow.Launcher.Plugin.PluginsManager { internal class Settings { - internal string UninstallHotkey { get; set; } = "uninstall"; + internal string HotkeyUninstall { get; set; } = "uninstall"; + + internal string HotkeyUpdate { get; set; } = "update"; } } From ceab9b2ecd8d4da48ff30c8fc8587d6df8138207 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 17 Dec 2020 20:37:24 +1100 Subject: [PATCH 140/146] PluginsManager version bump --- Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index 0353fffcc..e970e5a8e 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json @@ -6,7 +6,7 @@ "Name": "Plugins Manager", "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", "Author": "Jeremy Wu", - "Version": "1.1.0", + "Version": "1.3.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", From cca53c2a7d34d6d99c6a6dcae1ec17c018e0419f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 17 Dec 2020 21:07:47 +1100 Subject: [PATCH 141/146] add hide main window override --- .../PluginsManager.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 37051e4da..22682cae4 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -19,6 +19,21 @@ namespace Flow.Launcher.Plugin.PluginsManager private Settings Settings { get; set; } + private bool shouldHideWindow = true; + private bool ShouldHideWindow + { + set { shouldHideWindow = value; } + get + { + var setValue = shouldHideWindow; + // Default value for hide main window is true. Revert after get call. + // This ensures when set by another method to false, it is only used once. + shouldHideWindow = true; + + return setValue; + } + } + private readonly string icoPath = "Images\\pluginsmanager.png"; internal PluginsManager(PluginInitContext context, Settings settings) @@ -178,7 +193,7 @@ namespace Flow.Launcher.Plugin.PluginsManager Application.Current.MainWindow.Hide(); InstallOrUpdate(x); - return true; + return ShouldHideWindow; } }) .ToList(); From c2ca29dcdae315ddcf6735fb4b74ed7557eaa761 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 17 Dec 2020 21:37:38 +1100 Subject: [PATCH 142/146] add go to update section if update exists when install --- .../Languages/en.xaml | 2 ++ .../PluginsManager.cs | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index f69f23f6b..a5be6c63c 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml @@ -15,6 +15,8 @@ All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. Plugin Update + This plugin has an update, would you like to see it? + This plugin is already installed diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 22682cae4..dad183227 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -46,7 +46,22 @@ namespace Flow.Launcher.Plugin.PluginsManager { if (PluginExists(plugin.ID)) { - Context.API.ShowMsg("Plugin already installed"); + if (Context.API.GetAllPlugins().Any(x => x.Metadata.ID == plugin.ID && x.Metadata.Version != plugin.Version)) + { + if (MessageBox.Show(Context.API.GetTranslation("plugin_pluginsmanager_update_exists"), + Context.API.GetTranslation("plugin_pluginsmanager_update_title"), + MessageBoxButton.YesNo) == MessageBoxResult.Yes) + Context + .API + .ChangeQuery($"{Context.CurrentPluginMetadata.ActionKeywords.FirstOrDefault()} {Settings.HotkeyUpdate} {plugin.Name}"); + + Application.Current.MainWindow.Show(); + shouldHideWindow = false; + + return; + } + + Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_update_alreadyexists")); return; } From 5ab021f4449e19c5d935f96ec7f5cf835b5c2d9e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 20 Dec 2020 20:08:52 +1100 Subject: [PATCH 143/146] update per comment --- .../PluginsManager.cs | 55 +++++++++---------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index bd80b3dfd..90f3277fb 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -138,34 +138,33 @@ namespace Flow.Launcher.Plugin.PluginsManager var results = resultsForUpdate .Select(x => new Result + { + Title = $"{x.Name} by {x.Author}", + SubTitle = $"Update from version {x.CurrentVersion} to {x.NewVersion}", + IcoPath = x.IcoPath, + Action = e => { - Title = $"{x.Name} by {x.Author}", - SubTitle = $"Update from version {x.CurrentVersion} to {x.NewVersion}", - IcoPath = x.IcoPath, - Action = e => + string message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_update_prompt"), + x.Name, x.Author, + Environment.NewLine, Environment.NewLine); + + if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_update_title"), + MessageBoxButton.YesNo) == MessageBoxResult.Yes) { - string message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_update_prompt"), - x.Name, x.Author, - Environment.NewLine, Environment.NewLine); + Uninstall(x.PluginExistingMetadata); - if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_update_title"), - MessageBoxButton.YesNo) == MessageBoxResult.Yes) - { - Uninstall(x.PluginExistingMetadata); + var downloadToFilePath = Path.Combine(DataLocation.PluginsDirectory, $"{x.Name}-{x.NewVersion}.zip"); + Http.Download(x.PluginNewUserPlugin.UrlDownload, downloadToFilePath); + Install(x.PluginNewUserPlugin, downloadToFilePath); - var downloadToFilePath = Path.Combine(DataLocation.PluginsDirectory, $"{x.Name}-{x.NewVersion}.zip"); - Http.Download(x.PluginNewUserPlugin.UrlDownload, downloadToFilePath); - Install(x.PluginNewUserPlugin, downloadToFilePath); + Context.API.RestartApp(); - Context.API.RestartApp(); - - return true; - } - - return false; + return true; } - }) - .ToList(); + + return false; + } + }); return Search(results, uninstallSearch); } @@ -175,10 +174,10 @@ namespace Flow.Launcher.Plugin.PluginsManager return Context.API.GetAllPlugins().Any(x => x.Metadata.ID == id); } - internal List Search(List results, string searchName) + internal List Search(IEnumerable results, string searchName) { if (string.IsNullOrEmpty(searchName)) - return results; + return results.ToList(); return results .Where(x => @@ -211,8 +210,7 @@ namespace Flow.Launcher.Plugin.PluginsManager return ShouldHideWindow; }, ContextData = x - }) - .ToList(); + }); return Search(results, searchName); } @@ -265,7 +263,7 @@ namespace Flow.Launcher.Plugin.PluginsManager var uninstallSearch = search.Replace(Settings.HotkeyUninstall, string.Empty).TrimStart(); - var results= Context.API + var results = Context.API .GetAllPlugins() .Select(x => new Result @@ -291,8 +289,7 @@ namespace Flow.Launcher.Plugin.PluginsManager return false; } - }) - .ToList(); + }); return Search(results, uninstallSearch); } From 3a6b6b721f697dd8fc163cf2e2590cfa187a01fd Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 20 Dec 2020 20:23:14 +1100 Subject: [PATCH 144/146] Flow.Launcher.Plugin version bump --- Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index 0f6450d18..70013c274 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -14,10 +14,10 @@ - 1.3.0 - 1.3.0 - 1.3.0 - 1.3.0 + 1.3.1 + 1.3.1 + 1.3.1 + 1.3.1 Flow.Launcher.Plugin Flow-Launcher MIT From 110cf2a60710d0d3ad06264304859ba4a6030a7f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 20 Dec 2020 20:28:30 +1100 Subject: [PATCH 145/146] version bump --- SolutionAssemblyInfo.cs | 6 +++--- appveyor.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SolutionAssemblyInfo.cs b/SolutionAssemblyInfo.cs index 018084a66..ccbfef5d0 100644 --- a/SolutionAssemblyInfo.cs +++ b/SolutionAssemblyInfo.cs @@ -16,6 +16,6 @@ using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("1.5.0")] -[assembly: AssemblyFileVersion("1.5.0")] -[assembly: AssemblyInformationalVersion("1.5.0")] \ No newline at end of file +[assembly: AssemblyVersion("1.6.0")] +[assembly: AssemblyFileVersion("1.6.0")] +[assembly: AssemblyInformationalVersion("1.6.0")] \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index f5841da3e..1f0937d6d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.5.0.{build}' +version: '1.6.0.{build}' init: - ps: | From a9a62a5847b80e008ee00b6bce7b305e17822e88 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 21 Dec 2020 08:57:22 +1100 Subject: [PATCH 146/146] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f0c08d8a0..5f3f7e1a7 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Windows may complain about security due to code not being signed, this will be c - Open flow's search window: Alt+Space is the default hotkey. - Open context menu: Ctrl+O/Shift+Enter. - Cancel/Return to previous screen: Esc. -- Install/Uninstall plugins: in the search window, type `wpm install/uninstall` + the plugin name. +- Install/Uninstall/Update plugins: in the search window, type `pm`/`pm uninstall`/`pm update` + the plugin name. - Saved user settings are located: - If using roaming: `%APPDATA%\FlowLauncher` - If using portable, by default: `%localappdata%\FlowLauncher\app-\UserData`