From d0289b49b669140b4e365817b0a452fe2f7e98ad Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Mon, 22 May 2023 23:13:29 +0800 Subject: [PATCH 01/26] Refactor file watcher logic * Remove LastAccessed filter to avoid unwanted recursive RegisterBookmarkFile() calls * Check if watcher exists --- .../Main.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index d9a719272..c5a55bb5f 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -106,17 +106,19 @@ namespace Flow.Launcher.Plugin.BrowserBookmark internal static void RegisterBookmarkFile(string path) { var directory = Path.GetDirectoryName(path); - if (!Directory.Exists(directory)) - return; - var watcher = new FileSystemWatcher(directory!); - if (File.Exists(path)) + if (!Directory.Exists(directory) || !File.Exists(path)) { - var fileName = Path.GetFileName(path); - watcher.Filter = fileName; + return; } + if (Watchers.Any(x => x.Path.Equals(directory, StringComparison.OrdinalIgnoreCase))) + { + return; + } + + var watcher = new FileSystemWatcher(directory!); + watcher.Filter = Path.GetFileName(path); watcher.NotifyFilter = NotifyFilters.FileName | - NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Size; @@ -131,7 +133,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark }; watcher.EnableRaisingEvents = true; - + Watchers.Add(watcher); } From cbf73fcc0ff795da342f072d789481ab45970e3f Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Mon, 22 May 2023 23:28:47 +0800 Subject: [PATCH 02/26] Don't load bookmark files if plugin disabled --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index c5a55bb5f..306276258 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -29,6 +29,13 @@ namespace Flow.Launcher.Plugin.BrowserBookmark _settings = context.API.LoadSettingJsonStorage(); + if (context.CurrentPluginMetadata.Disabled) + { + // Don't load and monitor files if disabled + // Note: It doesn't start loading or monitoring if enabled later + return; + } + cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); _ = MonitorRefreshQueue(); From 0dc01a14694ba07ad7e09453dd08629c5c490c04 Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Mon, 22 May 2023 23:38:23 +0800 Subject: [PATCH 03/26] update --- .github/actions/spelling/expect.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt index 78ae8476b..3e2f24c72 100644 --- a/.github/actions/spelling/expect.txt +++ b/.github/actions/spelling/expect.txt @@ -78,6 +78,7 @@ WCA_ACCENT_POLICY HGlobal dopusrt firefox +Firefox msedge svgc ime From 4591fa76d97328a61c30ad371b8e1f21197376a7 Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Tue, 23 May 2023 19:37:38 +0800 Subject: [PATCH 04/26] Create file watchers when reloading bookmarks --- .../Main.cs | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index 306276258..f31d20625 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -12,6 +12,7 @@ using Flow.Launcher.Plugin.SharedCommands; using System.IO; using System.Threading.Channels; using System.Threading.Tasks; +using System.Threading; namespace Flow.Launcher.Plugin.BrowserBookmark { @@ -22,23 +23,27 @@ namespace Flow.Launcher.Plugin.BrowserBookmark private static List cachedBookmarks = new List(); private static Settings _settings; - + public void Init(PluginInitContext context) { Main.context = context; - + _settings = context.API.LoadSettingJsonStorage(); + LoadBookmarksIfEnabled(); + } + + private static void LoadBookmarksIfEnabled() + { if (context.CurrentPluginMetadata.Disabled) { - // Don't load and monitor files if disabled - // Note: It doesn't start loading or monitoring if enabled later + // Don't load or monitor files if disabled + // Note: It doesn't start loading or monitoring if enabled later, you need to manually reload data return; } cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); - - _ = MonitorRefreshQueue(); + _ = MonitorRefreshQueueAsync(); } public List Query(Query query) @@ -95,17 +100,25 @@ namespace Flow.Launcher.Plugin.BrowserBookmark private static Channel refreshQueue = Channel.CreateBounded(1); - private async Task MonitorRefreshQueue() + private static SemaphoreSlim fileMonitorSemaphore = new(1, 1); + + private static async Task MonitorRefreshQueueAsync() { + if (fileMonitorSemaphore.CurrentCount < 1) + { + return; + } + await fileMonitorSemaphore.WaitAsync(); var reader = refreshQueue.Reader; while (await reader.WaitToReadAsync()) { - await Task.Delay(2000); + await Task.Delay(5000); if (reader.TryRead(out _)) { - ReloadData(); + ReloadAllBookmarks(); } } + fileMonitorSemaphore.Release(); } private static readonly List Watchers = new(); @@ -117,6 +130,10 @@ namespace Flow.Launcher.Plugin.BrowserBookmark { return; } + if (context.CurrentPluginMetadata.Disabled) + { + return; + } if (Watchers.Any(x => x.Path.Equals(directory, StringComparison.OrdinalIgnoreCase))) { return; @@ -152,8 +169,8 @@ namespace Flow.Launcher.Plugin.BrowserBookmark public static void ReloadAllBookmarks() { cachedBookmarks.Clear(); - - cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); + DisposeFileWatchers(); + LoadBookmarksIfEnabled(); } public string GetTranslatedPluginTitle() @@ -207,12 +224,19 @@ namespace Flow.Launcher.Plugin.BrowserBookmark { internal string Url { get; set; } } + public void Dispose() + { + DisposeFileWatchers(); + } + + private static void DisposeFileWatchers() { foreach (var watcher in Watchers) { watcher.Dispose(); } + Watchers.Clear(); } } } From 6d64abd21a3b536d889c61d85d2c5384388834ed Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Thu, 15 Jun 2023 21:30:30 +0800 Subject: [PATCH 05/26] Load bookmarks in Query() if not initialized --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index f31d20625..7d214f5c6 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -24,6 +24,8 @@ namespace Flow.Launcher.Plugin.BrowserBookmark private static Settings _settings; + private static bool initialized = false; + public void Init(PluginInitContext context) { Main.context = context; @@ -31,6 +33,8 @@ namespace Flow.Launcher.Plugin.BrowserBookmark _settings = context.API.LoadSettingJsonStorage(); LoadBookmarksIfEnabled(); + + initialized = true; } private static void LoadBookmarksIfEnabled() @@ -48,6 +52,12 @@ namespace Flow.Launcher.Plugin.BrowserBookmark public List Query(Query query) { + if (!initialized) + { + LoadBookmarksIfEnabled(); + initialized = true; + } + string param = query.Search.TrimStart(); // Should top results be returned? (true if no search parameters have been passed) From e46df28fdd4e4d78945aa306ae10e6f9d6b19915 Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 17 Jun 2023 00:42:21 +0800 Subject: [PATCH 06/26] Move initialized flag --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index 7d214f5c6..b1d3adf8e 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -33,8 +33,6 @@ namespace Flow.Launcher.Plugin.BrowserBookmark _settings = context.API.LoadSettingJsonStorage(); LoadBookmarksIfEnabled(); - - initialized = true; } private static void LoadBookmarksIfEnabled() @@ -42,12 +40,12 @@ namespace Flow.Launcher.Plugin.BrowserBookmark if (context.CurrentPluginMetadata.Disabled) { // Don't load or monitor files if disabled - // Note: It doesn't start loading or monitoring if enabled later, you need to manually reload data return; } cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); _ = MonitorRefreshQueueAsync(); + initialized = true; } public List Query(Query query) @@ -55,7 +53,6 @@ namespace Flow.Launcher.Plugin.BrowserBookmark if (!initialized) { LoadBookmarksIfEnabled(); - initialized = true; } string param = query.Search.TrimStart(); @@ -140,10 +137,6 @@ namespace Flow.Launcher.Plugin.BrowserBookmark { return; } - if (context.CurrentPluginMetadata.Disabled) - { - return; - } if (Watchers.Any(x => x.Path.Equals(directory, StringComparison.OrdinalIgnoreCase))) { return; From 9b5341c2b71b2c87778cee3feac6406af2b860a7 Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 18 Jun 2023 10:55:55 +0800 Subject: [PATCH 07/26] Preserve file watchers when monitored files change --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index b1d3adf8e..0c07a8476 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -122,7 +122,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark await Task.Delay(5000); if (reader.TryRead(out _)) { - ReloadAllBookmarks(); + ReloadAllBookmarks(false); } } fileMonitorSemaphore.Release(); @@ -169,10 +169,11 @@ namespace Flow.Launcher.Plugin.BrowserBookmark ReloadAllBookmarks(); } - public static void ReloadAllBookmarks() + public static void ReloadAllBookmarks(bool disposeFileWatchers = true) { cachedBookmarks.Clear(); - DisposeFileWatchers(); + if (disposeFileWatchers) + DisposeFileWatchers(); LoadBookmarksIfEnabled(); } From be72c142b2abbd7809e821c5ecb30e6eaabe6abb Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 18 Jun 2023 21:36:36 +0300 Subject: [PATCH 08/26] readme: document Ctrl+R hotkey --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fdd33f3f8..b78bb3e3e 100644 --- a/README.md +++ b/README.md @@ -276,6 +276,7 @@ And you can download executed by a plugin /// public class Result { @@ -17,6 +17,8 @@ namespace Flow.Launcher.Plugin private string _icoPath; + private string _copyText = string.Empty; + /// /// The title of the result. This is always required. /// @@ -28,13 +30,13 @@ namespace Flow.Launcher.Plugin public string SubTitle { get; set; } = string.Empty; /// - /// This holds the action keyword that triggered the result. + /// This holds the action keyword that triggered the result. /// If result is triggered by global keyword: *, this should be empty. /// public string ActionKeywordAssigned { get; set; } /// - /// This holds the text which can be provided by plugin to be copied to the + /// This holds the text which can be provided by plugin to be copied to the /// user's clipboard when Ctrl + C is pressed on a result. If the text is a file/directory path /// flow will copy the actual file/folder instead of just the path text. /// @@ -46,16 +48,17 @@ namespace Flow.Launcher.Plugin /// /// This holds the text which can be provided by plugin to help Flow autocomplete text - /// for user on the plugin result. If autocomplete action for example is tab, pressing tab will have + /// for user on the plugin result. If autocomplete action for example is tab, pressing tab will have /// the default constructed autocomplete text (result's Title), or the text provided here if not empty. /// + /// When a value is not set, the will be used. public string AutoCompleteText { get; set; } /// - /// Image Displayed on the result - /// Relative Path to the Image File - /// GlyphInfo is prioritized if not null + /// The image to be displayed for the result. /// + /// Can be a local file path or a URL. + /// GlyphInfo is prioritized if not null public string IcoPath { get { return _icoPath; } @@ -76,22 +79,22 @@ namespace Flow.Launcher.Plugin } } } + /// /// Determines if Icon has a border radius /// public bool RoundedIcon { get; set; } = false; /// - /// Delegate function, see + /// Delegate function that produces an /// /// public delegate ImageSource IconDelegate(); /// - /// Delegate to Get Image Source + /// Delegate to load an icon for this result. /// public IconDelegate Icon; - private string _copyText = string.Empty; /// /// Information for Glyph Icon (Prioritized than IcoPath/Icon if user enable Glyph Icons) @@ -100,25 +103,29 @@ namespace Flow.Launcher.Plugin /// - /// Delegate. An action to take in the form of a function call when the result has been selected - /// - /// true to hide flowlauncher after select result - /// + /// An action to take in the form of a function call when the result has been selected. /// + /// + /// The function is invoked with an as the only parameter. + /// Its result determines what happens to Flow Launcher's query form: + /// when true, the form will be hidden; when false, it will stay in focus. + /// public Func Action { get; set; } /// - /// Delegate. An Async action to take in the form of a function call when the result has been selected - /// - /// true to hide flowlauncher after select result - /// + /// An async action to take in the form of a function call when the result has been selected. /// + /// + /// The function is invoked with an as the only parameter and awaited. + /// Its result determines what happens to Flow Launcher's query form: + /// when true, the form will be hidden; when false, it will stay in focus. + /// public Func> AsyncAction { get; set; } /// /// Priority of the current result - /// default: 0 /// + /// default: 0 public int Score { get; set; } /// @@ -183,10 +190,10 @@ namespace Flow.Launcher.Plugin /// /// Additional data associated with this result + /// /// /// As external information for ContextMenu /// - /// public object ContextData { get; set; } /// @@ -230,10 +237,13 @@ namespace Flow.Launcher.Plugin /// #26a0da (blue) public string ProgressBarColor { get; set; } = "#26a0da"; + /// + /// Contains data used to populate the the preview section of this result. + /// public PreviewInfo Preview { get; set; } = PreviewInfo.Default; /// - /// Info of the preview image. + /// Info of the preview section of a /// public record PreviewInfo { @@ -241,13 +251,28 @@ namespace Flow.Launcher.Plugin /// Full image used for preview panel /// public string PreviewImagePath { get; set; } + /// /// Determines if the preview image should occupy the full width of the preview panel. /// public bool IsMedia { get; set; } + + /// + /// Result description text that is shown at the bottom of the preview panel. + /// + /// + /// When a value is not set, the will be used. + /// public string Description { get; set; } + + /// + /// Delegate to get the preview panel's image + /// public IconDelegate PreviewDelegate { get; set; } + /// + /// Default instance of + /// public static PreviewInfo Default { get; } = new() { PreviewImagePath = null, From 6ebac4e4b12d119045d91e10c2707e5c7f285f7c Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 18 Jun 2023 22:29:40 +0300 Subject: [PATCH 10/26] update documentation in Query --- Flow.Launcher.Plugin/Query.cs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Plugin/Query.cs b/Flow.Launcher.Plugin/Query.cs index c3bd82c74..edc5b1277 100644 --- a/Flow.Launcher.Plugin/Query.cs +++ b/Flow.Launcher.Plugin/Query.cs @@ -36,13 +36,14 @@ namespace Flow.Launcher.Plugin /// /// Search part of a query. /// This will not include action keyword if exclusive plugin gets it, otherwise it should be same as RawQuery. - /// Since we allow user to switch a exclusive plugin to generic plugin, + /// Since we allow user to switch a exclusive plugin to generic plugin, /// so this property will always give you the "real" query part of the query /// public string Search { get; internal init; } /// /// The search string split into a string array. + /// Does not include the . /// public string[] SearchTerms { get; init; } @@ -59,6 +60,7 @@ namespace Flow.Launcher.Plugin [Obsolete("Typo")] public const string TermSeperater = TermSeparator; + /// /// User can set multiple action keywords seperated by ';' /// @@ -69,15 +71,22 @@ namespace Flow.Launcher.Plugin /// - /// '*' is used for System Plugin + /// Wildcard action keyword. Plugins using this value will be queried on every search. /// public const string GlobalPluginWildcardSign = "*"; + /// + /// The action keyword part of this query. + /// For global plugins this value will be empty. + /// public string ActionKeyword { get; init; } /// - /// Return first search split by space if it has + /// Splits by spaces and returns the first item. /// + /// + /// returns an empty string when does not have enough items. + /// public string FirstSearch => SplitSearch(0); private string _secondToEndSearch; @@ -88,13 +97,19 @@ namespace Flow.Launcher.Plugin public string SecondToEndSearch => SearchTerms.Length > 1 ? (_secondToEndSearch ??= string.Join(' ', SearchTerms[1..])) : ""; /// - /// Return second search split by space if it has + /// Splits by spaces and returns the second item. /// + /// + /// returns an empty string when does not have enough items. + /// public string SecondSearch => SplitSearch(1); /// - /// Return third search split by space if it has + /// Splits by spaces and returns the third item. /// + /// + /// returns an empty string when does not have enough items. + /// public string ThirdSearch => SplitSearch(2); private string SplitSearch(int index) @@ -102,6 +117,7 @@ namespace Flow.Launcher.Plugin return index < SearchTerms.Length ? SearchTerms[index] : string.Empty; } + /// public override string ToString() => RawQuery; } } From bb5e1d3a1919caf5d22ecbb72b0cc30c3e62ff03 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 18 Jun 2023 22:53:01 +0300 Subject: [PATCH 11/26] more documentation in Plugin package --- Flow.Launcher.Plugin/ActionContext.cs | 29 +++++++++++++++++++ .../Interfaces/IContextMenu.cs | 11 ++++++- .../Interfaces/IPluginI18n.cs | 8 ++++- Flow.Launcher.Plugin/Interfaces/ISavable.cs | 14 ++++++--- Flow.Launcher.Plugin/PluginInitContext.cs | 6 ++++ 5 files changed, 62 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Plugin/ActionContext.cs b/Flow.Launcher.Plugin/ActionContext.cs index d898972da..d6ba4894e 100644 --- a/Flow.Launcher.Plugin/ActionContext.cs +++ b/Flow.Launcher.Plugin/ActionContext.cs @@ -2,18 +2,47 @@ namespace Flow.Launcher.Plugin { + /// + /// Context provided as a parameter when invoking a + /// or + /// public class ActionContext { + /// + /// Contains the press state of certain special keys. + /// public SpecialKeyState SpecialKeyState { get; set; } } + /// + /// Contains the press state of certain special keys. + /// public class SpecialKeyState { + /// + /// True if the Ctrl key is pressed. + /// public bool CtrlPressed { get; set; } + + /// + /// True if the Shift key is pressed. + /// public bool ShiftPressed { get; set; } + + /// + /// True if the Alt key is pressed. + /// public bool AltPressed { get; set; } + + /// + /// True if the Windows key is pressed. + /// public bool WinPressed { get; set; } + /// + /// Get this object represented as a flag combination. + /// + /// public ModifierKeys ToModifierKeys() { return (CtrlPressed ? ModifierKeys.Control : ModifierKeys.None) | diff --git a/Flow.Launcher.Plugin/Interfaces/IContextMenu.cs b/Flow.Launcher.Plugin/Interfaces/IContextMenu.cs index 5befbf5c9..06398fb1b 100644 --- a/Flow.Launcher.Plugin/Interfaces/IContextMenu.cs +++ b/Flow.Launcher.Plugin/Interfaces/IContextMenu.cs @@ -1,9 +1,18 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace Flow.Launcher.Plugin { + /// + /// Adds support for presenting additional options for a given from a context menu. + /// public interface IContextMenu : IFeatures { + /// + /// Load context menu items for the given result. + /// + /// + /// The for which the user has activated the context menu. + /// List LoadContextMenus(Result selectedResult); } } \ No newline at end of file diff --git a/Flow.Launcher.Plugin/Interfaces/IPluginI18n.cs b/Flow.Launcher.Plugin/Interfaces/IPluginI18n.cs index 61662b671..bbc998fcb 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPluginI18n.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPluginI18n.cs @@ -1,4 +1,4 @@ -using System.Globalization; +using System.Globalization; namespace Flow.Launcher.Plugin { @@ -7,8 +7,14 @@ namespace Flow.Launcher.Plugin /// public interface IPluginI18n : IFeatures { + /// + /// Get a localised version of the plugin's title + /// string GetTranslatedPluginTitle(); + /// + /// Get a localised version of the plugin's description + /// string GetTranslatedPluginDescription(); /// diff --git a/Flow.Launcher.Plugin/Interfaces/ISavable.cs b/Flow.Launcher.Plugin/Interfaces/ISavable.cs index 2d13eaa6e..77bd304e4 100644 --- a/Flow.Launcher.Plugin/Interfaces/ISavable.cs +++ b/Flow.Launcher.Plugin/Interfaces/ISavable.cs @@ -1,12 +1,18 @@ -namespace Flow.Launcher.Plugin +namespace Flow.Launcher.Plugin { /// - /// Save addtional plugin data. Inherit this interface if additional data e.g. cache needs to be saved, - /// Otherwise if LoadSettingJsonStorage or SaveSettingJsonStorage has been callded, - /// plugin settings will be automatically saved (see Flow.Launcher/PublicAPIInstance.SavePluginSettings) by Flow + /// Inherit this interface if additional data e.g. cache needs to be saved. /// + /// + /// For storing plugin settings, prefer + /// or . + /// Once called, your settings will be automatically saved by Flow. + /// public interface ISavable : IFeatures { + /// + /// Save additional plugin data, such as cache. + /// void Save(); } } \ No newline at end of file diff --git a/Flow.Launcher.Plugin/PluginInitContext.cs b/Flow.Launcher.Plugin/PluginInitContext.cs index 233ead8f9..f040752bd 100644 --- a/Flow.Launcher.Plugin/PluginInitContext.cs +++ b/Flow.Launcher.Plugin/PluginInitContext.cs @@ -1,5 +1,8 @@ namespace Flow.Launcher.Plugin { + /// + /// Carries data passed to a plugin when it gets initialized. + /// public class PluginInitContext { public PluginInitContext() @@ -12,6 +15,9 @@ API = api; } + /// + /// The metadata of the plugin being initialized. + /// public PluginMetadata CurrentPluginMetadata { get; internal set; } /// From da41f2c4f17903ebb091bd4a3f535ee3b1c016ae Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 18 Jun 2023 23:32:15 +0300 Subject: [PATCH 12/26] update plugin readme, include in nupkg --- Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 3 ++- Flow.Launcher.Plugin/README.md | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index 28344cf46..e72672a5b 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -26,6 +26,7 @@ flowlauncher true true + Readme.md @@ -56,7 +57,7 @@ - + diff --git a/Flow.Launcher.Plugin/README.md b/Flow.Launcher.Plugin/README.md index 5c5b7c3ed..f3091a1fc 100644 --- a/Flow.Launcher.Plugin/README.md +++ b/Flow.Launcher.Plugin/README.md @@ -1,6 +1,7 @@ -What does Flow.Launcher.Plugin do? -==== +Reference this package to develop a plugin for [Flow Launcher](https://github.com/Flow-Launcher/Flow.Launcher). -* Defines base objects and interfaces for plugins -* Plugin authors making C# plugins should reference this DLL via nuget -* Contains commands and models that can be used by plugins +Useful links: + +* [General plugin development guide](https://www.flowlauncher.com/docs/#/plugin-dev) +* [.Net plugin development guide](https://www.flowlauncher.com/docs/#/develop-dotnet-plugins) +* [Package API Reference](https://www.flowlauncher.com/docs/#/API-Reference/Flow.Launcher.Plugin) From bb7023ab25d7c8161a3093452c363f41b9f19e72 Mon Sep 17 00:00:00 2001 From: Alex Davies Date: Fri, 23 Jun 2023 03:15:30 +0100 Subject: [PATCH 13/26] Added Animation Length slider Added a slider in Appearance to adjust the length of the open animation for the launcher. By default the animation should be the same as it was previously (the first part of the animation is about 10ms shorter so that the ratio is simpler - 2/3 instead of 25/36) Currently only has language support for English and the length is adjustable from 100ms to 2000ms in steps of 10. --- .../UserSettings/Settings.cs | 1 + Flow.Launcher/Languages/en.xaml | 2 ++ Flow.Launcher/MainWindow.xaml.cs | 12 +++---- Flow.Launcher/SettingWindow.xaml | 34 +++++++++++++++++++ .../ViewModel/SettingWindowViewModel.cs | 6 ++++ 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 43a68a2a6..10a1e46d1 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -53,6 +53,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; public bool UseAnimation { get; set; } = true; + public int AnimationLength { get; set; } = 360; public bool UseSound { get; set; } = true; public bool UseClock { get; set; } = true; public bool UseDate { get; set; } = false; diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 30c117378..e69d9dcd8 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -157,6 +157,8 @@ Play a small sound when the search window opens Animation Use Animation in UI + Animation Length (ms) + The length of the UI animation in milliseconds Clock Date diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 4adfccff4..e080c55b3 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -383,7 +383,7 @@ namespace Flow.Launcher { From = 0, To = 1, - Duration = TimeSpan.FromSeconds(0.25), + Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength * 2 / 3), FillBehavior = FillBehavior.Stop }; @@ -391,7 +391,7 @@ namespace Flow.Launcher { From = Top + 10, To = Top, - Duration = TimeSpan.FromSeconds(0.25), + Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength * 2 / 3), FillBehavior = FillBehavior.Stop }; var IconMotion = new DoubleAnimation @@ -399,7 +399,7 @@ namespace Flow.Launcher From = 12, To = 0, EasingFunction = easing, - Duration = TimeSpan.FromSeconds(0.36), + Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), FillBehavior = FillBehavior.Stop }; @@ -408,7 +408,7 @@ namespace Flow.Launcher From = 0, To = 1, EasingFunction = easing, - Duration = TimeSpan.FromSeconds(0.36), + Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), FillBehavior = FillBehavior.Stop }; double TargetIconOpacity = SearchIcon.Opacity; // Animation Target Opacity from Style @@ -417,7 +417,7 @@ namespace Flow.Launcher From = 0, To = TargetIconOpacity, EasingFunction = easing, - Duration = TimeSpan.FromSeconds(0.36), + Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), FillBehavior = FillBehavior.Stop }; @@ -427,7 +427,7 @@ namespace Flow.Launcher From = new Thickness(0, 12, right, 0), To = new Thickness(0, 0, right, 0), EasingFunction = easing, - Duration = TimeSpan.FromSeconds(0.36), + Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), FillBehavior = FillBehavior.Stop }; diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 665d16b8f..ce0b55de7 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -2414,6 +2414,40 @@ + + + + + + + + + + + +  + + + Settings.UseAnimation = value; } + public int AnimationLength + { + get => Settings.AnimationLength; + set => Settings.AnimationLength = value; + } + public bool UseSound { get => Settings.UseSound; From 9d0474585d8c285d21b9c1571a54827135f545b3 Mon Sep 17 00:00:00 2001 From: Alex Davies Date: Fri, 23 Jun 2023 18:42:36 +0100 Subject: [PATCH 14/26] Refactored to describe via discrete speed settings Can now select either Slow, Medium or Fast, or a user-defined Custom speed for the animation. Additionally, the speed is hidden when animations are disabled. --- .../UserSettings/Settings.cs | 13 ++- Flow.Launcher/Languages/en.xaml | 8 +- Flow.Launcher/MainWindow.xaml.cs | 21 +++- Flow.Launcher/SettingWindow.xaml | 103 +++++++++++------- .../ViewModel/SettingWindowViewModel.cs | 27 ++++- 5 files changed, 119 insertions(+), 53 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 10a1e46d1..ca1674315 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -53,7 +53,6 @@ namespace Flow.Launcher.Infrastructure.UserSettings public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; public bool UseAnimation { get; set; } = true; - public int AnimationLength { get; set; } = 360; public bool UseSound { get; set; } = true; public bool UseClock { get; set; } = true; public bool UseDate { get; set; } = false; @@ -255,6 +254,10 @@ namespace Flow.Launcher.Infrastructure.UserSettings [JsonConverter(typeof(JsonStringEnumConverter))] public LastQueryMode LastQueryMode { get; set; } = LastQueryMode.Selected; + [JsonConverter(typeof(JsonStringEnumConverter))] + public AnimationSpeeds AnimationSpeed { get; set; } = AnimationSpeeds.Medium; + public int CustomAnimationLength { get; set; } = 360; + // This needs to be loaded last by staying at the bottom public PluginsSettings PluginSettings { get; set; } = new PluginsSettings(); @@ -291,4 +294,12 @@ namespace Flow.Launcher.Infrastructure.UserSettings RightTop, Custom } + + public enum AnimationSpeeds + { + Slow, + Medium, + Fast, + Custom + } } diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index e69d9dcd8..bee595772 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -157,8 +157,12 @@ Play a small sound when the search window opens Animation Use Animation in UI - Animation Length (ms) - The length of the UI animation in milliseconds + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index e080c55b3..3a914d488 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -24,6 +24,7 @@ using System.Windows.Data; using ModernWpf.Controls; using Key = System.Windows.Input.Key; using System.Media; +using static Flow.Launcher.ViewModel.SettingWindowViewModel; namespace Flow.Launcher { @@ -379,11 +380,19 @@ namespace Flow.Launcher CircleEase easing = new CircleEase(); easing.EasingMode = EasingMode.EaseInOut; + var animationLength = _settings.AnimationSpeed switch + { + AnimationSpeeds.Slow => 560, + AnimationSpeeds.Medium => 360, + AnimationSpeeds.Fast => 160, + _ => _settings.CustomAnimationLength + }; + var WindowOpacity = new DoubleAnimation { From = 0, To = 1, - Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength * 2 / 3), + Duration = TimeSpan.FromMilliseconds(animationLength * 2 / 3), FillBehavior = FillBehavior.Stop }; @@ -391,7 +400,7 @@ namespace Flow.Launcher { From = Top + 10, To = Top, - Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength * 2 / 3), + Duration = TimeSpan.FromMilliseconds(animationLength * 2 / 3), FillBehavior = FillBehavior.Stop }; var IconMotion = new DoubleAnimation @@ -399,7 +408,7 @@ namespace Flow.Launcher From = 12, To = 0, EasingFunction = easing, - Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), + Duration = TimeSpan.FromMilliseconds(animationLength), FillBehavior = FillBehavior.Stop }; @@ -408,7 +417,7 @@ namespace Flow.Launcher From = 0, To = 1, EasingFunction = easing, - Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), + Duration = TimeSpan.FromMilliseconds(animationLength), FillBehavior = FillBehavior.Stop }; double TargetIconOpacity = SearchIcon.Opacity; // Animation Target Opacity from Style @@ -417,7 +426,7 @@ namespace Flow.Launcher From = 0, To = TargetIconOpacity, EasingFunction = easing, - Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), + Duration = TimeSpan.FromMilliseconds(animationLength), FillBehavior = FillBehavior.Stop }; @@ -427,7 +436,7 @@ namespace Flow.Launcher From = new Thickness(0, 12, right, 0), To = new Thickness(0, 0, right, 0), EasingFunction = easing, - Duration = TimeSpan.FromMilliseconds(_settings.AnimationLength), + Duration = TimeSpan.FromMilliseconds(animationLength), FillBehavior = FillBehavior.Stop }; diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index ce0b55de7..1e886c022 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -2403,6 +2403,7 @@ - + + + + + + - - + + - - + DisplayMemberPath="Display" + FontSize="14" + ItemsSource="{Binding AnimationSpeeds}" + SelectedValue="{Binding Settings.AnimationSpeed}" + SelectedValuePath="Value"> + + + + + + + - - - - - - - - + + + + + + + + + + - +  - - - - + + diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index d8d2801e5..231e65539 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -598,10 +598,31 @@ namespace Flow.Launcher.ViewModel set => Settings.UseAnimation = value; } - public int AnimationLength + public class AnimationSpeed { - get => Settings.AnimationLength; - set => Settings.AnimationLength = value; + public string Display { get; set; } + public AnimationSpeeds Value { get; set; } + } + + public List AnimationSpeeds + { + get + { + List speeds = new List(); + var enums = (AnimationSpeeds[])Enum.GetValues(typeof(AnimationSpeeds)); + foreach (var e in enums) + { + var key = $"AnimationSpeed{e}"; + var display = _translater.GetTranslation(key); + var m = new AnimationSpeed + { + Display = display, + Value = e, + }; + speeds.Add(m); + } + return speeds; + } } public bool UseSound From e0e86d039dc51f4a492dfc534cc597be2f9792f2 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 24 Jun 2023 10:54:53 +0800 Subject: [PATCH 15/26] Remove delay --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index 0c07a8476..2a94714fa 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -119,7 +119,6 @@ namespace Flow.Launcher.Plugin.BrowserBookmark var reader = refreshQueue.Reader; while (await reader.WaitToReadAsync()) { - await Task.Delay(5000); if (reader.TryRead(out _)) { ReloadAllBookmarks(false); From cdff8fcd7ce17321fe53c089717d5364f678da6d Mon Sep 17 00:00:00 2001 From: James Date: Sun, 25 Jun 2023 01:46:27 +1200 Subject: [PATCH 16/26] fix: :bug: check autocomplete and copy text for `Result` equality (#2201) --- Flow.Launcher.Plugin/Result.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 1c4467762..ec976bdca 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -161,6 +161,8 @@ namespace Flow.Launcher.Plugin var equality = string.Equals(r?.Title, Title) && string.Equals(r?.SubTitle, SubTitle) && + string.Equals(r?.AutoCompleteText, AutoCompleteText) && + string.Equals(r?.CopyText, CopyText) && string.Equals(r?.IcoPath, IcoPath) && TitleHighlightData == r.TitleHighlightData; From 7b8f998065d49ca2b2b62eeae31f7da88eafd8bc Mon Sep 17 00:00:00 2001 From: James Date: Sun, 25 Jun 2023 14:32:54 +1200 Subject: [PATCH 17/26] perf: :zap: improve `Result` hashcode algorithm (#2201) --- Flow.Launcher.Plugin/Result.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index ec976bdca..2fd8f500b 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -172,9 +172,16 @@ namespace Flow.Launcher.Plugin /// public override int GetHashCode() { - var hashcode = (Title?.GetHashCode() ?? 0) ^ - (SubTitle?.GetHashCode() ?? 0); - return hashcode; + unchecked + { + // 17 and 23 are prime numbers + int hashcode = 17; + hashcode = hashcode * 23 + (Title?.GetHashCode() ?? 0); + hashcode = hashcode * 23 + (SubTitle?.GetHashCode() ?? 0); + hashcode = hashcode * 23 + (AutoCompleteText?.GetHashCode() ?? 0); + hashcode = hashcode * 23 + (CopyText?.GetHashCode() ?? 0); + return hashcode; + } } /// From 5dd0d349de50ce1bfa925d317d3e4494eb891bbf Mon Sep 17 00:00:00 2001 From: James Date: Mon, 26 Jun 2023 13:51:37 +1200 Subject: [PATCH 18/26] refactor: :recycle: use `HashCode.Combine` for `Result` hashcode (#2201) --- Flow.Launcher.Plugin/Result.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 2fd8f500b..7e4446662 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; @@ -172,16 +173,7 @@ namespace Flow.Launcher.Plugin /// public override int GetHashCode() { - unchecked - { - // 17 and 23 are prime numbers - int hashcode = 17; - hashcode = hashcode * 23 + (Title?.GetHashCode() ?? 0); - hashcode = hashcode * 23 + (SubTitle?.GetHashCode() ?? 0); - hashcode = hashcode * 23 + (AutoCompleteText?.GetHashCode() ?? 0); - hashcode = hashcode * 23 + (CopyText?.GetHashCode() ?? 0); - return hashcode; - } + return HashCode.Combine(Title, SubTitle, AutoCompleteText, CopyText, IcoPath); } /// From 340dc3c8bfd2da90b82db52943d82b52c21c8050 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sat, 24 Jun 2023 17:15:36 +0300 Subject: [PATCH 19/26] clear obsolete code from Flow.Launcher.Plugin --- Flow.Launcher.Core/Plugin/QueryBuilder.cs | 12 ++++++++---- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 7 ------- Flow.Launcher.Plugin/Query.cs | 19 +------------------ Flow.Launcher.Plugin/Result.cs | 6 ------ .../SharedCommands/SearchWeb.cs | 14 +------------- Flow.Launcher/PublicAPIInstance.cs | 9 --------- 6 files changed, 10 insertions(+), 57 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/QueryBuilder.cs b/Flow.Launcher.Core/Plugin/QueryBuilder.cs index 84f36e91a..3dc7877ac 100644 --- a/Flow.Launcher.Core/Plugin/QueryBuilder.cs +++ b/Flow.Launcher.Core/Plugin/QueryBuilder.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Flow.Launcher.Plugin; @@ -33,9 +33,13 @@ namespace Flow.Launcher.Core.Plugin searchTerms = terms; } - var query = new Query(rawQuery, search,terms, searchTerms, actionKeyword); - - return query; + return new Query () + { + Search = search, + RawQuery = rawQuery, + SearchTerms = searchTerms, + ActionKeyword = actionKeyword + }; } } } \ No newline at end of file diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index a07975f3c..9b9a9525d 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -133,13 +133,6 @@ namespace Flow.Launcher.Plugin /// List GetAllPlugins(); - /// - /// Fired after global keyboard events - /// if you want to hook something like Ctrl+R, you should use this event - /// - [Obsolete("Unable to Retrieve correct return value")] - event FlowLauncherGlobalKeyboardEventHandler GlobalKeyboardEvent; - /// /// Register a callback for Global Keyboard Event /// diff --git a/Flow.Launcher.Plugin/Query.cs b/Flow.Launcher.Plugin/Query.cs index edc5b1277..672285840 100644 --- a/Flow.Launcher.Plugin/Query.cs +++ b/Flow.Launcher.Plugin/Query.cs @@ -6,16 +6,11 @@ namespace Flow.Launcher.Plugin { public Query() { } - /// - /// to allow unit tests for plug ins - /// + [Obsolete("Use the default Query constructor.")] public Query(string rawQuery, string search, string[] terms, string[] searchTerms, string actionKeyword = "") { Search = search; RawQuery = rawQuery; -#pragma warning disable CS0618 - Terms = terms; -#pragma warning restore CS0618 SearchTerms = searchTerms; ActionKeyword = actionKeyword; } @@ -47,28 +42,16 @@ namespace Flow.Launcher.Plugin /// public string[] SearchTerms { get; init; } - /// - /// The raw query split into a string array - /// - [Obsolete("It may or may not include action keyword, which can be confusing. Use SearchTerms instead")] - public string[] Terms { get; init; } - /// /// Query can be splited into multiple terms by whitespace /// public const string TermSeparator = " "; - [Obsolete("Typo")] - public const string TermSeperater = TermSeparator; - /// /// User can set multiple action keywords seperated by ';' /// public const string ActionKeywordSeparator = ";"; - [Obsolete("Typo")] - public const string ActionKeywordSeperater = ActionKeywordSeparator; - /// /// Wildcard action keyword. Plugins using this value will be queried on every search. diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 6810a6d47..dd4497a3c 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -133,12 +133,6 @@ namespace Flow.Launcher.Plugin /// public IList TitleHighlightData { get; set; } - /// - /// Deprecated as of Flow Launcher v1.9.1. Subtitle highlighting is no longer offered - /// - [Obsolete("Deprecated as of Flow Launcher v1.9.1. Subtitle highlighting is no longer offered")] - public IList SubTitleHighlightData { get; set; } - /// /// Query information associated with the result /// diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index 6588132b9..a7744ffac 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -1,4 +1,4 @@ -using Microsoft.Win32; +using Microsoft.Win32; using System; using System.Diagnostics; using System.IO; @@ -71,12 +71,6 @@ namespace Flow.Launcher.Plugin.SharedCommands } } - [Obsolete("This is provided for backwards compatibility after 1.9.0 release, e.g. GitHub plugin. Use the new method instead")] - public static void NewBrowserWindow(this string url, string browserPath = "") - { - OpenInBrowserWindow(url, browserPath); - } - /// /// Opens search as a tab in the default browser chosen in Windows settings. /// @@ -111,11 +105,5 @@ namespace Flow.Launcher.Plugin.SharedCommands }); } } - - [Obsolete("This is provided for backwards compatibility after 1.9.0 release, e.g. GitHub plugin. Use the new method instead")] - public static void NewTabInBrowser(this string url, string browserPath = "") - { - OpenInBrowserTab(url, browserPath); - } } } \ No newline at end of file diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index c1a9d8cd2..4312df3c3 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -69,9 +69,6 @@ namespace Flow.Launcher UpdateManager.RestartApp(Constant.ApplicationFileName); } - [Obsolete("Typo")] - public void RestarApp() => RestartApp(); - public void ShowMainWindow() => _mainVM.Show(); public void HideMainWindow() => _mainVM.Hide(); @@ -295,8 +292,6 @@ namespace Flow.Launcher OpenUri(appUri); } - public event FlowLauncherGlobalKeyboardEventHandler GlobalKeyboardEvent; - private readonly List> _globalKeyboardHandlers = new(); public void RegisterGlobalKeyboardCallback(Func callback) => _globalKeyboardHandlers.Add(callback); @@ -309,10 +304,6 @@ namespace Flow.Launcher private bool KListener_hookedKeyboardCallback(KeyEvent keyevent, int vkcode, SpecialKeyState state) { var continueHook = true; - if (GlobalKeyboardEvent != null) - { - continueHook = GlobalKeyboardEvent((int)keyevent, vkcode, state); - } foreach (var x in _globalKeyboardHandlers) { continueHook &= x((int)keyevent, vkcode, state); From 823d4e1bf632a5c435d9baa4cba6c9208774a122 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sat, 24 Jun 2023 17:30:15 +0300 Subject: [PATCH 20/26] update QueryBuilder tests --- Flow.Launcher.Test/QueryBuilderTest.cs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Test/QueryBuilderTest.cs b/Flow.Launcher.Test/QueryBuilderTest.cs index 45ff8fc9e..aa0c8da12 100644 --- a/Flow.Launcher.Test/QueryBuilderTest.cs +++ b/Flow.Launcher.Test/QueryBuilderTest.cs @@ -15,10 +15,19 @@ namespace Flow.Launcher.Test {">", new PluginPair {Metadata = new PluginMetadata {ActionKeywords = new List {">"}}}} }; - Query q = QueryBuilder.Build("> file.txt file2 file3", nonGlobalPlugins); + Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins); - Assert.AreEqual("file.txt file2 file3", q.Search); + Assert.AreEqual("> ping google.com -n 20 -6", q.RawQuery); + Assert.AreEqual("ping google.com -n 20 -6", q.Search, "Search should not start with the ActionKeyword."); Assert.AreEqual(">", q.ActionKeyword); + + Assert.AreEqual(5, q.SearchTerms.Length, "The length of SearchTerms should match."); + + Assert.AreEqual("ping", q.FirstSearch); + Assert.AreEqual("google.com", q.SecondSearch); + Assert.AreEqual("-n", q.ThirdSearch); + + Assert.AreEqual("google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters"); } [Test] @@ -29,9 +38,13 @@ namespace Flow.Launcher.Test {">", new PluginPair {Metadata = new PluginMetadata {ActionKeywords = new List {">"}, Disabled = true}}} }; - Query q = QueryBuilder.Build("> file.txt file2 file3", nonGlobalPlugins); + Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins); - Assert.AreEqual("> file.txt file2 file3", q.Search); + Assert.AreEqual("> ping google.com -n 20 -6", q.Search); + Assert.AreEqual(q.Search, q.RawQuery, "RawQuery should be equal to Search."); + Assert.AreEqual(6, q.SearchTerms.Length, "The length of SearchTerms should match."); + Assert.AreNotEqual(">", q.ActionKeyword, "ActionKeyword should not match that of a disabled plugin."); + Assert.AreEqual("ping google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters"); } [Test] From ea4286b7d3bb4f6d32fd9016b8bcb14aedcfc763 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 25 Jun 2023 07:38:55 +0300 Subject: [PATCH 21/26] clear backwards compat code --- .../Environments/AbstractPluginEnvironment.cs | 12 ---------- .../Storage/ISavable.cs | 8 ------- .../UserSettings/PluginSettings.cs | 22 ------------------- 3 files changed, 42 deletions(-) delete mode 100644 Flow.Launcher.Infrastructure/Storage/ISavable.cs diff --git a/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs b/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs index 9ebacc942..0c139f521 100644 --- a/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs +++ b/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs @@ -41,18 +41,6 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments if (!PluginMetadataList.Any(o => o.Language.Equals(Language, StringComparison.OrdinalIgnoreCase))) return new List(); - // TODO: Remove. This is backwards compatibility for 1.10.0 release- changed PythonEmbeded to Environments/Python - if (Language.Equals(AllowedLanguage.Python, StringComparison.OrdinalIgnoreCase)) - { - FilesFolders.RemoveFolderIfExists(Path.Combine(DataLocation.DataDirectory(), "PythonEmbeddable")); - - if (!string.IsNullOrEmpty(PluginSettings.PythonDirectory) && PluginSettings.PythonDirectory.StartsWith(Path.Combine(DataLocation.DataDirectory(), "PythonEmbeddable"))) - { - InstallEnvironment(); - PluginSettings.PythonDirectory = string.Empty; - } - } - if (!string.IsNullOrEmpty(PluginsSettingsFilePath) && FilesFolders.FileExists(PluginsSettingsFilePath)) { // Ensure latest only if user is using Flow's environment setup. diff --git a/Flow.Launcher.Infrastructure/Storage/ISavable.cs b/Flow.Launcher.Infrastructure/Storage/ISavable.cs deleted file mode 100644 index ba2b58c6a..000000000 --- a/Flow.Launcher.Infrastructure/Storage/ISavable.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace Flow.Launcher.Infrastructure.Storage -{ - [Obsolete("Deprecated as of Flow Launcher v1.8.0, on 2021.06.21. " + - "This is used only for Everything plugin v1.4.9 or below backwards compatibility")] - public interface ISavable : Plugin.ISavable { } -} \ No newline at end of file diff --git a/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs b/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs index 130e25d7b..98f4dccda 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs @@ -26,9 +26,6 @@ namespace Flow.Launcher.Infrastructure.UserSettings } } - // TODO: Remove. This is backwards compatibility for 1.10.0 release. - public string PythonDirectory { get; set; } - public Dictionary Plugins { get; set; } = new Dictionary(); public void UpdatePluginSettings(List metadatas) @@ -38,25 +35,6 @@ namespace Flow.Launcher.Infrastructure.UserSettings if (Plugins.ContainsKey(metadata.ID)) { var settings = Plugins[metadata.ID]; - - if (metadata.ID == "572be03c74c642baae319fc283e561a8" && metadata.ActionKeywords.Count > settings.ActionKeywords.Count) - { - // TODO: Remove. This is backwards compatibility for Explorer 1.8.0 release. - // Introduced two new action keywords in Explorer, so need to update plugin setting in the UserData folder. - if (settings.Version.CompareTo("1.8.0") < 0) - { - settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for index search - settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for path search - settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for quick access action keyword - } - - // TODO: Remove. This is backwards compatibility for Explorer 1.9.0 release. - // Introduced a new action keywords in Explorer since 1.8.0, so need to update plugin setting in the UserData folder. - if (settings.Version.CompareTo("1.8.0") > 0) - { - settings.ActionKeywords.Add(Query.GlobalPluginWildcardSign); // for quick access action keyword - } - } if (string.IsNullOrEmpty(settings.Version)) settings.Version = metadata.Version; From 0909f8ba647aa37c4dda71a30f81e34443b95cf3 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 25 Jun 2023 12:44:06 +0300 Subject: [PATCH 22/26] delete unused files --- Deploy/local_build.ps1 | 4 - .../Flow.Launcher.CrashReporter.csproj | 115 ------------------ .../Images/app_error.png | Bin 14970 -> 0 bytes .../Images/crash_go.png | Bin 1362 -> 0 bytes .../Images/crash_stop.png | Bin 1061 -> 0 bytes .../Images/crash_warning.png | Bin 738 -> 0 bytes .../Properties/AssemblyInfo.cs | 5 - Flow.Launcher.CrashReporter/packages.config | 6 - 8 files changed, 130 deletions(-) delete mode 100644 Deploy/local_build.ps1 delete mode 100644 Flow.Launcher.CrashReporter/Flow.Launcher.CrashReporter.csproj delete mode 100644 Flow.Launcher.CrashReporter/Images/app_error.png delete mode 100644 Flow.Launcher.CrashReporter/Images/crash_go.png delete mode 100644 Flow.Launcher.CrashReporter/Images/crash_stop.png delete mode 100644 Flow.Launcher.CrashReporter/Images/crash_warning.png delete mode 100644 Flow.Launcher.CrashReporter/Properties/AssemblyInfo.cs delete mode 100644 Flow.Launcher.CrashReporter/packages.config diff --git a/Deploy/local_build.ps1 b/Deploy/local_build.ps1 deleted file mode 100644 index 9dd7582b1..000000000 --- a/Deploy/local_build.ps1 +++ /dev/null @@ -1,4 +0,0 @@ -New-Alias nuget.exe ".\packages\NuGet.CommandLine.*\tools\NuGet.exe" -$env:APPVEYOR_BUILD_FOLDER = Convert-Path . -$env:APPVEYOR_BUILD_VERSION = "1.2.0" -& .\Deploy\squirrel_installer.ps1 \ No newline at end of file diff --git a/Flow.Launcher.CrashReporter/Flow.Launcher.CrashReporter.csproj b/Flow.Launcher.CrashReporter/Flow.Launcher.CrashReporter.csproj deleted file mode 100644 index 1e0a3fe52..000000000 --- a/Flow.Launcher.CrashReporter/Flow.Launcher.CrashReporter.csproj +++ /dev/null @@ -1,115 +0,0 @@ - - - - - Debug - AnyCPU - {2FEB2298-7653-4009-B1EA-FFFB1A768BCC} - Library - Properties - Flow.Launcher.CrashReporter - Flow.Launcher.CrashReporter - v4.5.2 - 512 - ..\ - - - - true - full - false - ..\Output\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - ..\Output\Release\ - TRACE - prompt - 4 - false - - - - ..\packages\Exceptionless.1.5.2121\lib\net45\Exceptionless.dll - True - - - ..\packages\Exceptionless.1.5.2121\lib\net45\Exceptionless.Models.dll - True - - - ..\packages\JetBrains.Annotations.10.1.4\lib\net20\JetBrains.Annotations.dll - True - - - - - - - - - - - - - - - Properties\SolutionAssemblyInfo.cs - - - - - ReportWindow.xaml - - - - - Designer - MSBuild:Compile - - - - - {B749F0DB-8E75-47DB-9E5E-265D16D0C0D2} - Flow.Launcher.Core - - - {4fd29318-a8ab-4d8f-aa47-60bc241b8da3} - Flow.Launcher.Infrastructure - - - - - PreserveNewest - - - PreserveNewest - - - - - PreserveNewest - - - - - PreserveNewest - - - - - - - - \ No newline at end of file diff --git a/Flow.Launcher.CrashReporter/Images/app_error.png b/Flow.Launcher.CrashReporter/Images/app_error.png deleted file mode 100644 index 70599f5042bfd2577ad4cf9d3b59556b26d75381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14970 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 diff --git a/Flow.Launcher.CrashReporter/Images/crash_go.png b/Flow.Launcher.CrashReporter/Images/crash_go.png deleted file mode 100644 index 2dd2c45f2efd5b15e2dc546844d51fb6d4cc1adb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1362 zcmV-Y1+DstP)6@3PO@YrpSVd#|;!kC0NblVQj(#}O=p`F zf$6~PE#HK{V8TDc2PbTpb5aILH-r|$^tjyk1HnCI2a0|Js?*sgu`4@JTsko|gKu(* z>EJ9MovPbFV1Gm0sxklBRm@LFh2D!0LP9T=A5GzlhOEI#Frxx z{v7b~`mG-TYgs8x4Rz$0k`sm|0#@;C#D~lK0##MnyC!_vb$l-PEH5C95n472DS)K*bnZOuqrO36RNBMc6YAf=>eUjfaH z^%Pk4q@Aa^0Dx#z<%wsA;jvhujAacw`MJ3%?H9sJbh`%e&jbOm9jo9}T{Q+n=1xWz z0juy$`g#1+%W@<_t~rPEC+w7$mL%9rt=K5!na!L(X{YR9@kW=>R{+3bc!{2VH*co{ z0MuHK&}gp#NnDf;ujKZ;T=Qn!>n{Le``i6;l&8;MA*E#hUJC%hm2+~kt{Qt)B3piu5y^$!V5!^uI?W6}%wh}8BO5bX+z-&+O zHt?kuzJR{O0o^ZsgcN;J$Tb0pd47X+V9i(JnC@v*8q~BmYg_fDyMU;5xdVg-B1CV@ zS3GnV(0QR#5eCHxgty=(EDVaX^FpVR_#mkl(hC>cKmQRauf5k~AzJS_@BEVL(YAG? z_njSW2+_*sA`wQ2*89$mw)G6QEdr~!^y{U1shZkBCbb3e5WT{nI8$|?aaP&*PTbPf zVls}JFH1Nlq-f&*3fm{7=#vJuH)>t(NVVq^kre@2V#j|Y+ZB*)>cD#W906ds8 UO%N9O2mk;807*qoM6N<$g1KURNB{r; diff --git a/Flow.Launcher.CrashReporter/Images/crash_stop.png b/Flow.Launcher.CrashReporter/Images/crash_stop.png deleted file mode 100644 index 022fbc197aedde870c33ad13d4456f4f7a46643f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1061 zcmV+=1ls$FP)=aMz|KFx6af)zY%GJR6T1+w3E|9XAqL{wh$4hk3Q@QsDdJ)7xSdI{tGV-Lc4zO0 zmm_|w<927}^WB|!^X4rHA<)WV%?7AdHwK!mmN#J5tD|#kxW}R5H~|j<>ITq7KoLAdAQ^VB0NDmPlhO6v<1mdv z8Td7te84z+51=zFou;y!@rm}dy{+3oI|}8jp()1M1{wzs0G*7pjhrRx^PzLn1#+J#TX)U^N235 zz_e0DI1f;_cF*uJ@nYT` zx-^tm0q@78I?!~5>|JhxuFTM?;nhsiH9%Du09+IKr3FCn%8NqO0S1@9AnQZcFCKxhNfP$@+Dbkf-Dd?aO3EMjq@e?Iq*^ME?UhFcHf zL^`(gR$z;Or#jvG!IuKoYC-^8vj3%1$PnflG*+DvPiVnkMkmRRt(nCNk4evfTXZ5j zs8{E3AH~hIFZ_jMCW@PBIEVYe_#j(V2vdep0lpg8Zz-_GCRJ)e`c|r7QJ;y&`Xaf) zov+Y56Bzvix``Q#c*1@18t?#)Vr@U}sj7Frhx**(!Dj%y(V}XY#Pisvowus1{#6Mg z%2|V7(7bc89n0(t`IQ{~Qwbr2LCz$AY`w`elr_ki462s~=0ef+-DA%91b{-_(1KOq zj8Ev)Nwt!>_O!hXff-zni2?*>bnBxnU)=q_%IkkyweSayGPUd{CW%_}Bi}!umj6zC fW1!h;c>{j{O?%_GqH!4|00000NkvXXu0mjfD4pi% diff --git a/Flow.Launcher.CrashReporter/Images/crash_warning.png b/Flow.Launcher.CrashReporter/Images/crash_warning.png deleted file mode 100644 index 8d29625ee731a16a1c29ecc6cd5f505a449f0069..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmV<80v-K{P)kh?ZJ9v_+5#4%NNw-R79O38FZ;HlsS!NjIyLIO)*2?WT0erCr?W zAm}1V5NRF6h=V;_^CTCMc)5G;_x^+?a5uhtclZ7Le(yf_IKq%0H01e_0UUJ)vkqh( zu&h9~gwhHqD#vF*x%KG0Xf2X|@Yb@}iI?}K1EPW=C|?6nu>&BQ5Wl9$N7FS#e*mia zmjK=RKWytMEgUQjJV3N`a=D$vpsldog}O@!=N%A1p#p-J7*Zf0FZ2f%Ky2kp5Y%~b z(~jJ4pXLq&R}fA+Ac8^-gehq_fjW8N^uPg#YW@L0%dB98GR=oiSaTJVoOGZ^o2q0E zwdw{SQJX3XH(Ip@NYm!c<=KA(XNn6 zfCH^s0m!uZ@Wpw2sGpJpw9i^<)eb(3?9)N*X^#C}#Ot+D}B+KjIc;|^$Ql?A}jrh0*E%+Sy( z4}hUfjd;wdJgq7LxY~@TYV3|+y?QPhUR>D2$X{^4U zh=y-m{fxQG-^>6MT1^Ge)uvfG=2ep2YC3>L^_j8w(L6f8Tt - - - - - \ No newline at end of file From 46c7c53477d572fde1f58bc8dc724b6432e58fdb Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sun, 25 Jun 2023 14:25:12 +0300 Subject: [PATCH 23/26] use AccelerateBuildsInVisualStudio for faster builds --- Directory.Build.props | 5 +++++ Flow.Launcher.sln | 1 + 2 files changed, 6 insertions(+) create mode 100644 Directory.Build.props diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 000000000..fa499273c --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,5 @@ + + + true + + \ No newline at end of file diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 1d403c5a1..df1daf1dd 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -47,6 +47,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .gitattributes = .gitattributes .gitignore = .gitignore appveyor.yml = appveyor.yml + Directory.Build.props = Directory.Build.props Directory.Build.targets = Directory.Build.targets Scripts\flowlauncher.nuspec = Scripts\flowlauncher.nuspec LICENSE = LICENSE From 9656e5cf4bbb87c939526c0382726fca95206f87 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Thu, 29 Jun 2023 08:48:25 +0800 Subject: [PATCH 24/26] Clarify initialized condition Co-authored-by: Jeremy Wu --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index 53dc6b528..a13d6c929 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -48,6 +48,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark public List Query(Query query) { + // For when the plugin being previously disabled and is now renabled if (!initialized) { LoadBookmarksIfEnabled(); From e695781e3b8a65e4cca56396de1a423d01ce9ecd Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 30 Jun 2023 21:03:34 +0930 Subject: [PATCH 25/26] New Crowdin updates (#2119) New translations --- Flow.Launcher/Languages/da.xaml | 6 ++ Flow.Launcher/Languages/de.xaml | 6 ++ Flow.Launcher/Languages/es-419.xaml | 6 ++ Flow.Launcher/Languages/es.xaml | 6 ++ Flow.Launcher/Languages/fr.xaml | 6 ++ Flow.Launcher/Languages/it.xaml | 88 ++++++++++--------- Flow.Launcher/Languages/ja.xaml | 6 ++ Flow.Launcher/Languages/ko.xaml | 6 ++ Flow.Launcher/Languages/nb.xaml | 6 ++ Flow.Launcher/Languages/nl.xaml | 6 ++ Flow.Launcher/Languages/pl.xaml | 6 ++ Flow.Launcher/Languages/pt-br.xaml | 6 ++ Flow.Launcher/Languages/pt-pt.xaml | 6 ++ Flow.Launcher/Languages/ru.xaml | 26 +++--- Flow.Launcher/Languages/sk.xaml | 6 ++ Flow.Launcher/Languages/sr.xaml | 6 ++ Flow.Launcher/Languages/tr.xaml | 6 ++ Flow.Launcher/Languages/uk-UA.xaml | 8 +- Flow.Launcher/Languages/zh-cn.xaml | 6 ++ Flow.Launcher/Languages/zh-tw.xaml | 30 ++++--- .../Languages/zh-tw.xaml | 2 +- .../Languages/sk.xaml | 2 +- .../Languages/zh-tw.xaml | 2 +- .../Languages/zh-tw.xaml | 20 ++--- .../Languages/zh-cn.xaml | 12 +-- .../Properties/Resources.sk-SK.resx | 2 +- .../Properties/Resources.uk-UA.resx | 2 +- 27 files changed, 205 insertions(+), 85 deletions(-) diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml index 62db18468..fb25199ed 100644 --- a/Flow.Launcher/Languages/da.xaml +++ b/Flow.Launcher/Languages/da.xaml @@ -155,6 +155,12 @@ Play a small sound when the search window opens Animation Use Animation in UI + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index 92cb4c88b..6a86aa171 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -155,6 +155,12 @@ Ton abspielen, wenn das Suchfenster geöffnet wird Animation Animationen in der Oberfläche verwenden + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/es-419.xaml b/Flow.Launcher/Languages/es-419.xaml index f7b7319f7..0c55d1257 100644 --- a/Flow.Launcher/Languages/es-419.xaml +++ b/Flow.Launcher/Languages/es-419.xaml @@ -155,6 +155,12 @@ Reproducir un sonido al abrir la ventana de búsqueda Animación Usar Animación en la Interfaz + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml index abb0cc217..6d9a720f3 100644 --- a/Flow.Launcher/Languages/es.xaml +++ b/Flow.Launcher/Languages/es.xaml @@ -155,6 +155,12 @@ Reproduce un pequeño sonido cuando se abre el cuadro de búsqueda Animación Usar animación en la Interfaz de Usuario + Velocidad de animación + Velocidad de animación de la interfaz de usuario + Lenta + Media + Rápida + Personalizada Reloj Fecha diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index 7af15bfd4..66bfd9219 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -155,6 +155,12 @@ Jouer un petit son lorsque la fenêtre de recherche s'ouvre Animation Utiliser l'animation dans l'interface + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index 33870fb8d..78fdfb35d 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -86,7 +86,7 @@ No results found Please try a different search. Plugin - Plugins + Plugin Cerca altri plugins Attivo Disabilita @@ -155,6 +155,12 @@ Riproduce un piccolo suono all'apertura della finestra di ricerca Animazione Usa l'animazione nell'interfaccia utente + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date @@ -166,13 +172,13 @@ Preview Hotkey Enter shortcut to show/hide preview in search window. Apri modificatori di risultato - Select a modifier key to open selected result via keyboard. + Seleziona un tasto modificatore per aprire il risultato selezionato via tastiera. Mostra tasto di scelta rapida - Show result selection hotkey with results. + Mostra tasto di scelta rapida dei risultati con i risultati. Tasti scelta rapida per ricerche personalizzate Custom Query Shortcut Built-in Shortcut - Query + Ricerca Shortcut Expansion Description @@ -184,12 +190,12 @@ Are you sure you want to delete shortcut: {0} with expansion {1}? Get text from clipboard. Get path from active explorer. - Query window shadow effect - Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. - Window Width Size + Effetto ombra della finestra di ricerca + L'effetto ombra utilizzerà in maniera sostanziale la GPU. Non consigliato se le performance del tuo computer sono limitate. + Dimensione larghezza della finestra You can also quickly adjust this by using Ctrl+[ and Ctrl+]. - Use Segoe Fluent Icons - Use Segoe Fluent Icons for query results where supported + Usa Icone Segoe Fluent + Usa Icone Segoe Fluent per risultati di ricerca dove supportate Press Key @@ -225,38 +231,38 @@ oppure vai su https://github.com/Flow-Launcher/Flow.Launcher/releases per scaricare gli aggiornamenti manualmente. Note di rilascio - Usage Tips - DevTools - Setting Folder - Log Folder + Suggerimenti di utilizzo + Strumenti per sviluppatori + Cartella delle impostazioni + Cartella dei Log Clear Logs Are you sure you want to delete all logs? Wizard - Select File Manager - Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", argument is /A "%d". - "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". - File Manager - Profile Name - File Manager Path - Arg For Folder - Arg For File + Seleziona Gestore File + Specificare la posizione del gestore file che si sta utilizzando e aggiungere argomenti se necessario. Gli argomenti di default sono "%d", e un percorso è inserito in quella posizione. Per esempio, se è richiesto un comando come "totalcmd.exe /A c:\windows", l'argomento è /A "%d". + "%f" è un argomento che rappresenta il percorso del file. Viene usato per sottolineare il nome del file/cartella quando si apre una posizione specifica del file in file manager di terze parti. Questo argomento è disponibile solo nell'elemento "Arg per File". Se il file manager non dispone di tale funzione, è possibile utilizzare "%d". + Gestore File + Nome Profilo + Percorso Gestore File + Arg Per Cartella + Arg Per Cartella Browser predefinito - The default setting follows the OS default browser setting. If specified separately, flow uses that browser. + L'impostazione predefinita segue l'opzione del browser predefinito del sistema operativo. Se specificato separatamente, Flow utilizza quel browser. Browser Nome del browser - Browser Path + Percorso Browser New Window New Tab - Private Mode + Modalità Privata - Change Priority - Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number - Please provide an valid integer for Priority! + Cambia Priorità + Maggiore è il numero, maggiore sarà il risultato che verrà classificato. Prova ad impostarlo a 5. Se si desidera che i risultati siano inferiori a qualsiasi altro plugin, fornire un numero negativo + Si prega di fornire un numero intero valido per la priorità! Vecchia parola chiave d'azione @@ -267,7 +273,7 @@ La nuova parola chiave d'azione non può essere vuota La nuova parola chiave d'azione è stata assegnata ad un altro plugin, per favore sceglierne una differente Successo - Completed successfully + Completato con successo Usa * se non vuoi specificare una parola chiave d'azione @@ -304,24 +310,24 @@ Flow Launcher ha riportato un errore - Please wait... + Attendere prego... - Checking for new update - You already have the latest Flow Launcher version - Update found - Updating... + Controllando per un nuovo aggiornamento + Al momento hai la versione più recente di Flow Launcher + Aggiornamento trovato + Aggiornando... - Flow Launcher was not able to move your user profile data to the new update version. - Please manually move your profile data folder from {0} to {1} + Flow Launcher non è stato in grado di spostare i dati del tuo profilo alla nuova versione aggiornata. + Si prega di spostare manualmente la cartella dei tuoi dati da {0} a {1} - New Update + Nuovo Aggiornamento E' disponibile la nuova release {0} di Flow Launcher Errore durante l'installazione degli aggiornamenti software Aggiorna Annulla - Update Failed - Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. + Aggiornamento fallito + Controlla la tua connessione e prova ad aggiornare le impostazioni del proxy su github-cloud.s3.amazonaws.com. Questo aggiornamento riavvierà Flow Launcher I seguenti file saranno aggiornati File aggiornati @@ -329,9 +335,9 @@ Salta - Welcome to Flow Launcher - Hello, this is the first time you are running Flow Launcher! - Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language + Benvenuto su Flow Launcher + Ciao, questa è la prima volta che stai eseguendo Flow Launcher! + Prima di iniziare, questa procedura guidata aiuterà nella creazione di Flow Launcher. Puoi saltarla se vuoi. Scegli una lingua Cerca ed esegue tutti i file e le applicazioni presenti sul PC Cerca tutto da applicazioni, file, segnalibri, YouTube, Twitter e altro ancora. Tutto dalla comodità della tastiera senza mai toccare il mouse. Flow Launcher si avvia con il tasto di scelta rapida qui sotto, provatelo subito. Per cambiarlo, fate clic sull'input e premete il tasto di scelta rapida desiderato sulla tastiera. diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml index 870d27293..441d998e2 100644 --- a/Flow.Launcher/Languages/ja.xaml +++ b/Flow.Launcher/Languages/ja.xaml @@ -155,6 +155,12 @@ Play a small sound when the search window opens Animation Use Animation in UI + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 32b9db20e..58f43fc3b 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -155,6 +155,12 @@ 검색창을 열 때 작은 소리를 재생합니다. 애니메이션 일부 UI에 애니메이션을 사용합니다. + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom 시계 날짜 diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml index 5d9a0aaa6..73792b726 100644 --- a/Flow.Launcher/Languages/nb.xaml +++ b/Flow.Launcher/Languages/nb.xaml @@ -155,6 +155,12 @@ Play a small sound when the search window opens Animation Use Animation in UI + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index 2a2741f08..feaae4f8a 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -155,6 +155,12 @@ Een klein geluid afspelen wanneer het zoekvenster wordt geopend Animatie Animatie gebruiken in UI + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index af5c53df7..a7e6bd87f 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -155,6 +155,12 @@ Play a small sound when the search window opens Animation Use Animation in UI + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index 6827be837..31cb7ae2a 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -155,6 +155,12 @@ Reproduzir um pequeno som ao abrir a janela de pesquisa Animação Utilizar Animação na Interface + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml index c45b5ebc7..9f25d312a 100644 --- a/Flow.Launcher/Languages/pt-pt.xaml +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -155,6 +155,12 @@ Reproduzir um som ao abrir a janela de pesquisa Animação Utilizar animações na aplicação + Velocidade da animação + A velocidade da animação da interface + Lenta + Média + Rápida + Personalizada Relógio Data diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml index cb8bf5b22..5d0cd58d3 100644 --- a/Flow.Launcher/Languages/ru.xaml +++ b/Flow.Launcher/Languages/ru.xaml @@ -1,7 +1,7 @@  - Регистрация хоткея {0} не удалась + Регистрация горячей клавиши {0} не удалась Не удалось запустить {0} Недопустимый формат файла плагина Flow Launcher Отображать это окно выше всех при этом запросе @@ -89,7 +89,7 @@ Плагины Найти больше плагинов Вкл. - Отключить + Откл. Настройка ключевого слова действия Горячая клавиша Ключевое слово текущего действия @@ -143,8 +143,8 @@ Шрифт результатов Оконный режим Прозрачность - Тема {0} не существует, откат к теме по умолчанию - Не удалось загрузить тему {0}, откат к теме по умолчанию + Тема «{0}» не существует, откат к теме по умолчанию + Не удалось загрузить тему «{0}», откат к теме по умолчанию Папка тем Открыть папку с темами Цветовая схема @@ -155,6 +155,12 @@ Воспроизведение небольшого звука при открытии окна поиска Анимация Использование анимации в меню + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Часы Дата @@ -164,14 +170,14 @@ Горячая клавиша Flow Launcher Введите ярлык, чтобы показать/скрыть Flow Launcher. Просмотр горячей клавиши - Введите ярлык для показа/скрытия предварительного просмотра в окне поиска. + Введите ярлык для показа/скрытия предпросмотра в окне поиска. Открыть ключ модификации результата Выберите клавишу-модификатор, чтобы открыть выбранный результат с помощью клавиатуры. Показать горячую клавишу Показать горячую клавишу выбора результата с результатами. - Задаваемые горячие клавиши для запросов - Custom Query Shortcut - Built-in Shortcut + Горячие клавиши пользовательского запроса + Ярлыки пользовательского запроса + Встроенные ярлыки Запрос Ярлык Расширение @@ -193,8 +199,8 @@ Нажмите клавишу - HTTP Прокси - Включить HTTP прокси + НТТР-прокси + Включить НТТР-прокси HTTP-сервер Порт Имя пользователя diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 8321ea6c5..0af0d1726 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -155,6 +155,12 @@ Po otvorení okna vyhľadávania prehrať krátky zvuk Animácia Animovať používateľské rozhranie + Rýchlosť animácie + Rýchlosť animácie grafického rozhrania + Pomaly + Stredne + Rýchlo + Vlastné Hodiny Dátum diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml index 56cbbad66..31fdb914a 100644 --- a/Flow.Launcher/Languages/sr.xaml +++ b/Flow.Launcher/Languages/sr.xaml @@ -155,6 +155,12 @@ Play a small sound when the search window opens Animation Use Animation in UI + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml index a595d8f63..7929c13a7 100644 --- a/Flow.Launcher/Languages/tr.xaml +++ b/Flow.Launcher/Languages/tr.xaml @@ -155,6 +155,12 @@ Arama penceresi açıldığında küçük bir ses oynat Animasyon Arayüzde Animasyon Kullan + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index b5ce6ead0..5bbc48d1a 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -155,6 +155,12 @@ Відтворювати невеликий звук при відкритті вікна пошуку Анімація Використовувати анімацію в інтерфейсі + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom Clock Date @@ -244,7 +250,7 @@ Arg For File - Default Web Browser + Веб-браузер за замовчуванням The default setting follows the OS default browser setting. If specified separately, flow uses that browser. Browser Browser Name diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 346077471..d357b5365 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -155,6 +155,12 @@ 启用激活音效 动画 启用动画 + 动画速度 + UI 动画速度 + + + + 自定义 时钟 日期 diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml index 96c64879a..428e6055c 100644 --- a/Flow.Launcher/Languages/zh-tw.xaml +++ b/Flow.Launcher/Languages/zh-tw.xaml @@ -52,7 +52,7 @@ 重啟 Flow Launcher 顯示/隱藏以前的結果。 保留上一個查詢 選擇上一個查詢 - Empty last Query + 清空上次搜尋關鍵字 最大結果顯示個數 You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. 全螢幕模式下忽略快捷鍵 @@ -87,7 +87,7 @@ Please try a different search. 插件 插件 - 瀏覽更多外掛 + 瀏覽更多插件 啟用 停用 觸發關鍵字設定 @@ -112,7 +112,7 @@ 插件商店 New Release Recently Updated - 外掛 + 插件 Installed 重新整理 安裝 @@ -155,6 +155,12 @@ 搜尋窗口打開時播放音效 動畫 使用介面動畫 + Animation Speed + The speed of the UI animation + Slow + Medium + Fast + Custom 時鐘 日期 @@ -180,7 +186,7 @@ 編輯 新增 請選擇一項 - 確定要刪除外掛 {0} 的快捷鍵嗎? + 確定要刪除插件 {0} 的快捷鍵嗎? 你確定你要刪除縮寫:{0} 展開為 {1}? 從剪貼簿取得文字。 從使用中的檔案總管獲得路徑。 @@ -255,7 +261,7 @@ 更改優先度 - 數字越大,查詢結果會排在越前面。嘗試將其設定為 5。如果你希望查詢結果低於任何其他外掛,請提供負數 + 數字越大,查詢結果會排在越前面。嘗試將其設定為 5。如果你希望查詢結果低於任何其他插件,請提供負數 請為優先度提供一個有效的整數! @@ -263,9 +269,9 @@ 新觸發關鍵字 取消 確定 - 找不到指定的外掛 + 找不到指定的插件 新觸發關鍵字不能為空白 - 新觸發關鍵字已經被指派給另一外掛,請設定其他關鍵字。 + 新觸發關鍵字已經被指派給另一個插件,請設定其他關鍵字。 成功 成功完成 如果不想設定觸發關鍵字,可以使用*代替 @@ -275,7 +281,7 @@ Press a custom hotkey to open Flow Launcher and input the specified query automatically. 預覽 快捷鍵不存在,請設定一個新的快捷鍵 - 外掛熱鍵無法使用 + 擴充功能熱鍵無法使用 更新 @@ -312,8 +318,8 @@ 找到更新 更新中... - Flow Launcher was not able to move your user profile data to the new update version. - Please manually move your profile data folder from {0} to {1} + Flow Launcher 無法將您的個人資料移動到新版本。 + 請手動將您的個人資料資料夾從 {0} 到 {1} 新的更新 發現 Flow Launcher 新版本 V{0} @@ -321,7 +327,7 @@ 更新 取消 更新失敗 - Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. + 檢查您的連線,並嘗試更新到 github-cloud.s3.amazonaws.com 的 Proxy 伺服器設定。 此更新需要重新啟動 Flow Launcher 下列檔案會被更新 更新檔案 @@ -337,7 +343,7 @@ Flow Launcher 需要搭配快捷鍵使用,請馬上試試吧! 如果想更改它,請點擊"輸入"並輸入你想要的快捷鍵。 快捷鍵 關鍵字與指令 - Search the web, launch applications or run various functions through Flow Launcher plugins. Certain functions start with an action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. + 透過 Flow Launcher 的擴充功能,您可以搜尋網頁、啟動應用程式或執行各種功能。某些功能以動作關鍵字開頭,若需要,也可以不使用動作關鍵字。請嘗試在 Flow Launcher 中輸入以下查詢。 開始使用 Flow Launcher吧! 大功告成! 別忘了使用快捷鍵以開始 :) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml index 95bca0684..8b21bd58d 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/zh-tw.xaml @@ -23,6 +23,6 @@ 瀏覽 其他 瀏覽器引擎 - 如果你沒有使用 Chrome、Firefox 或 Edge,或者使用它們的便攜版,你需要添加書籤資料位置並選擇正確的瀏覽器引擎,才能讓這個插件正常運作。 + 如果你沒有使用 Chrome、Firefox 或 Edge,或者使用它們的便攜版,你需要新增書籤資料位置並選擇正確的瀏覽器引擎,才能讓這個擴充功能正常運作。 例如:Brave 瀏覽器的引擎是 Chromium;而它的預設書籤資料位置是「%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData」。對於 Firefox 瀏覽器引擎,書籤資料位置是包含 places.sqlite 檔案的 userdata 資料夾。 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml index 3de63546b..47aa83ffd 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml @@ -34,7 +34,7 @@ Cesta k príkazovému riadku Vylúčené umiestnenia indexovania Použiť umiestnenie výsledku vyhľadávania ako pracovný priečinok spustiteľného súboru - Stlačením klávesu Enter otvoríte priečinok v predvolenom správcovi súborov + Stlačením klávesu Enter otvoriť priečinok v predvolenom správcovi súborov Na vyhľadanie cesty použiť vyhľadávanie v indexe Možnosti indexovania Vyhľadávanie: diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml index d04bd8edd..8f63eb659 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml @@ -38,7 +38,7 @@ Use Index Search For Path Search 索引選項 搜尋: - Path Search: + 路徑搜尋: File Content Search: Index Search: 快速存取: diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml index d39754574..8ed16fe90 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml @@ -2,26 +2,26 @@ - 正在下載外掛 + 正在下載擴充功能 下載完成 - 錯誤:無法下載外掛 + 錯誤:無法下載擴充功能 {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. - 安裝外掛 + 安裝擴充功能 Installing Plugin 下載並安裝 {0} - 移除外掛 + 解除安裝擴充功能 外掛安裝成功。正在重啟 Flow,請稍後... Unable to find the plugin.json metadata file from the extracted zip file. Error: A plugin which has the same or greater version with {0} already exists. - 安裝外掛時發生錯誤 + 安裝擴充功能時發生錯誤 嘗試安裝 {0} 時發生錯誤 無可用更新 所有插件均為最新版本 {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. - 外掛更新 + 擴充功能更新 This plugin has an update, would you like to see it? - 已安裝此外掛 + 已安裝此擴充功能 Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. Installing from an unknown source @@ -30,15 +30,15 @@ - 外掛管理 + 擴充功能管理 Management of installing, uninstalling or updating Flow Launcher plugins 未知的作者 打開網頁 - 查看外掛的網站 + 查看擴充功能的網站 查看原始碼 - 查看外掛的原始碼 + 查看擴充功能的原始碼 Suggest an enhancement or submit an issue Suggest an enhancement or submit an issue to the plugin developer Go to Flow's plugins repository diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml index 50d556e98..e9bf86065 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml @@ -20,21 +20,21 @@ 休眠计算机 保存所有 Flow Launcher 设置 用新内容刷新插件数据 - 打开 Flow Launcher 的日志目录 + 打开 Flow Launcher 的日志文件夹 检查新的 Flow Launcher 更新 访问 Flow Launcher 的文档以获取更多帮助以及使用技巧 - 打开存储 Flow Launcher 设置的位置 + 打开Flow Launcher 设置文件夹 成功 所有 Flow Launcher 设置已保存 重新加载了所有插件数据 您确定要关机吗? - 您确定要重启吗 - 您确定要以高级启动选项重启计算机吗? - 你确定要注销吗? + 您确定要重启吗? + 您确定要以高级启动选项重启吗? + 您确定要注销吗? 系统命令 - 系统系统相关的命令。例如,关机,锁定,设置等 + 提供操作系统相关的命令,如关机、锁定、设置等。 diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.sk-SK.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.sk-SK.resx index 5bac50743..f47b9ada3 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.sk-SK.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.sk-SK.resx @@ -226,7 +226,7 @@ Area Apps - Predvoľby hlasitosti aplikácia a predvoľby zariadenia + Hlasitosť aplikácie a predvoľby zariadenia Area System, Added in Windows 10, version 1903 diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx index 7ac9fb64f..3b598e40c 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx @@ -701,7 +701,7 @@ Area Gaming - Game Mode + Режим гри Area Gaming From da26a17163882d1c5952000627b0c348f67d7849 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 2 Jul 2023 16:52:47 +0930 Subject: [PATCH 26/26] New Crowdin updates (#2211) New translations --- Flow.Launcher/Languages/pt-br.xaml | 100 ++++++++++++++--------------- Flow.Launcher/Msg.xaml.cs | 4 +- 2 files changed, 53 insertions(+), 51 deletions(-) diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index 31cb7ae2a..5e7782755 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -16,15 +16,15 @@ Copiar Cortar Colar - Undo - Select All - File + Desfazer + Selecionar Tudo + Arquivo Pasta Texto Modo Gamer Suspender o uso de Teclas de Atalho. - Position Reset - Reset search window position + Redefinição de Posição + Redefinir posição da janela de busca Configurações @@ -32,21 +32,21 @@ Modo Portátil Armazene todas as configurações e dados do usuário em uma pasta (útil quando usado com unidades removíveis ou serviços em nuvem). Iniciar Flow Launcher com inicialização do sistema - Error setting launch on startup + Erro ao ativar início com o sistema Esconder Flow Launcher quando foco for perdido Não mostrar notificações de novas versões - Search Window Position - Remember Last Position - Monitor with Mouse Cursor - Monitor with Focused Window - Primary Monitor - Custom Monitor - Search Window Position on Monitor - Center - Center Top - Left Top - Right Top - Custom Position + Posição da Janela de Busca + Lembrar Última Posição + Monitor com o Cursor do Mouse + Monitor com Janela em Foco + Monitor Principal + Monitor Personalizado + Posição no Monitor da Janela de Busca + Centro + Centro Superior + Esquerda Superior + Direita Superior + Posição Personalizada Idioma Estilo da Última Consulta Mostrar/ocultar resultados anteriores quando o Lançador de Fluxos é reativado. @@ -54,7 +54,7 @@ Selecionar última consulta Limpar última consulta Máximo de resultados mostrados - You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. + Você também pode ajustar isso rapidamente usando CTRL+Mais e CTRL+Menos. Ignorar atalhos em tela cheia Desativar o Flow Launcher quando um aplicativo em tela cheia estiver ativado (recomendado para jogos). Gerenciador de Arquivos Padrões @@ -64,41 +64,41 @@ Caminho do Python Caminho do Node.js Selecione o executável do Node.js - Please select pythonw.exe - Always Start Typing in English Mode - Temporarily change your input method to English mode when activating Flow. + Por favor, selecione pythonw.exe + Sempre Começar Digitando em Modo Inglês + Temporariamente altere seu método de entrada para o Modo Inglês ao ativar o Flow. Atualizar Automaticamente Selecionar Esconder Flow Launcher na inicialização Ocultar ícone da bandeja - When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window. - Query Search Precision - Changes minimum match score required for results. - Search with Pinyin - Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese. - Always Preview - Always open preview panel when Flow activates. Press {0} to toggle preview. + Quando o ícone não está na bandeja, o menu de Configurações pode ser aberto ao clicar na janela de busca com o botão direito do mouse. + Precisão de Busca da Consulta + Altera a pontuação de match mínima exigida para resultados. + Buscar com Pinyin + Permite o uso de Pinyin para busca. Pinyin é o sistema padrão de escrita romanizada para traduzir chinês. + Sempre Pré-visualizar + Sempre abrir o painel de pré-visualização quando o Flow é ativado. Pressione {0} para ativar ou desativar a pré-visualização. O efeito de sombra não é permitido enquanto o tema atual tem o efeito de desfoque ativado - Search Plugin - Ctrl+F to search plugins + Buscar Plugin + Ctrl+F para buscar plugins Nenhum resultado encontrado - Please try a different search. + Por favor, tente uma busca diferente. Plugin Plugins Encontrar mais plugins Ativado Desabilitar - Action keyword Setting + Configuração de palavra-chave de Ação Palavras-chave de ação - Current action keyword - New action keyword - Change Action Keywords + Palavra-chave de ação atual + Nova palavra-chave de ação + Alterar Palavras-chave de Ação Prioridade atual Nova Prioridade Prioridade - Change Plugin Results Priority + Alterar Prioridade de Resultados de Plugin Diretório de Plugins por Tempo de inicialização: @@ -111,14 +111,14 @@ Loja de Plugins Nova Versão - Recently Updated + Atualizado Recentemente Plugins - Installed + Instalado Atualizar Instalar Desinstalar Atualizar - Plugin already installed + Plugin já instalado Nova Versão Este plugin foi atualizado nos últimos 7 dias Nova Atualização Disponível @@ -127,18 +127,18 @@ Tema - Appearance + Aparência Ver mais temas Como criar um tema Olá Explorador - Search for files, folders and file contents - WebSearch - Search the web with different search engine support - Program - Launch programs as admin or a different user - ProcessKiller - Terminate unwanted processes + Busque por arquivos, pastas e conteúdos de arquivos + Busca Web + Busque na Web com suporte para diferentes motores de busca + Programa + Inicie programas como administrador ou como um usuário diferente + Matador de Processos + Termine processos indesejados Fonte da caixa de Consulta Fonte do Resultado Modo Janela @@ -155,8 +155,8 @@ Reproduzir um pequeno som ao abrir a janela de pesquisa Animação Utilizar Animação na Interface - Animation Speed - The speed of the UI animation + Velocidade de Animação + Altere a velocidade da animação da interface Slow Medium Fast diff --git a/Flow.Launcher/Msg.xaml.cs b/Flow.Launcher/Msg.xaml.cs index ff84e1064..0bb02bbc5 100644 --- a/Flow.Launcher/Msg.xaml.cs +++ b/Flow.Launcher/Msg.xaml.cs @@ -69,11 +69,13 @@ namespace Flow.Launcher { tbSubTitle.Visibility = Visibility.Collapsed; } + if (!File.Exists(iconPath)) { imgIco.Source = await ImageLoader.LoadAsync(Path.Combine(Constant.ProgramDirectory, "Images\\app.png")); } - else { + else + { imgIco.Source = await ImageLoader.LoadAsync(iconPath); }