Skip to content

Commit d69337c

Browse files
committed
add uninstall autocomplete & move uninstall hotkey to settings
1 parent 8a86bf7 commit d69337c

File tree

3 files changed

+60
-20
lines changed

3 files changed

+60
-20
lines changed

Plugins/Flow.Launcher.Plugin.PluginsManager/Main.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,13 @@ public List<Result> LoadContextMenus(Result selectedResult)
3737

3838
public List<Result> Query(Query query)
3939
{
40-
var search = query.Search;
40+
var search = query.Search.ToLower();
4141

42-
var uninstallCmd = "uninstall";
42+
var pluginManager = new PluginsManager(Context, Settings);
4343

44-
var pluginManager = new PluginsManager(Context);
45-
46-
if (search.ToLower().StartsWith($"{uninstallCmd} ") || search.ToLower() == uninstallCmd)
47-
return pluginManager.RequestUninstall(search.Replace(uninstallCmd, string.Empty).Trim());
44+
if (!string.IsNullOrEmpty(search)
45+
&& ($"{Settings.UninstallHotkey} ".StartsWith(search) || search.StartsWith($"{Settings.UninstallHotkey} ")))
46+
return pluginManager.RequestUninstall(search);
4847

4948
return pluginManager.RequestInstallOrUpdate(search);
5049
}

Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,32 +14,36 @@ namespace Flow.Launcher.Plugin.PluginsManager
1414
internal class PluginsManager
1515
{
1616
private readonly PluginsManifest pluginsManifest;
17+
1718
private PluginInitContext Context { get; set; }
1819

20+
private Settings Settings { get; set; }
21+
1922
private readonly string icoPath = "Images\\pluginsmanager.png";
2023

21-
internal PluginsManager(PluginInitContext context)
24+
internal PluginsManager(PluginInitContext context, Settings settings)
2225
{
2326
pluginsManifest = new PluginsManifest();
2427
Context = context;
28+
Settings = settings;
2529
}
2630
internal void InstallOrUpdate(UserPlugin plugin)
2731
{
28-
if (PluginExists(plugin.ID))
32+
if (PluginExists(plugin.ID))
2933
{
3034
Context.API.ShowMsg("Plugin already installed");
3135
return;
3236
}
3337

34-
var message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_prompt"),
35-
Environment.NewLine, Environment.NewLine,
38+
var message = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_prompt"),
39+
Environment.NewLine, Environment.NewLine,
3640
plugin.Name, plugin.Author);
3741

38-
if(MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo) == MessageBoxResult.No)
42+
if (MessageBox.Show(message, Context.API.GetTranslation("plugin_pluginsmanager_install_title"), MessageBoxButton.YesNo) == MessageBoxResult.No)
3943
return;
4044

4145
var filePath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}.zip");
42-
46+
4347
try
4448
{
4549
Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"),
@@ -89,14 +93,14 @@ internal List<Result> Search(List<Result> results, string searchName)
8993
if (matchResult.IsSearchPrecisionScoreMet())
9094
x.Score = matchResult.Score;
9195

92-
return matchResult.IsSearchPrecisionScoreMet();
96+
return matchResult.IsSearchPrecisionScoreMet();
9397
})
9498
.ToList();
9599
}
96100

97101
internal List<Result> RequestInstallOrUpdate(string searchName)
98102
{
99-
var results =
103+
var results =
100104
pluginsManifest
101105
.UserPlugins
102106
.Select(x =>
@@ -122,10 +126,10 @@ private void Install(UserPlugin plugin, string downloadedFilePath)
122126
{
123127
if (!File.Exists(downloadedFilePath))
124128
return;
125-
129+
126130
var tempFolderPath = Path.Combine(Path.GetTempPath(), "flowlauncher");
127131
var tempFolderPluginPath = Path.Combine(tempFolderPath, "plugin");
128-
132+
129133
if (Directory.Exists(tempFolderPath))
130134
Directory.Delete(tempFolderPath, true);
131135

@@ -150,18 +154,44 @@ private void Install(UserPlugin plugin, string downloadedFilePath)
150154
}
151155

152156
string newPluginPath = Path.Combine(DataLocation.PluginsDirectory, $"{plugin.Name}{plugin.ID}");
153-
157+
154158
Directory.Move(pluginFolderPath, newPluginPath);
155159

156-
if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_successandrestart"),
160+
if (MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_successandrestart"),
157161
plugin.Name, Environment.NewLine),
158-
Context.API.GetTranslation("plugin_pluginsmanager_install_title"),
162+
Context.API.GetTranslation("plugin_pluginsmanager_install_title"),
159163
MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
160164
Context.API.RestartApp();
161165
}
162166

163167
internal List<Result> RequestUninstall(string search)
164168
{
169+
if (!string.IsNullOrEmpty(search)
170+
&& Settings.UninstallHotkey.StartsWith(search)
171+
&& (Settings.UninstallHotkey != search || !search.StartsWith(Settings.UninstallHotkey)))
172+
{
173+
return
174+
new List<Result>
175+
{
176+
new Result
177+
{
178+
Title = "Uninstall",
179+
IcoPath = icoPath,
180+
SubTitle = "Select a plugin to uninstall",
181+
Action = e =>
182+
{
183+
Context
184+
.API
185+
.ChangeQuery($"{Context.CurrentPluginMetadata.ActionKeywords.FirstOrDefault()} {Settings.UninstallHotkey} ");
186+
187+
return false;
188+
}
189+
}
190+
};
191+
}
192+
193+
var uninstallSearch = search.Replace(Settings.UninstallHotkey, string.Empty).TrimStart();
194+
165195
var results= Context.API
166196
.GetAllPlugins()
167197
.Select(x =>
@@ -180,7 +210,7 @@ internal List<Result> RequestUninstall(string search)
180210
})
181211
.ToList();
182212

183-
return Search(results, search);
213+
return Search(results, uninstallSearch);
184214
}
185215

186216
private void Uninstall(PluginMetadata plugin)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace Flow.Launcher.Plugin.PluginsManager
6+
{
7+
internal class Settings
8+
{
9+
internal string UninstallHotkey { get; set; } = "uninstall";
10+
}
11+
}

0 commit comments

Comments
 (0)