From 56bdfa72d11268da05c6d46d33e897984425281d Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 17:24:59 +0800 Subject: [PATCH 01/22] Improve code quality --- Plugins/Flow.Launcher.Plugin.Url/Main.cs | 25 ++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Url/Main.cs b/Plugins/Flow.Launcher.Plugin.Url/Main.cs index 9fa52c8da54..cd45069982a 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Url/Main.cs @@ -39,10 +39,12 @@ public class Main : IPlugin, IPluginI18n // resource path "(?:/\\S*)?" + "$"; - Regex reg = new Regex(urlPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); - private PluginInitContext context; - private Settings _settings; - + private readonly Regex reg = new Regex(urlPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); + + public static PluginInitContext Context { get; private set; } + + public static Settings Settings { get; private set; } + public List Query(Query query) { var raw = query.Search; @@ -53,7 +55,7 @@ public List Query(Query query) new Result { Title = raw, - SubTitle = string.Format(context.API.GetTranslation("flowlauncher_plugin_url_open_url"),raw), + SubTitle = string.Format(Context.API.GetTranslation("flowlauncher_plugin_url_open_url"),raw), IcoPath = "Images/url.png", Score = 8, Action = _ => @@ -64,13 +66,13 @@ public List Query(Query query) } try { - context.API.OpenUrl(raw); + Context.API.OpenUrl(raw); return true; } catch(Exception) { - context.API.ShowMsgError(string.Format(context.API.GetTranslation("flowlauncher_plugin_url_cannot_open_url"), raw)); + Context.API.ShowMsgError(string.Format(Context.API.GetTranslation("flowlauncher_plugin_url_cannot_open_url"), raw)); return false; } } @@ -99,19 +101,18 @@ public bool IsURL(string raw) public void Init(PluginInitContext context) { - this.context = context; - - _settings = context.API.LoadSettingJsonStorage(); + Context = context; + Settings = context.API.LoadSettingJsonStorage(); } public string GetTranslatedPluginTitle() { - return context.API.GetTranslation("flowlauncher_plugin_url_plugin_name"); + return Context.API.GetTranslation("flowlauncher_plugin_url_plugin_name"); } public string GetTranslatedPluginDescription() { - return context.API.GetTranslation("flowlauncher_plugin_url_plugin_description"); + return Context.API.GetTranslation("flowlauncher_plugin_url_plugin_description"); } } } From f848d1b7b21c55d645f8d6cd8ae61aaabd7dde2d Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 17:26:19 +0800 Subject: [PATCH 02/22] Improve code quality --- Plugins/Flow.Launcher.Plugin.Url/Main.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Url/Main.cs b/Plugins/Flow.Launcher.Plugin.Url/Main.cs index cd45069982a..a02c6e1d80f 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Url/Main.cs @@ -7,7 +7,7 @@ namespace Flow.Launcher.Plugin.Url public class Main : IPlugin, IPluginI18n { //based on https://gist.github.com/dperini/729294 - private const string urlPattern = "^" + + private const string UrlPattern = "^" + // protocol identifier "(?:(?:https?|ftp)://|)" + // user:pass authentication @@ -39,7 +39,7 @@ public class Main : IPlugin, IPluginI18n // resource path "(?:/\\S*)?" + "$"; - private readonly Regex reg = new Regex(urlPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); + private readonly Regex UrlRegex = new(UrlPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); public static PluginInitContext Context { get; private set; } @@ -50,9 +50,9 @@ public List Query(Query query) var raw = query.Search; if (IsURL(raw)) { - return new List - { - new Result + return + [ + new() { Title = raw, SubTitle = string.Format(Context.API.GetTranslation("flowlauncher_plugin_url_open_url"),raw), @@ -60,7 +60,7 @@ public List Query(Query query) Score = 8, Action = _ => { - if (!raw.ToLower().StartsWith("http")) + if (!raw.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { raw = "http://" + raw; } @@ -77,16 +77,17 @@ public List Query(Query query) } } } - }; + ]; } - return new List(0); + + return []; } public bool IsURL(string raw) { raw = raw.ToLower(); - if (reg.Match(raw).Value == raw) return true; + if (UrlRegex.Match(raw).Value == raw) return true; if (raw == "localhost" || raw.StartsWith("localhost:") || raw == "http://localhost" || raw.StartsWith("http://localhost:") || From c9ca9ad4ba6350d0e514116e7501d412321a82fd Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 17:30:08 +0800 Subject: [PATCH 03/22] Add more settings --- Plugins/Flow.Launcher.Plugin.Url/Settings.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Url/Settings.cs b/Plugins/Flow.Launcher.Plugin.Url/Settings.cs index a8d89e27f33..c0b96b7a4f6 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Url/Settings.cs @@ -2,8 +2,12 @@ { public class Settings { - public string BrowserPath { get; set; } + public bool UseCustomBrowser { get; set; } = false; - public bool OpenInNewBrowserWindow { get; set; } = true; + public string BrowserPath { get; set; } = string.Empty; + + public bool OpenInNewBrowserWindow { get; set; } = false; + + public bool OpenInPrivateMode { get; set; } = false; } } From 2d5626b0cd9b628b0627ec5150e49b70bf7f9e59 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 17:30:20 +0800 Subject: [PATCH 04/22] Use more settings --- Plugins/Flow.Launcher.Plugin.Url/Main.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Url/Main.cs b/Plugins/Flow.Launcher.Plugin.Url/Main.cs index a02c6e1d80f..61dd0bb1568 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Url/Main.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.RegularExpressions; +using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Plugin.Url { @@ -66,8 +67,15 @@ public List Query(Query query) } try { - Context.API.OpenUrl(raw); - + var browserPath = Settings.UseCustomBrowser ? Settings.BrowserPath : string.Empty; + if (Settings.OpenInNewBrowserWindow) + { + SearchWeb.OpenInBrowserWindow(raw, browserPath, Settings.OpenInPrivateMode); + } + else + { + SearchWeb.OpenInBrowserTab(raw, browserPath, Settings.OpenInPrivateMode); + } return true; } catch(Exception) From 5976ddeb7297c021a93a8252c0886eae524639e0 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 17:54:03 +0800 Subject: [PATCH 05/22] Add more strings --- Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml index 461ccd1970b..d9855d76f52 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml @@ -1,11 +1,12 @@ - + Open search in: New Window New Tab - + Open url:{0} Can't open url:{0} @@ -15,4 +16,8 @@ Please set your browser path: Choose Application(*.exe)|*.exe|All files|*.* + + Use custom browser + + Open url in private \ No newline at end of file From 48e845c0b19d17761b3ed47d4bcdb5dcd380ed95 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 21:45:20 +0800 Subject: [PATCH 06/22] Change language strings --- Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml index d9855d76f52..73bb89376e9 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml @@ -3,10 +3,6 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> - Open search in: - New Window - New Tab - Open url:{0} Can't open url:{0} @@ -18,6 +14,6 @@ Application(*.exe)|*.exe|All files|*.* Use custom browser - - Open url in private + Open url in new window + Open url in private \ No newline at end of file From 1dc1643071b85df1a0b59a31da9b19544af33d34 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 21:46:55 +0800 Subject: [PATCH 07/22] Change language strings --- Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml index 73bb89376e9..a40c18dc8a8 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml @@ -9,11 +9,11 @@ URL Open the typed URL from Flow Launcher - Please set your browser path: Choose Application(*.exe)|*.exe|All files|*.* Use custom browser + Browser path: Open url in new window Open url in private \ No newline at end of file From 33a9654fe0b1404771ddd25244225fb6ea480fdb Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 4 Sep 2025 22:06:02 +0800 Subject: [PATCH 08/22] Add settings control --- Plugins/Flow.Launcher.Plugin.Url/Main.cs | 8 +- Plugins/Flow.Launcher.Plugin.Url/Settings.cs | 16 +++- .../SettingsControl.xaml | 86 +++++++++++++++++++ .../SettingsControl.xaml.cs | 27 ++++++ 4 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 Plugins/Flow.Launcher.Plugin.Url/SettingsControl.xaml create mode 100644 Plugins/Flow.Launcher.Plugin.Url/SettingsControl.xaml.cs diff --git a/Plugins/Flow.Launcher.Plugin.Url/Main.cs b/Plugins/Flow.Launcher.Plugin.Url/Main.cs index 61dd0bb1568..669ee09d49e 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Url/Main.cs @@ -1,11 +1,12 @@ using System; using System.Collections.Generic; using System.Text.RegularExpressions; +using System.Windows.Controls; using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Plugin.Url { - public class Main : IPlugin, IPluginI18n + public class Main : IPlugin, IPluginI18n, ISettingProvider { //based on https://gist.github.com/dperini/729294 private const string UrlPattern = "^" + @@ -123,5 +124,10 @@ public string GetTranslatedPluginDescription() { return Context.API.GetTranslation("flowlauncher_plugin_url_plugin_description"); } + + public Control CreateSettingPanel() + { + return new SettingsControl(); + } } } diff --git a/Plugins/Flow.Launcher.Plugin.Url/Settings.cs b/Plugins/Flow.Launcher.Plugin.Url/Settings.cs index c0b96b7a4f6..a5d15a603da 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Url/Settings.cs @@ -1,10 +1,22 @@ namespace Flow.Launcher.Plugin.Url { - public class Settings + public class Settings : BaseModel { public bool UseCustomBrowser { get; set; } = false; - public string BrowserPath { get; set; } = string.Empty; + private string _browserPath = string.Empty; + public string BrowserPath + { + get => _browserPath; + set + { + if (_browserPath != value) + { + _browserPath = value; + OnPropertyChanged(); + } + } + } public bool OpenInNewBrowserWindow { get; set; } = false; diff --git a/Plugins/Flow.Launcher.Plugin.Url/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.Url/SettingsControl.xaml new file mode 100644 index 00000000000..e8b1e36892d --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Url/SettingsControl.xaml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + +