From d69337c17aec0a0408d374223f90233ced74e719 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 14 Dec 2020 21:05:32 +1100 Subject: [PATCH] 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"; + } +}