mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
add ability to switch off warning when unknown source
fixed search terms to show with out to lower
This commit is contained in:
parent
ebf9ef1d80
commit
a07252cc04
7 changed files with 64 additions and 23 deletions
|
|
@ -10,6 +10,7 @@
|
||||||
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart.</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_prompt">{0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_prompt">{0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart.</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_title">Plugin Install</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_title">Plugin Install</system:String>
|
||||||
|
<system:String x:Key="plugin_pluginsmanager_install_from_web">Download and install {0}</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_uninstall_title">Plugin Uninstall</system:String>
|
<system:String x:Key="plugin_pluginsmanager_uninstall_title">Plugin Uninstall</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_in_progress">Plugin installation in progress. Please wait...</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_in_progress">Plugin installation in progress. Please wait...</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_success_restart">Plugin successfully installed. Restarting Flow, please wait...</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_success_restart">Plugin successfully installed. Restarting Flow, please wait...</system:String>
|
||||||
|
|
@ -25,7 +26,9 @@
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_alreadyexists">This plugin is already installed</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_alreadyexists">This plugin is already installed</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_failed_title">Plugin Manifest Download Failed</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_failed_title">Plugin Manifest Download Failed</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String>
|
||||||
|
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Installing from an unknown source</system:String>
|
||||||
|
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings)</system:String>
|
||||||
|
|
||||||
<!--Controls-->
|
<!--Controls-->
|
||||||
|
|
||||||
<!--Plugin Infos-->
|
<!--Plugin Infos-->
|
||||||
|
|
@ -42,5 +45,7 @@
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_newissue_subtitle">Suggest an enhancement or submit an issue to the plugin developer</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_newissue_subtitle">Suggest an enhancement or submit an issue to the plugin developer</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_title">Go to Flow's plugins repository</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_title">Go to Flow's plugins repository</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_subtitle">Visit the PluginsManifest repository to see community-made plugin submissions</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_subtitle">Visit the PluginsManifest repository to see community-made plugin submissions</system:String>
|
||||||
|
|
||||||
|
<!--Settings menu items-->
|
||||||
|
<system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Install from unknown source warning</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
@ -55,7 +55,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
|
|
||||||
public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
|
public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
|
||||||
{
|
{
|
||||||
var search = query.Search.ToLower();
|
var search = query.Search;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(search))
|
if (string.IsNullOrWhiteSpace(search))
|
||||||
return pluginManager.GetDefaultHotKeys();
|
return pluginManager.GetDefaultHotKeys();
|
||||||
|
|
@ -70,9 +70,13 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
|
|
||||||
return search switch
|
return search switch
|
||||||
{
|
{
|
||||||
var s when s.StartsWith(Settings.HotKeyInstall) => await pluginManager.RequestInstallOrUpdate(s, token),
|
//search could be url, no need ToLower() when passed in
|
||||||
var s when s.StartsWith(Settings.HotkeyUninstall) => pluginManager.RequestUninstall(s),
|
var s when s.StartsWith(Settings.HotKeyInstall, StringComparison.OrdinalIgnoreCase)
|
||||||
var s when s.StartsWith(Settings.HotkeyUpdate) => await pluginManager.RequestUpdate(s, token),
|
=> await pluginManager.RequestInstallOrUpdate(search, token),
|
||||||
|
var s when s.StartsWith(Settings.HotkeyUninstall, StringComparison.OrdinalIgnoreCase)
|
||||||
|
=> pluginManager.RequestUninstall(search),
|
||||||
|
var s when s.StartsWith(Settings.HotkeyUpdate, StringComparison.OrdinalIgnoreCase)
|
||||||
|
=> await pluginManager.RequestUpdate(search, token),
|
||||||
_ => pluginManager.GetDefaultHotKeys().Where(hotkey =>
|
_ => pluginManager.GetDefaultHotKeys().Where(hotkey =>
|
||||||
{
|
{
|
||||||
hotkey.Score = StringMatcher.FuzzySearch(search, hotkey.Title).Score;
|
hotkey.Score = StringMatcher.FuzzySearch(search, hotkey.Title).Score;
|
||||||
|
|
|
||||||
|
|
@ -166,17 +166,12 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
if (e is HttpRequestException)
|
if (e is HttpRequestException)
|
||||||
{
|
|
||||||
MessageBox.Show(Context.API.GetTranslation("plugin_pluginsmanager_download_error"),
|
MessageBox.Show(Context.API.GetTranslation("plugin_pluginsmanager_download_error"),
|
||||||
Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"));
|
Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin"));
|
||||||
|
|
||||||
}
|
Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_install_error_title"),
|
||||||
else
|
|
||||||
{
|
|
||||||
Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_install_error_title"),
|
|
||||||
string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_error_subtitle"),
|
string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_error_subtitle"),
|
||||||
plugin.Name));
|
plugin.Name));
|
||||||
}
|
|
||||||
|
|
||||||
Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "InstallOrUpdate");
|
Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "InstallOrUpdate");
|
||||||
|
|
||||||
|
|
@ -206,7 +201,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
if (autocompletedResults.Any())
|
if (autocompletedResults.Any())
|
||||||
return autocompletedResults;
|
return autocompletedResults;
|
||||||
|
|
||||||
var uninstallSearch = search.Replace(Settings.HotkeyUpdate, string.Empty).TrimStart();
|
var uninstallSearch = search.Replace(Settings.HotkeyUpdate, string.Empty, StringComparison.OrdinalIgnoreCase).TrimStart();
|
||||||
|
|
||||||
var resultsForUpdate =
|
var resultsForUpdate =
|
||||||
from existingPlugin in Context.API.GetAllPlugins()
|
from existingPlugin in Context.API.GetAllPlugins()
|
||||||
|
|
@ -341,26 +336,46 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
|
|
||||||
var result = new Result
|
var result = new Result
|
||||||
{
|
{
|
||||||
Title = filename,
|
Title = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_from_web"), filename),
|
||||||
SubTitle = $"Download and Install from URL",
|
SubTitle = plugin.UrlDownload,
|
||||||
IcoPath = icoPath,
|
IcoPath = icoPath,
|
||||||
Action = e =>
|
Action = e =>
|
||||||
{
|
{
|
||||||
if (e.SpecialKeyState.CtrlPressed)
|
if (e.SpecialKeyState.CtrlPressed)
|
||||||
{
|
{
|
||||||
SearchWeb.NewTabInBrowser(url);
|
SearchWeb.NewTabInBrowser(plugin.UrlDownload);
|
||||||
return ShouldHideWindow;
|
return ShouldHideWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Settings.WarnFromUnknownSource)
|
||||||
|
{
|
||||||
|
if (!InstallSourceKnown(plugin.UrlDownload)
|
||||||
|
&& MessageBox.Show(string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_unknown_source_warning"),
|
||||||
|
Environment.NewLine),
|
||||||
|
Context.API.GetTranslation("plugin_pluginsmanager_install_unknown_source_warning_title"),
|
||||||
|
MessageBoxButton.YesNo) == MessageBoxResult.No)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Application.Current.MainWindow.Hide();
|
Application.Current.MainWindow.Hide();
|
||||||
_ = InstallOrUpdate(plugin);
|
_ = InstallOrUpdate(plugin);
|
||||||
|
|
||||||
return ShouldHideWindow;
|
return ShouldHideWindow;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return new List<Result> { result };
|
return new List<Result> { result };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool InstallSourceKnown(string url)
|
||||||
|
{
|
||||||
|
var author = url.Split('/')[3];
|
||||||
|
var acceptedSource = "https://github.com";
|
||||||
|
var contructedUrlPart = string.Format("{0}/{1}/", acceptedSource, author);
|
||||||
|
|
||||||
|
return url.StartsWith(acceptedSource) && Context.API.GetAllPlugins().Any(x => x.Metadata.Website.StartsWith(contructedUrlPart));
|
||||||
|
}
|
||||||
|
|
||||||
internal async ValueTask<List<Result>> RequestInstallOrUpdate(string searchName, CancellationToken token)
|
internal async ValueTask<List<Result>> RequestInstallOrUpdate(string searchName, CancellationToken token)
|
||||||
{
|
{
|
||||||
if (!PluginsManifest.UserPlugins.Any())
|
if (!PluginsManifest.UserPlugins.Any())
|
||||||
|
|
@ -370,7 +385,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
|
|
||||||
token.ThrowIfCancellationRequested();
|
token.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
var searchNameWithoutKeyword = searchName.Replace(Settings.HotKeyInstall, string.Empty).Trim();
|
var searchNameWithoutKeyword = searchName.Replace(Settings.HotKeyInstall, string.Empty, StringComparison.OrdinalIgnoreCase).Trim();
|
||||||
|
|
||||||
if (Uri.IsWellFormedUriString(searchNameWithoutKeyword, UriKind.Absolute)
|
if (Uri.IsWellFormedUriString(searchNameWithoutKeyword, UriKind.Absolute)
|
||||||
&& searchNameWithoutKeyword.Split('.').Last() == zip)
|
&& searchNameWithoutKeyword.Split('.').Last() == zip)
|
||||||
|
|
@ -468,7 +483,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
if (autocompletedResults.Any())
|
if (autocompletedResults.Any())
|
||||||
return autocompletedResults;
|
return autocompletedResults;
|
||||||
|
|
||||||
var uninstallSearch = search.Replace(Settings.HotkeyUninstall, string.Empty).TrimStart();
|
var uninstallSearch = search.Replace(Settings.HotkeyUninstall, string.Empty, StringComparison.OrdinalIgnoreCase).TrimStart();
|
||||||
|
|
||||||
var results = Context.API
|
var results = Context.API
|
||||||
.GetAllPlugins()
|
.GetAllPlugins()
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,11 @@ namespace Flow.Launcher.Plugin.PluginsManager
|
||||||
internal class Settings
|
internal class Settings
|
||||||
{
|
{
|
||||||
internal string HotKeyInstall { get; set; } = "install";
|
internal string HotKeyInstall { get; set; } = "install";
|
||||||
|
|
||||||
internal string HotkeyUninstall { get; set; } = "uninstall";
|
internal string HotkeyUninstall { get; set; } = "uninstall";
|
||||||
|
|
||||||
internal string HotkeyUpdate { get; set; } = "update";
|
internal string HotkeyUpdate { get; set; } = "update";
|
||||||
|
|
||||||
|
public bool WarnFromUnknownSource { get; set; } = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,5 +14,11 @@ namespace Flow.Launcher.Plugin.PluginsManager.ViewModels
|
||||||
Context = context;
|
Context = context;
|
||||||
Settings = settings;
|
Settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool WarnFromUnknownSource
|
||||||
|
{
|
||||||
|
get => Settings.WarnFromUnknownSource;
|
||||||
|
set => Settings.WarnFromUnknownSource = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,18 @@
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:Flow.Launcher.Plugin.PluginsManager.ViewModels"
|
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="450" d:DesignWidth="800">
|
d:DesignHeight="450" d:DesignWidth="800">
|
||||||
<Grid>
|
<Grid Margin="70 15 0 15">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="250"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Text="{DynamicResource plugin_pluginsmanager_plugin_settings_unknown_source}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
FontSize="14"/>
|
||||||
|
<CheckBox Grid.Column="1" IsChecked="{Binding WarnFromUnknownSource}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ namespace Flow.Launcher.Plugin.PluginsManager.Views
|
||||||
|
|
||||||
this.viewModel = viewModel;
|
this.viewModel = viewModel;
|
||||||
|
|
||||||
//RefreshView();
|
this.DataContext = viewModel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue