diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index 0c0e8ea33..fc4ff95ab 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 + Error: Unable to download the plugin {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 @@ -29,6 +30,7 @@ Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins + Unknown Author Open website diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 546b31111..f13e8d8ac 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net.Http; using System.Threading; using System.Threading.Tasks; using System.Windows; @@ -17,6 +18,8 @@ namespace Flow.Launcher.Plugin.PluginsManager { internal class PluginsManager { + const string zip = "zip"; + private PluginInitContext Context { get; set; } private Settings Settings { get; set; } @@ -161,9 +164,18 @@ namespace Flow.Launcher.Plugin.PluginsManager } catch (Exception e) { - Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_install_error_title"), + if (e is HttpRequestException) + { + MessageBox.Show(Context.API.GetTranslation("plugin_pluginsmanager_download_error"), + Context.API.GetTranslation("plugin_pluginsmanager_downloading_plugin")); + + } + else + { + Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_install_error_title"), string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_error_subtitle"), plugin.Name)); + } Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "InstallOrUpdate"); @@ -314,19 +326,21 @@ namespace Flow.Launcher.Plugin.PluginsManager internal List InstallFromWeb(string url) { - var fileName = url.Split("/").Last(); - var filePath = Path.Combine(DataLocation.PluginsDirectory, fileName); + var filename = url.Split("/").Last(); + var name = filename.Split(string.Format(".{0}", zip)).First(); + var plugin = new UserPlugin { ID = "", - Name = fileName.Split(".").First(), + Name = name, Version = string.Empty, - Author = "N/A", + Author = Context.API.GetTranslation("plugin_pluginsmanager_unknown_author"), UrlDownload = url }; + var result = new Result { - Title = fileName, + Title = filename, SubTitle = $"Download and Install from URL", IcoPath = icoPath, Action = e => @@ -342,6 +356,7 @@ namespace Flow.Launcher.Plugin.PluginsManager return ShouldHideWindow; } }; + return new List { result }; } @@ -356,6 +371,10 @@ namespace Flow.Launcher.Plugin.PluginsManager var searchNameWithoutKeyword = searchName.Replace(Settings.HotKeyInstall, string.Empty).Trim(); + if (Uri.IsWellFormedUriString(searchNameWithoutKeyword, UriKind.Absolute) + && searchNameWithoutKeyword.Split('.').Last() == zip) + return InstallFromWeb(searchNameWithoutKeyword); + var results = PluginsManifest .UserPlugins @@ -380,10 +399,6 @@ namespace Flow.Launcher.Plugin.PluginsManager ContextData = x }); - if (Uri.IsWellFormedUriString(searchNameWithoutKeyword, UriKind.Absolute)) - { - return InstallFromWeb(searchNameWithoutKeyword); - } return Search(results, searchNameWithoutKeyword); }