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 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/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.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.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 70599f504..000000000 Binary files a/Flow.Launcher.CrashReporter/Images/app_error.png and /dev/null differ diff --git a/Flow.Launcher.CrashReporter/Images/crash_go.png b/Flow.Launcher.CrashReporter/Images/crash_go.png deleted file mode 100644 index 2dd2c45f2..000000000 Binary files a/Flow.Launcher.CrashReporter/Images/crash_go.png and /dev/null differ diff --git a/Flow.Launcher.CrashReporter/Images/crash_stop.png b/Flow.Launcher.CrashReporter/Images/crash_stop.png deleted file mode 100644 index 022fbc197..000000000 Binary files a/Flow.Launcher.CrashReporter/Images/crash_stop.png and /dev/null differ diff --git a/Flow.Launcher.CrashReporter/Images/crash_warning.png b/Flow.Launcher.CrashReporter/Images/crash_warning.png deleted file mode 100644 index 8d29625ee..000000000 Binary files a/Flow.Launcher.CrashReporter/Images/crash_warning.png and /dev/null differ diff --git a/Flow.Launcher.CrashReporter/Properties/AssemblyInfo.cs b/Flow.Launcher.CrashReporter/Properties/AssemblyInfo.cs deleted file mode 100644 index acf2adca1..000000000 --- a/Flow.Launcher.CrashReporter/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,5 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -[assembly: AssemblyTitle("Flow.Launcher.CrashReporter")] -[assembly: Guid("0ea3743c-2c0d-4b13-b9ce-e5e1f85aea23")] \ No newline at end of file diff --git a/Flow.Launcher.CrashReporter/packages.config b/Flow.Launcher.CrashReporter/packages.config deleted file mode 100644 index ddad0d3b3..000000000 --- a/Flow.Launcher.CrashReporter/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file 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; diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 43a68a2a6..ca1674315 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -254,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(); @@ -290,4 +294,12 @@ namespace Flow.Launcher.Infrastructure.UserSettings RightTop, Custom } + + public enum AnimationSpeeds + { + Slow, + Medium, + Fast, + Custom + } } 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/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/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/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/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; } /// diff --git a/Flow.Launcher.Plugin/Query.cs b/Flow.Launcher.Plugin/Query.cs index f3a675c46..b41675a1a 100644 --- a/Flow.Launcher.Plugin/Query.cs +++ b/Flow.Launcher.Plugin/Query.cs @@ -9,16 +9,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; } @@ -39,49 +34,46 @@ 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; } - /// - /// 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; - /// - /// '*' 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; } [JsonIgnore] /// - /// 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); [JsonIgnore] @@ -94,14 +86,20 @@ 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. + /// [JsonIgnore] 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. + /// [JsonIgnore] public string ThirdSearch => SplitSearch(2); @@ -110,6 +108,7 @@ namespace Flow.Launcher.Plugin return index < SearchTerms.Length ? SearchTerms[index] : string.Empty; } + /// public override string ToString() => RawQuery; } } 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) diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 1c4467762..bfb0b0411 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; @@ -8,7 +9,7 @@ using System.Windows.Media; namespace Flow.Launcher.Plugin { /// - /// Describes the result of a plugin + /// Describes a result of a executed by a plugin /// public class Result { @@ -17,6 +18,8 @@ namespace Flow.Launcher.Plugin private string _icoPath; + private string _copyText = string.Empty; + /// /// The title of the result. This is always required. /// @@ -28,13 +31,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 +49,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 +80,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 +104,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; } /// @@ -126,12 +134,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 /// @@ -161,6 +163,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; @@ -170,9 +174,7 @@ namespace Flow.Launcher.Plugin /// public override int GetHashCode() { - var hashcode = (Title?.GetHashCode() ?? 0) ^ - (SubTitle?.GetHashCode() ?? 0); - return hashcode; + return HashCode.Combine(Title, SubTitle, AutoCompleteText, CopyText, IcoPath); } /// @@ -183,10 +185,10 @@ namespace Flow.Launcher.Plugin /// /// Additional data associated with this result + /// /// /// As external information for ContextMenu /// - /// public object ContextData { get; set; } /// @@ -230,10 +232,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 +246,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, 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.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] 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 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/en.xaml b/Flow.Launcher/Languages/en.xaml index 30c117378..bee595772 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -157,6 +157,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/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..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,6 +155,12 @@ Reproduzir um pequeno som ao abrir a janela de pesquisa Animação Utilizar Animação na Interface + Velocidade de Animação + Altere a velocidade da animação da interface + 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/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 4adfccff4..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.FromSeconds(0.25), + Duration = TimeSpan.FromMilliseconds(animationLength * 2 / 3), FillBehavior = FillBehavior.Stop }; @@ -391,7 +400,7 @@ namespace Flow.Launcher { From = Top + 10, To = Top, - Duration = TimeSpan.FromSeconds(0.25), + 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.FromSeconds(0.36), + Duration = TimeSpan.FromMilliseconds(animationLength), FillBehavior = FillBehavior.Stop }; @@ -408,7 +417,7 @@ namespace Flow.Launcher From = 0, To = 1, EasingFunction = easing, - Duration = TimeSpan.FromSeconds(0.36), + 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.FromSeconds(0.36), + 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.FromSeconds(0.36), + Duration = TimeSpan.FromMilliseconds(animationLength), FillBehavior = FillBehavior.Stop }; 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); } 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); diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 665d16b8f..1e886c022 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -2403,6 +2403,7 @@ - + + + + + - - + + - + + + + + + + + + + +  + + + + + + + + + + + + + + - +  - - - - + + diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 47a5cd672..231e65539 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -598,6 +598,33 @@ namespace Flow.Launcher.ViewModel set => Settings.UseAnimation = value; } + public class AnimationSpeed + { + 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 { get => Settings.UseSound; 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.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index 6f2b24f02..a13d6c929 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -10,6 +10,7 @@ using Flow.Launcher.Plugin.BrowserBookmark.Views; using System.IO; using System.Threading.Channels; using System.Threading.Tasks; +using System.Threading; namespace Flow.Launcher.Plugin.BrowserBookmark { @@ -20,20 +21,39 @@ namespace Flow.Launcher.Plugin.BrowserBookmark private static List cachedBookmarks = new List(); private static Settings _settings; - + + private static bool initialized = false; + public void Init(PluginInitContext context) { Main.context = context; - + _settings = context.API.LoadSettingJsonStorage(); - cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); + LoadBookmarksIfEnabled(); + } - _ = MonitorRefreshQueue(); + private static void LoadBookmarksIfEnabled() + { + if (context.CurrentPluginMetadata.Disabled) + { + // Don't load or monitor files if disabled + return; + } + + cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); + _ = MonitorRefreshQueueAsync(); + initialized = true; } public List Query(Query query) { + // For when the plugin being previously disabled and is now renabled + if (!initialized) + { + LoadBookmarksIfEnabled(); + } + string param = query.Search.TrimStart(); // Should top results be returned? (true if no search parameters have been passed) @@ -86,17 +106,24 @@ 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); if (reader.TryRead(out _)) { - ReloadData(); + ReloadAllBookmarks(false); } } + fileMonitorSemaphore.Release(); } private static readonly List Watchers = new(); @@ -104,17 +131,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; @@ -129,7 +158,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark }; watcher.EnableRaisingEvents = true; - + Watchers.Add(watcher); } @@ -138,11 +167,12 @@ namespace Flow.Launcher.Plugin.BrowserBookmark ReloadAllBookmarks(); } - public static void ReloadAllBookmarks() + public static void ReloadAllBookmarks(bool disposeFileWatchers = true) { cachedBookmarks.Clear(); - - cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); + if (disposeFileWatchers) + DisposeFileWatchers(); + LoadBookmarksIfEnabled(); } public string GetTranslatedPluginTitle() @@ -196,12 +226,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(); } } } 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 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