diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 000000000..6abd850ed --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,23 @@ +# For more information, see: +# https://github.com/actions/stale +name: Mark stale issues and pull requests + +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v4 + with: + stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.' + days-before-stale: 30 + days-before-close: 5 + days-before-pr-close: -1 + exempt-all-milestones: true + close-issue-message: 'This issue was closed because it has been stale for 5 days with no activity. If you feel this issue still needs attention please feel free to reopen.' \ No newline at end of file diff --git a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs index a9585f6a4..fab1b3e8f 100644 --- a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs +++ b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs @@ -2,6 +2,8 @@ using Flow.Launcher.Infrastructure.Logger; using System; using System.Collections.Generic; +using System.Net; +using System.Net.Http; using System.Text.Json; using System.Threading; using System.Threading.Tasks; @@ -10,43 +12,43 @@ namespace Flow.Launcher.Core.ExternalPlugins { public static class PluginsManifest { - static PluginsManifest() - { - UpdateTask = UpdateManifestAsync(); - } - - public static List UserPlugins { get; private set; } = new List(); - - public static Task UpdateTask { get; private set; } + private const string manifestFileUrl = "https://cdn.jsdelivr.net/gh/Flow-Launcher/Flow.Launcher.PluginsManifest@plugin_api_v2/plugins.json"; private static readonly SemaphoreSlim manifestUpdateLock = new(1); - public static Task UpdateManifestAsync() - { - if (manifestUpdateLock.CurrentCount == 0) - { - return UpdateTask; - } + private static string latestEtag = ""; - return UpdateTask = DownloadManifestAsync(); - } + public static List UserPlugins { get; private set; } = new List(); - private static async Task DownloadManifestAsync() + public static async Task UpdateManifestAsync(CancellationToken token = default) { try { - await manifestUpdateLock.WaitAsync().ConfigureAwait(false); + await manifestUpdateLock.WaitAsync(token).ConfigureAwait(false); - await using var jsonStream = await Http.GetStreamAsync("https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher.PluginsManifest/plugin_api_v2/plugins.json") - .ConfigureAwait(false); + var request = new HttpRequestMessage(HttpMethod.Get, manifestFileUrl); + request.Headers.Add("If-None-Match", latestEtag); - UserPlugins = await JsonSerializer.DeserializeAsync>(jsonStream).ConfigureAwait(false); + var response = await Http.SendAsync(request, token).ConfigureAwait(false); + + if (response.StatusCode == HttpStatusCode.OK) + { + Log.Info($"|PluginsManifest.{nameof(UpdateManifestAsync)}|Fetched plugins from manifest repo"); + + var json = await response.Content.ReadAsStreamAsync(token).ConfigureAwait(false); + + UserPlugins = await JsonSerializer.DeserializeAsync>(json, cancellationToken: token).ConfigureAwait(false); + + latestEtag = response.Headers.ETag.Tag; + } + else if (response.StatusCode != HttpStatusCode.NotModified) + { + Log.Warn($"|PluginsManifest.{nameof(UpdateManifestAsync)}|Http response for manifest file was {response.StatusCode}"); + } } catch (Exception e) { - Log.Exception("|PluginManagement.GetManifest|Encountered error trying to download plugins manifest", e); - - UserPlugins = new List(); + Log.Exception($"|PluginsManifest.{nameof(UpdateManifestAsync)}|Http request failed", e); } finally { diff --git a/Flow.Launcher.Core/Flow.Launcher.Core.csproj b/Flow.Launcher.Core/Flow.Launcher.Core.csproj index 3474b0373..fdd23a0d2 100644 --- a/Flow.Launcher.Core/Flow.Launcher.Core.csproj +++ b/Flow.Launcher.Core/Flow.Launcher.Core.csproj @@ -53,7 +53,7 @@ - + diff --git a/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs b/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs index 0982e4017..049d1c583 100644 --- a/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs +++ b/Flow.Launcher.Core/Plugin/ExecutablePlugin.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -22,18 +21,23 @@ namespace Flow.Launcher.Core.Plugin RedirectStandardOutput = true, RedirectStandardError = true }; + + // required initialisation for below request calls + _startInfo.ArgumentList.Add(string.Empty); } protected override Task RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) { - _startInfo.Arguments = $"\"{request}\""; + // since this is not static, request strings will build up in ArgumentList if index is not specified + _startInfo.ArgumentList[0] = request.ToString(); return ExecuteAsync(_startInfo, token); } protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) { - _startInfo.Arguments = $"\"{rpcRequest}\""; + // since this is not static, request strings will build up in ArgumentList if index is not specified + _startInfo.ArgumentList[0] = rpcRequest.ToString(); return Execute(_startInfo); } } -} \ No newline at end of file +} diff --git a/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs index 515b0bedc..9d76b6be0 100644 --- a/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs +++ b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs @@ -15,20 +15,6 @@ namespace Flow.Launcher.Core.Plugin private readonly AssemblyName assemblyName; - private static readonly ConcurrentDictionary loadedAssembly; - - static PluginAssemblyLoader() - { - var currentAssemblies = AppDomain.CurrentDomain.GetAssemblies(); - loadedAssembly = new ConcurrentDictionary( - currentAssemblies.Select(x => new KeyValuePair(x.FullName, default))); - - AppDomain.CurrentDomain.AssemblyLoad += (sender, args) => - { - loadedAssembly[args.LoadedAssembly.FullName] = default; - }; - } - internal PluginAssemblyLoader(string assemblyFilePath) { dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath); @@ -47,10 +33,9 @@ namespace Flow.Launcher.Core.Plugin // When resolving dependencies, ignore assembly depenedencies that already exits with Flow.Launcher // Otherwise duplicate assembly will be loaded and some weird behavior will occur, such as WinRT.Runtime.dll // will fail due to loading multiple versions in process, each with their own static instance of registration state - if (assemblyPath == null || ExistsInReferencedPackage(assemblyName)) - return null; + var existAssembly = Default.Assemblies.FirstOrDefault(x => x.FullName == assemblyName.FullName); - return LoadFromAssemblyPath(assemblyPath); + return existAssembly ?? (assemblyPath == null ? null : LoadFromAssemblyPath(assemblyPath)); } internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type) @@ -58,10 +43,5 @@ namespace Flow.Launcher.Core.Plugin var allTypes = assembly.ExportedTypes; return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Any(t => t == type)); } - - internal bool ExistsInReferencedPackage(AssemblyName assemblyName) - { - return loadedAssembly.ContainsKey(assemblyName.FullName); - } } } \ No newline at end of file diff --git a/Flow.Launcher.Core/Resource/AvailableLanguages.cs b/Flow.Launcher.Core/Resource/AvailableLanguages.cs index 0ad7ede1e..f541d3f35 100644 --- a/Flow.Launcher.Core/Resource/AvailableLanguages.cs +++ b/Flow.Launcher.Core/Resource/AvailableLanguages.cs @@ -19,6 +19,8 @@ namespace Flow.Launcher.Core.Resource public static Language Serbian = new Language("sr", "Srpski"); public static Language Portuguese_Portugal = new Language("pt-pt", "Português"); public static Language Portuguese_Brazil = new Language("pt-br", "Português (Brasil)"); + public static Language Spanish = new Language("es", "Spanish"); + public static Language Spanish_LatinAmerica = new Language("es-419", "Spanish (Latin America)"); public static Language Italian = new Language("it", "Italiano"); public static Language Norwegian_Bokmal = new Language("nb-NO", "Norsk Bokmål"); public static Language Slovak = new Language("sk", "Slovenský"); @@ -43,6 +45,8 @@ namespace Flow.Launcher.Core.Resource Serbian, Portuguese_Portugal, Portuguese_Brazil, + Spanish, + Spanish_LatinAmerica, Italian, Norwegian_Bokmal, Slovak, diff --git a/Flow.Launcher.Infrastructure/Constant.cs b/Flow.Launcher.Infrastructure/Constant.cs index cd49217a4..57b39e46e 100644 --- a/Flow.Launcher.Infrastructure/Constant.cs +++ b/Flow.Launcher.Infrastructure/Constant.cs @@ -21,7 +21,7 @@ namespace Flow.Launcher.Infrastructure public static readonly string PreinstalledDirectory = Path.Combine(ProgramDirectory, Plugins); public const string Issue = "https://github.com/Flow-Launcher/Flow.Launcher/issues/new"; public static readonly string Version = FileVersionInfo.GetVersionInfo(Assembly.Location.NonNull()).ProductVersion; - public const string Documentation = "https://flow-launcher.github.io/docs/#/usage-tips"; + public const string Documentation = "https://flowlauncher.com/docs/#/usage-tips"; public static readonly int ThumbnailSize = 64; private static readonly string ImagesDirectory = Path.Combine(ProgramDirectory, "Images"); @@ -43,8 +43,8 @@ namespace Flow.Launcher.Infrastructure public const string Settings = "Settings"; public const string Logs = "Logs"; - public const string Website = "https://flow-launcher.github.io"; + public const string Website = "https://flowlauncher.com"; public const string GitHub = "https://github.com/Flow-Launcher/Flow.Launcher"; - public const string Docs = "https://flow-launcher.github.io/docs"; + public const string Docs = "https://flowlauncher.com/docs"; } } diff --git a/Flow.Launcher.Infrastructure/Http/Http.cs b/Flow.Launcher.Infrastructure/Http/Http.cs index b45b6adcd..9f4146b7b 100644 --- a/Flow.Launcher.Infrastructure/Http/Http.cs +++ b/Flow.Launcher.Infrastructure/Http/Http.cs @@ -153,5 +153,13 @@ namespace Flow.Launcher.Infrastructure.Http var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, token); return await response.Content.ReadAsStreamAsync(); } + + /// + /// Asynchrously send an HTTP request. + /// + public static async Task SendAsync(HttpRequestMessage request, CancellationToken token = default) + { + return await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, token); + } } } diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 13277c7d9..04e11bf1a 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -74,7 +74,7 @@ namespace Flow.Launcher.Infrastructure.Image // To delete the images from the data dictionary based on the resizing of the Usage Dictionary // Double Check to avoid concurrent remove if (Data.Count > permissibleFactor * MaxCached) - foreach (var key in Data.OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached).Select(x => x.Key).ToArray()) + foreach (var key in Data.OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached).Select(x => x.Key)) Data.TryRemove(key, out _); semaphore.Release(); } diff --git a/Flow.Launcher.Infrastructure/Logger/Log.cs b/Flow.Launcher.Infrastructure/Logger/Log.cs index 26e305ace..75f208c9e 100644 --- a/Flow.Launcher.Infrastructure/Logger/Log.cs +++ b/Flow.Launcher.Infrastructure/Logger/Log.cs @@ -211,4 +211,4 @@ namespace Flow.Launcher.Infrastructure.Logger LogInternal(message, LogLevel.Warn); } } -} \ No newline at end of file +} diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index f86e0799c..1e583c9cc 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -1,4 +1,4 @@ - + net6.0-windows;net5.0-windows @@ -14,10 +14,10 @@ - 2.1.0 - 2.1.0 - 2.1.0 - 2.1.0 + 2.1.1 + 2.1.1 + 2.1.1 + 2.1.1 Flow.Launcher.Plugin Flow-Launcher MIT @@ -42,6 +42,7 @@ 4 AnyCPU false + ..\Output\Debug\Flow.Launcher.Plugin.xml diff --git a/Flow.Launcher.Plugin/GlyphInfo.cs b/Flow.Launcher.Plugin/GlyphInfo.cs index d24624d8f..730046e1d 100644 --- a/Flow.Launcher.Plugin/GlyphInfo.cs +++ b/Flow.Launcher.Plugin/GlyphInfo.cs @@ -7,5 +7,10 @@ using System.Windows.Media; namespace Flow.Launcher.Plugin { + /// + /// Text with FontFamily specified + /// + /// Font Family of this Glyph + /// Text/Unicode of the Glyph public record GlyphInfo(string FontFamily, string Glyph); } diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index 133ad25a5..69057820e 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -228,8 +228,27 @@ namespace Flow.Launcher.Plugin public void OpenDirectory(string DirectoryPath, string FileName = null); /// - /// Opens the url. The browser and mode used is based on what's configured in Flow's default browser settings. + /// Opens the URL with the given Uri object. + /// The browser and mode used is based on what's configured in Flow's default browser settings. + /// + public void OpenUrl(Uri url, bool? inPrivate = null); + + /// + /// Opens the URL with the given string. + /// The browser and mode used is based on what's configured in Flow's default browser settings. + /// Non-C# plugins should use this method. /// public void OpenUrl(string url, bool? inPrivate = null); + + /// + /// Opens the application URI with the given Uri object, e.g. obsidian://search-query-example + /// + public void OpenAppUri(Uri appUri); + + /// + /// Opens the application URI with the given string, e.g. obsidian://search-query-example + /// Non-C# plugins should use this method + /// + public void OpenAppUri(string appUri); } } diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 29f8198ab..4a5eb39af 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Windows.Media; @@ -10,11 +10,11 @@ namespace Flow.Launcher.Plugin { private string _pluginDirectory; - + private string _icoPath; /// - /// Provides the title of the result. This is always required. + /// The title of the result. This is always required. /// public string Title { get; set; } @@ -29,6 +29,13 @@ namespace Flow.Launcher.Plugin /// public string ActionKeywordAssigned { get; set; } + /// + /// 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. + /// + public string CopyText { get; set; } = string.Empty; + /// /// 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 @@ -36,6 +43,11 @@ namespace Flow.Launcher.Plugin /// public string AutoCompleteText { get; set; } + /// + /// Image Displayed on the result + /// Relative Path to the Image File + /// GlyphInfo is prioritized if not null + /// public string IcoPath { get { return _icoPath; } @@ -60,16 +72,23 @@ namespace Flow.Launcher.Plugin public IconDelegate Icon; /// - /// Information for Glyph Icon + /// Information for Glyph Icon (Prioritized than IcoPath/Icon if user enable Glyph Icons) /// - public GlyphInfo Glyph { get; init; } + public GlyphInfo Glyph { get; init; } /// - /// return true to hide flowlauncher after select result + /// 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 + /// /// public Func Action { get; set; } + /// + /// Priority of the current result + /// default: 0 + /// public int Score { get; set; } /// @@ -77,13 +96,11 @@ namespace Flow.Launcher.Plugin /// public IList TitleHighlightData { get; set; } - /// - /// A list of indexes for the characters to be highlighted in SubTitle - /// + [Obsolete("Deprecated as of Flow Launcher v1.9.1. Subtitle highlighting is no longer offered")] public IList SubTitleHighlightData { get; set; } /// - /// Only results that originQuery match with current query will be displayed in the panel + /// Query information associated with the result /// internal Query OriginQuery { get; set; } @@ -103,6 +120,7 @@ namespace Flow.Launcher.Plugin } } + /// public override bool Equals(object obj) { var r = obj as Result; @@ -110,12 +128,12 @@ namespace Flow.Launcher.Plugin var equality = string.Equals(r?.Title, Title) && string.Equals(r?.SubTitle, SubTitle) && string.Equals(r?.IcoPath, IcoPath) && - TitleHighlightData == r.TitleHighlightData && - SubTitleHighlightData == r.SubTitleHighlightData; + TitleHighlightData == r.TitleHighlightData; return equality; } + /// public override int GetHashCode() { var hashcode = (Title?.GetHashCode() ?? 0) ^ @@ -123,15 +141,17 @@ namespace Flow.Launcher.Plugin return hashcode; } + /// public override string ToString() { return Title + SubTitle; } - public Result() { } - /// - /// Additional data associate with this result + /// Additional data associated with this result + /// + /// As external information for ContextMenu + /// /// public object ContextData { get; set; } diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index 6c4ac8ebf..6588132b9 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -60,7 +60,7 @@ namespace Flow.Launcher.Plugin.SharedCommands try { - Process.Start(psi); + Process.Start(psi)?.Dispose(); } catch (System.ComponentModel.Win32Exception) { @@ -100,7 +100,7 @@ namespace Flow.Launcher.Plugin.SharedCommands psi.FileName = url; } - Process.Start(psi); + Process.Start(psi)?.Dispose(); } // This error may be thrown if browser path is incorrect catch (System.ComponentModel.Win32Exception) diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index ea4b25f5e..4ebff16a9 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -153,7 +153,6 @@ namespace Flow.Launcher DispatcherUnhandledException += ErrorReporting.DispatcherUnhandledException; } - /// /// let exception throw as normal is better for Debug /// @@ -179,4 +178,4 @@ namespace Flow.Launcher Current.MainWindow.Show(); } } -} \ No newline at end of file +} diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 7e72267f3..148179a7c 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -88,6 +88,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Flow.Launcher/Helper/HotKeyMapper.cs b/Flow.Launcher/Helper/HotKeyMapper.cs index 98327d8da..a3ad20f77 100644 --- a/Flow.Launcher/Helper/HotKeyMapper.cs +++ b/Flow.Launcher/Helper/HotKeyMapper.cs @@ -25,7 +25,7 @@ namespace Flow.Launcher.Helper internal static void OnToggleHotkey(object sender, HotkeyEventArgs args) { - if (!mainViewModel.GameModeStatus) + if (!mainViewModel.ShouldIgnoreHotkeys() && !mainViewModel.GameModeStatus) mainViewModel.ToggleFlowLauncher(); } diff --git a/Flow.Launcher/Images/Browser.png b/Flow.Launcher/Images/Browser.png index 619d1ad6a..5d475f82e 100644 Binary files a/Flow.Launcher/Images/Browser.png and b/Flow.Launcher/Images/Browser.png differ diff --git a/Flow.Launcher/Images/EXE.png b/Flow.Launcher/Images/EXE.png index e4c789689..ecc91bdb3 100644 Binary files a/Flow.Launcher/Images/EXE.png and b/Flow.Launcher/Images/EXE.png differ diff --git a/Flow.Launcher/Images/Link.png b/Flow.Launcher/Images/Link.png index c0c3607bd..3218c94c9 100644 Binary files a/Flow.Launcher/Images/Link.png and b/Flow.Launcher/Images/Link.png differ diff --git a/Flow.Launcher/Images/New Message.png b/Flow.Launcher/Images/New Message.png index 2dd2c45f2..fec9a7182 100644 Binary files a/Flow.Launcher/Images/New Message.png and b/Flow.Launcher/Images/New Message.png differ diff --git a/Flow.Launcher/Images/app_missing_img.png b/Flow.Launcher/Images/app_missing_img.png index 11d5466f0..b86c29ac9 100644 Binary files a/Flow.Launcher/Images/app_missing_img.png and b/Flow.Launcher/Images/app_missing_img.png differ diff --git a/Flow.Launcher/Images/calculator.png b/Flow.Launcher/Images/calculator.png index 102a86bde..4bdade8b7 100644 Binary files a/Flow.Launcher/Images/calculator.png and b/Flow.Launcher/Images/calculator.png differ diff --git a/Flow.Launcher/Images/cancel.png b/Flow.Launcher/Images/cancel.png index 022fbc197..69ec5a969 100644 Binary files a/Flow.Launcher/Images/cancel.png and b/Flow.Launcher/Images/cancel.png differ diff --git a/Flow.Launcher/Images/close.png b/Flow.Launcher/Images/close.png index 17c4363ad..2fb501a40 100644 Binary files a/Flow.Launcher/Images/close.png and b/Flow.Launcher/Images/close.png differ diff --git a/Flow.Launcher/Images/cmd.png b/Flow.Launcher/Images/cmd.png index 686583653..0ec0122d4 100644 Binary files a/Flow.Launcher/Images/cmd.png and b/Flow.Launcher/Images/cmd.png differ diff --git a/Flow.Launcher/Images/color.png b/Flow.Launcher/Images/color.png index da28583b1..a4301c9af 100644 Binary files a/Flow.Launcher/Images/color.png and b/Flow.Launcher/Images/color.png differ diff --git a/Flow.Launcher/Images/copy.png b/Flow.Launcher/Images/copy.png index 8f1fca752..bf12c186e 100644 Binary files a/Flow.Launcher/Images/copy.png and b/Flow.Launcher/Images/copy.png differ diff --git a/Flow.Launcher/Images/down.png b/Flow.Launcher/Images/down.png index 2349d8917..59d8ac7f3 100644 Binary files a/Flow.Launcher/Images/down.png and b/Flow.Launcher/Images/down.png differ diff --git a/Flow.Launcher/Images/file.png b/Flow.Launcher/Images/file.png index 36156767a..63058fd8e 100644 Binary files a/Flow.Launcher/Images/file.png and b/Flow.Launcher/Images/file.png differ diff --git a/Flow.Launcher/Images/find.png b/Flow.Launcher/Images/find.png index a3f0be1f5..017ebf5f2 100644 Binary files a/Flow.Launcher/Images/find.png and b/Flow.Launcher/Images/find.png differ diff --git a/Flow.Launcher/Images/folder.png b/Flow.Launcher/Images/folder.png index 569fa7049..2ae7250a2 100644 Binary files a/Flow.Launcher/Images/folder.png and b/Flow.Launcher/Images/folder.png differ diff --git a/Flow.Launcher/Images/history.png b/Flow.Launcher/Images/history.png index 2a3b72dc4..b298f8c82 100644 Binary files a/Flow.Launcher/Images/history.png and b/Flow.Launcher/Images/history.png differ diff --git a/Flow.Launcher/Images/image.png b/Flow.Launcher/Images/image.png index 7fc14c38e..9f26517e8 100644 Binary files a/Flow.Launcher/Images/image.png and b/Flow.Launcher/Images/image.png differ diff --git a/Flow.Launcher/Images/lock.png b/Flow.Launcher/Images/lock.png index 4aef7007b..daefde98e 100644 Binary files a/Flow.Launcher/Images/lock.png and b/Flow.Launcher/Images/lock.png differ diff --git a/Flow.Launcher/Images/logoff.png b/Flow.Launcher/Images/logoff.png index 0d1378830..4973b66d8 100644 Binary files a/Flow.Launcher/Images/logoff.png and b/Flow.Launcher/Images/logoff.png differ diff --git a/Flow.Launcher/Images/ok.png b/Flow.Launcher/Images/ok.png index f2dde98ef..945cceed3 100644 Binary files a/Flow.Launcher/Images/ok.png and b/Flow.Launcher/Images/ok.png differ diff --git a/Flow.Launcher/Images/open.png b/Flow.Launcher/Images/open.png index b5c7a0e19..817eb9269 100644 Binary files a/Flow.Launcher/Images/open.png and b/Flow.Launcher/Images/open.png differ diff --git a/Flow.Launcher/Images/plugin.png b/Flow.Launcher/Images/plugin.png index 6ff9b8b15..b213f0b04 100644 Binary files a/Flow.Launcher/Images/plugin.png and b/Flow.Launcher/Images/plugin.png differ diff --git a/Flow.Launcher/Images/recyclebin.png b/Flow.Launcher/Images/recyclebin.png index 2cc3b0116..878a02189 100644 Binary files a/Flow.Launcher/Images/recyclebin.png and b/Flow.Launcher/Images/recyclebin.png differ diff --git a/Flow.Launcher/Images/restart.png b/Flow.Launcher/Images/restart.png index aaa2ee711..ffdb6745e 100644 Binary files a/Flow.Launcher/Images/restart.png and b/Flow.Launcher/Images/restart.png differ diff --git a/Flow.Launcher/Images/search.png b/Flow.Launcher/Images/search.png index a3f0be1f5..017ebf5f2 100644 Binary files a/Flow.Launcher/Images/search.png and b/Flow.Launcher/Images/search.png differ diff --git a/Flow.Launcher/Images/settings.png b/Flow.Launcher/Images/settings.png index c61729fe0..79691ed95 100644 Binary files a/Flow.Launcher/Images/settings.png and b/Flow.Launcher/Images/settings.png differ diff --git a/Flow.Launcher/Images/shutdown.png b/Flow.Launcher/Images/shutdown.png index 7da7a528d..50d157efd 100644 Binary files a/Flow.Launcher/Images/shutdown.png and b/Flow.Launcher/Images/shutdown.png differ diff --git a/Flow.Launcher/Images/sleep.png b/Flow.Launcher/Images/sleep.png index 42426286d..3ca80f9fa 100644 Binary files a/Flow.Launcher/Images/sleep.png and b/Flow.Launcher/Images/sleep.png differ diff --git a/Flow.Launcher/Images/up.png b/Flow.Launcher/Images/up.png index e68def0b5..6940d80ad 100644 Binary files a/Flow.Launcher/Images/up.png and b/Flow.Launcher/Images/up.png differ diff --git a/Flow.Launcher/Images/update.png b/Flow.Launcher/Images/update.png index 6fe579091..3f0b6aa9b 100644 Binary files a/Flow.Launcher/Images/update.png and b/Flow.Launcher/Images/update.png differ diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml index 19e1951d8..9a6e6ebf4 100644 --- a/Flow.Launcher/Languages/da.xaml +++ b/Flow.Launcher/Languages/da.xaml @@ -126,8 +126,8 @@ Opdater Annuler Denne opdatering vil genstarte Flow Launcher - Følgende filer bliver opdateret + Følgende filer bliver opdateret Opdatereringsfiler - Opdateringsbeskrivelse + Opdateringsbeskrivelse diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index 39dc9b377..9572db8cb 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -126,8 +126,8 @@ Aktualisieren Abbrechen Diese Aktualisierung wird Flow Launcher neu starten - Folgende Dateien werden aktualisiert + Folgende Dateien werden aktualisiert Aktualisiere Dateien - Aktualisierungbeschreibung + Aktualisierungbeschreibung \ No newline at end of file diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 2b9d83000..6ec3bb4ef 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -18,6 +18,9 @@ Copy Cut Paste + File + Folder + Text Game Mode Suspend the use of Hotkeys. @@ -55,7 +58,7 @@ Shadow effect is not allowed while current theme has blur effect enabled - Plugins + Plugin Find more plugins On Off @@ -176,8 +179,8 @@ Browser Browser Name Browser Path - New Window - New Tab + New Window + New Tab Private Mode @@ -244,9 +247,9 @@ Update Failed Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. This upgrade will restart Flow Launcher - Following files will be updated + Following files will be updated Update files - Update description + Update description Skip @@ -281,7 +284,7 @@ > ping 8.8.8.8 Shell Command Bluetooth - Bluetooth in Windows Setting + Bluetooth in Windows Settings sn Sticky Notes diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index a8f280bd1..d9c46e6b9 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -132,8 +132,8 @@ Mettre à jour Annuler Flow Launcher doit redémarrer pour installer cette mise à jour - Les fichiers suivants seront mis à jour + Les fichiers suivants seront mis à jour Fichiers mis à jour - Description de la mise à jour + Description de la mise à jour diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index e85e49933..0302a1531 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -135,8 +135,8 @@ Aggiorna Annulla Questo aggiornamento riavvierà Flow Launcher - I seguenti file saranno aggiornati + I seguenti file saranno aggiornati File aggiornati - Descrizione aggiornamento + Descrizione aggiornamento \ No newline at end of file diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml index 937a1e504..3fc6296c1 100644 --- a/Flow.Launcher/Languages/ja.xaml +++ b/Flow.Launcher/Languages/ja.xaml @@ -138,8 +138,8 @@ アップデート キャンセル このアップデートでは、Flow Launcherの再起動が必要です - 次のファイルがアップデートされます + 次のファイルがアップデートされます 更新ファイル一覧 - アップデートの詳細 + アップデートの詳細 \ No newline at end of file diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index b26ce82fb..7184bef34 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -175,8 +175,8 @@ 브라우저 브라우저 이름 브라우저 경로 - 새 창 - 새 탭 + 새 창 + 새 탭 프라이빗 모드 @@ -241,9 +241,9 @@ 업데이트 실패 Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. 업데이트를 위해 Flow Launcher를 재시작합니다. - 아래 파일들이 업데이트됩니다. + 아래 파일들이 업데이트됩니다. 업데이트 파일 - 업데이트 설명 + 업데이트 설명 diff --git a/Flow.Launcher/Languages/nb-NO.xaml b/Flow.Launcher/Languages/nb-NO.xaml index 19f6cc36b..859ec20a0 100644 --- a/Flow.Launcher/Languages/nb-NO.xaml +++ b/Flow.Launcher/Languages/nb-NO.xaml @@ -135,8 +135,8 @@ Oppdater Avbryt Denne opgraderingen vil starte Flow Launcher på nytt - Følgende filer vil bli oppdatert + Følgende filer vil bli oppdatert Oppdateringsfiler - Oppdateringsbeskrivelse + Oppdateringsbeskrivelse diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index ca7fed180..822af21bf 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -126,8 +126,8 @@ Update Annuleer Deze upgrade zal Flow Launcher opnieuw opstarten - Volgende bestanden zullen worden geüpdatet + Volgende bestanden zullen worden geüpdatet Update bestanden - Update beschrijving + Update beschrijving diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index 4f3042be3..a8c423de1 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -126,8 +126,8 @@ Aktualizuj Anuluj Aby dokończyć proces aktualizacji Flow Launcher musi zostać zresetowany - Następujące pliki zostaną zaktualizowane + Następujące pliki zostaną zaktualizowane Aktualizuj pliki - Opis aktualizacji + Opis aktualizacji \ No newline at end of file diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index dce921ff7..a4dfe446c 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -135,8 +135,8 @@ Atualizar Cancelar Essa atualização reiniciará o Flow Launcher - Os seguintes arquivos serão atualizados + Os seguintes arquivos serão atualizados Atualizar arquivos - Atualizar descrição + Atualizar descrição \ No newline at end of file diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml index b14ed3c5d..764ba542b 100644 --- a/Flow.Launcher/Languages/pt-pt.xaml +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -16,16 +16,19 @@ Acerca Sair Fechar + Copiar + Cortar + Colar Modo de jogo Suspender utilização de teclas de atalho - Definições Flow launcher + Definições Flow Launcher Geral Modo portátil Guardar todas as definições e dados do utilizador numa pasta (indicado se utilizar discos amovíveis ou serviços cloud) - Iniciar Flow launcher ao arrancar o sistema - Ocultar Flow launcher ao perder o foco + Iniciar Flow Launcher ao arrancar o sistema + Ocultar Flow Launcher ao perder o foco Não notificar acerca de novas versões Memorizar localização anterior Idioma @@ -34,18 +37,18 @@ Manter última consulta Selecionar última consulta Limpar última consulta - N.º máximo de resultados + Número máximo de resultados Ignorar teclas de atalho se em ecrã completo Desativar ativação do Flow Launcher se alguma aplicação estiver em ecrã completo (recomendado para jogos) Gestor de ficheiros padrão Selecione o gestor de ficheiros utilizado para abrir a página - Default Web Browser - Setting for New Tab, New Window, Private Mode. + Navegador web padrão + Definições para Novo separador, Nova Janela e Modo privado Diretório Python Atualização automática Selecionar - Ocultar Flow Launcher no arranque - Ocultar ícone da bandeja + Ocultar Flow Launcher ao arrancar + Ocultar ícone na bandeja Precisão da pesquisa Altera a precisão mínima necessário para obter resultados Utilizar Pinyin @@ -61,12 +64,13 @@ Palavra-chave da ação Palavra-chave atual Nova palavra-chave + Alterar palavras-chave Prioridade atual Nova prioridade Prioridade Diretório de plugins - Autor: - Tempo de inicialização: + de + Tempo de arranque: Tempo de consulta: | Versão Site @@ -102,7 +106,7 @@ Tecla de atalho Tecla de atalho Flow Launcher - Introduza o atalho para mostrar/ocultar Flow launcher + Introduza o atalho para mostrar/ocultar Flow Launcher Tecla modificadora para os resultados Selecione a tecla modificadora para abrir o resultado através do teclado Mostrar tecla de atalho @@ -154,6 +158,7 @@ DevTools Pasta de definições Pasta de registos + Assistente Selecione o gestor de ficheiros @@ -166,14 +171,14 @@ Argumento para ficheiro - Default Web Browser - The default setting follows the OS default browser setting. If specified separately, flow uses that browser. - Browser - Browser Name - Browser Path - New Window - New Tab - Priviate Mode + Navegador web padrão + A definição padrão é a que for definida pelo sistema operativo. Se especificado outro, Flow Launcher utiliza esse navegador. + Navegador + Nome do navegador + Caminho do navegador + Nova janela + Novo separador + Modo privado Alterar prioridade @@ -190,7 +195,7 @@ Esta palavra-chave já está associada a um plugin. Por favor escolha outra. Sucesso Terminado com sucesso - Introduza a palavra-chave a utilizar para iniciar o plugin. Utilize * se não quiser utilizar esta funcionalidade e o plugin não será ativada com palavras-chave. + Introduza a palavra-chave a utilizar para iniciar o plugin. Utilize * se não quiser utilizar esta funcionalidade e o plugin não será ativado com palavras-chave. Tecla de atalho personalizada @@ -239,8 +244,47 @@ Falha ao atualizar Verifique a sua ligação e as definições do proxy estabelecidas para github-cloud.s3.amazonaws.com Esta atualização irá reiniciar o Flow Launcher - Os seguintes ficheiros serão atualizados + Os seguintes ficheiros serão atualizados Atualizar ficheiros - Atualizar descrição + Atualizar descrição + + + Ignorar + Obrigado por utilizar Flow Launcher + Esta é a primeira vez que está a utilizar Flow Launcher! + Antes de utilizar a aplicação, este assistente ajuda a configurar Flow Launcher. Caso pretenda, pode ignorar este passo. Por favor escolha um idioma. + Pesquise ficheiros/pastas e execute aplicações no seu computador + + Pode pesquisar aplicações, ficheiros, marcadores, YouTube, Twitter e muito mais. Tudo isto é efetuado através do teclado, dispensando a utilização do rato + + Flow Launcher é iniciado com a tecla de atalho abaixo. Experimente. Para alterar esta tecla de atalho, clique no valor e escolha a combinação de teclas a utilizar. + Teclas de atalho + Palavras-chave e comandos + Pesquise na Web, inicie aplicações e execute funções através dos nossos plugins. Algumas ações são invocadas com palavras-chave mas, se quiser, podem ser invocadas sem essas palavras-chave. Teste as consultas abaixo para experimentar. + Vamos iniciar Flow Launcher + Terminado. Desfrute de Flow Launcher. Não se esqueça da tecla de atalho :-) + + + + Recuar/Menu de contexto + Navegação nos itens + Abrir menu de contexto + Abrir pasta + Executar como administrador + Histórico de consultas + Voltar aos resultados no menu de contexto + Conclusão automática + Abrir/Executar item selecionado + Abrir janela de definições + Recarregar dados do plugin + + Meteorologia + Meteorologia no Google + > ping 8.8.8.8 + Comando de consola + Bluetooth + Bluetooth nas definições do Windows + sn + Sticky Notes diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml index d0d6ff0e5..63c8d46ee 100644 --- a/Flow.Launcher/Languages/ru.xaml +++ b/Flow.Launcher/Languages/ru.xaml @@ -126,8 +126,8 @@ Обновить Отмена Это обновление перезапустит Flow Launcher - Следующие файлы будут обновлены + Следующие файлы будут обновлены Обновить файлы - Описание обновления + Описание обновления \ No newline at end of file diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index aea9f1d64..dac746d0f 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -4,15 +4,18 @@ Nepodarilo sa registrovať klávesovú skratku {0} Nepodarilo sa spustiť {0} Neplatný formát súboru pre plugin Flow Launchera - Pri tomto zadaní umiestniť navrchu - Zrušiť umiestnenie navrchu pri tomto zadaní + Pri tomto výraze umiestniť navrchu + Zrušiť umiestnenie navrchu pri tomto výraze Spustiť dopyt: {0} - Posledný čas realizácie: {0} + Posledný čas spustenia: {0} Otvoriť Nastavenia O aplikácii Ukončiť Zavrieť + Kopírovať + Vystrihnúť + Prilepiť Herný režim Pozastaviť používanie klávesových skratiek. @@ -20,8 +23,8 @@ Nastavenia Flow Launchera Všeobecné Prenosný režim - Uloží všetky nastavenia a používateľské údaje do jedného priečinka (Užitočné pri vyberateľných diskoch a cloudových službách). - Spustiť Flow Launcher po štarte systému + Uloží všetky nastavenia a používateľské údaje do jedného priečinka (Užitočné pri vymeniteľných diskoch a cloudových službách). + Spustiť Flow Launcher pri spustení systému Schovať Flow Launcher po strate fokusu Nezobrazovať upozornenia na novú verziu Zapamätať si posledné umiestnenie @@ -31,11 +34,13 @@ Ponechať Označiť Vymazať - Max. výsledkov + Maximum výsledkov Ignorovať klávesové skratky v režime na celú obrazovku Zakázať aktiváciu Flow Launchera, keď je aktívna aplikácia na celú obrazovku (odporúčané pre hry). Predvolený správca súborov Vyberte správcu súborov, ktorý sa má použiť pri otváraní priečinka. + Predvolený webový prehliadač + Nastavenie pre novú kartu, nové okno, privátny režim. Priečinok s Pythonom Automatická aktualizácia Vybrať @@ -52,17 +57,18 @@ Nájsť ďalšie pluginy Zap. Vyp. - Nastavenie kľúčového slova akcie - Skratka akcie - Aktuálna akcia skratky: - Nová akcia skratky: - Aktuálna priorita: - Nová priorita: + Nastavenie akčného príkazu + Aktivačný príkaz + Aktuálny aktivačný príkaz + Nový aktivačný príkaz + Upraviť aktivačný príkaz + Aktuálna priorita + Nová priorita Priorita Priečinok s pluginmi od - Príprava: - Čas dopytu: + Inicializácia: + Trvanie dopytu: | Verzia Webstránka @@ -81,8 +87,8 @@ Písmo výsledkov Režim okno Nepriehľadnosť - Motív {0} neexistuje, návrat na predvolený motív - Nepodarilo sa nečítať motív {0}, návrat na predvolený motív + Motív {0} neexistuje, použije sa predvolený motív + Nepodarilo sa nečítať motív {0}, použije sa predvolený motív Priečinok s motívmi Otvoriť priečinok s motívmi Farebná schéma @@ -102,7 +108,7 @@ Vyberte modifikačný kláves na otvorenie vybraného výsledku pomocou klávesnice. Zobraziť klávesovú skratku Zobrazí klávesovú skratku spolu s výsledkami. - Vlastná klávesová skratka na vyhľadávanie + Klávesová skratka vlastného vyhľadávania Dopyt Odstrániť Upraviť @@ -111,7 +117,7 @@ Ste si istý, že chcete odstrániť klávesovú skratku {0} pre plugin? Tieňový efekt v poli vyhľadávania Tieňový efekt významne využíva GPU. Neodporúča sa, ak je výkon počítača obmedzený. - Veľkosť šírky okna + Šírka okna Použiť ikony Segoe Fluent Použiť ikony Segoe Fluent, ak sú podporované @@ -129,7 +135,7 @@ Neplatný formát portu Nastavenie proxy úspešne uložené Nastavenie proxy je v poriadku - Pripojenie proxy zlyhalo + Pripojenie proxy servera zlyhalo O aplikácii @@ -138,11 +144,11 @@ Dokumentácia Verzia Flow Launcher bol aktivovaný {0}-krát - Skontrolovať aktualizácie + Vyhľadať aktualizácie Je dostupná nová verzia {0}, chcete reštartovať Flow Launcher, aby sa mohol aktualizovať? - Kontrola aktualizácií zlyhala, prosím, skontrolujte pripojenie na internet a nastavenie proxy k api.github.com. + Vyhľadávanie aktualizácií zlyhalo, prosím, skontrolujte pripojenie na internet a nastavenie proxy server k api.github.com. - Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy k github-cloud.s3.amazonaws.com, + Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy servera k github-cloud.s3.amazonaws.com, alebo prejdite na https://github.com/Flow-Launcher/Flow.Launcher/releases pre manuálne stiahnutie aktualizácie. Poznámky k vydaniu @@ -162,33 +168,43 @@ Arg. pre priečinok Arg. pre súbor + + Predvolený webový prehliadač + Predvolené nastavenie je podľa nastavenia v systéme. Ak je zadaný osobitne, Flow použije tento prehliadač. + Prehliadač + Názov prehliadača + Cesta k prehliadaču + Nové okno + Nová karta + Privátny režim + Zmena priority - Vyššie číslo znamená, že výsledok bude vyššie. Skúste nastaviť napr. 5. Ak chcete, aby boli výsledky nižšie ako ktorékoľvek iné doplnky, zadajte záporné číslo + Väčšie číslo znamená, že výsledok bude vyššie. Skúste nastaviť napr. 5. Ak chcete, aby boli výsledky nižšie ako ktorékoľvek iné pluginy, zadajte záporné číslo Prosím, zadajte platné číslo pre prioritu! - Stará skratka akcie - Nová skratka akcie + Starý aktivačný príkaz + Nový aktivačný príkaz Zrušiť Hotovo Nepodarilo sa nájsť zadaný plugin - Nová skratka pre akciu nemôže byť prázdna - Nová skratka pre akciu bola priradená pre iný plugin, prosím, zvoľte inú skratku + Nový aktivačný príkaz nemôže byť prázdny + Nový aktivačný príkaz už bol priradený inému pluginu, prosím, zvoľte iný aktivačný príkaz Úspešné Úspešne dokončené - Zadajte skratku akcie, ktorá je potrebná na spustenie pluginu. Ak nechcete zadať skratku akcie, použite *. V tom prípade plugin funguje bez kľúčových slov. + Zadajte aktivačný príkaz, ktorý je potrebný na spustenie pluginu. Ak nechcete zadať aktivačný príkaz, použite * a plugin bude spustený bez aktivačného príkazu. - Klávesová skratka pre vlastné vyhľadávanie + Klávesová skratka vlastného vyhľadávania Stlačením klávesovej skratky sa automaticky vloží zadaný výraz. Náhľad - Klávesová skratka je nedostupná, prosím, zadajte novú + Klávesová skratka je nedostupná, prosím, zadajte novú skratku Neplatná klávesová skratka pluginu Aktualizovať - Klávesová skratka nedostupná + Klávesová skratka je nedostupná Verzia @@ -207,13 +223,13 @@ Flow Launcher zaznamenal chybu - Čakajte, prosím… + Čakajte, prosím... - Kontrolujú sa aktualizácie + Vyhľadávajú sa aktualizácie Už máte najnovšiu verziu Flow Launchera Bola nájdená aktualizácia - Aktualizuje sa… + Aktualizuje sa... Flow Launcher nedokázal presunúť používateľské údaje do aktualizovanej verzie. Prosím, presuňte profilový priečinok data z {0} do {1} @@ -224,11 +240,11 @@ Aktualizovať Zrušiť Aktualizácia zlyhala - Skontrolujte pripojenie a skúste aktualizovať nastavenia servera proxy na github-cloud.s3.amazonaws.com. + Skontrolujte pripojenie a skúste aktualizovať nastavenia servera proxy k github-cloud.s3.amazonaws.com. Tento upgrade reštartuje Flow Launcher - Nasledujúce súbory budú aktualizované + Nasledujúce súbory budú aktualizované Aktualizovať súbory - Aktualizovať popis + Aktualizovať popis Preskočiť @@ -239,8 +255,8 @@ Vyhľadávajte vo všetkých aplikáciách, súboroch, záložkách, YouTube, Twitteri a ďalších. Všetko z pohodlia klávesnice bez toho, aby ste sa dotkli myši. Flow Launcher sa spúšťa pomocou dole uvedenej klávesovej skratky, poďte si to vyskúšať. Ak ju chcete zmeniť, kliknite na vstupné pole a stlačte požadovanú klávesovú skratku na klávesnici. Klávesové skratky - Kľúčové slovo akcie a príkazy - Vyhľadávajte na webe, spúšťajte aplikácie alebo spúšťajte rôzne funkcie pomocou pluginov Flow Launchera. Niektoré funkcie sa začínajú kľúčovým slovom akcie a v prípade potreby ich možno použiť aj bez kľúčových slov akcie. Vyskúšajte nižšie uvedené dopyty v aplikácii Flow Launcher. + Aktivačné príkazy a príkazy + Vyhľadávajte na webe, spúšťajte aplikácie alebo spúšťajte rôzne funkcie pomocou pluginov Flow Launchera. Niektoré funkcie sa začínajú aktivačným príkazom a v prípade potreby ich možno použiť aj bez aktivačných príkazov. Vyskúšajte nižšie uvedené výrazy v aplikácii Flow Launcher. Spustite Flow Launcher Hotovo. Užite si Flow Launcher. Nezabudnite na klávesovú skratku na spustenie :) @@ -253,6 +269,7 @@ Spustiť ako správca História dopytov Návrat na výsledky z kontextovej ponuky + Automatické dokončovanie Otvoriť/spustiť vybranú položku Otvoriť okno s nastaveniami Znova načítať údaje pluginov diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml index 0394b398d..3efe27a47 100644 --- a/Flow.Launcher/Languages/sr.xaml +++ b/Flow.Launcher/Languages/sr.xaml @@ -135,8 +135,8 @@ Ažuriraj Otkaži Ova nadogradnja će ponovo pokrenuti Flow Launcher - Sledeće datoteke će biti ažurirane + Sledeće datoteke će biti ažurirane Ažuriraj datoteke - Opis ažuriranja + Opis ažuriranja \ No newline at end of file diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml index 421375df9..a39b55b23 100644 --- a/Flow.Launcher/Languages/tr.xaml +++ b/Flow.Launcher/Languages/tr.xaml @@ -139,8 +139,8 @@ Güncelle İptal Bu güncelleme Flow Launcher'u yeniden başlatacaktır - Aşağıdaki dosyalar güncelleştirilecektir + Aşağıdaki dosyalar güncelleştirilecektir Güncellenecek dosyalar - Güncelleme açıklaması + Güncelleme açıklaması \ No newline at end of file diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index b57676f8d..790314d0f 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -126,8 +126,8 @@ Оновити Скасувати Це оновлення перезавантажить Flow Launcher - Ці файли будуть оновлені + Ці файли будуть оновлені Оновити файли - Опис оновлення + Опис оновлення \ No newline at end of file diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 01cd97467..e404c4deb 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -226,9 +226,9 @@ 更新失败 检查网络是否可以连接至github-cloud.s3.amazonaws.com. 此次更新需要重启Flow Launcher - 下列文件会被更新 + 下列文件会被更新 更新文件 - 更新日志 + 更新日志 跳过 diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml index 294add207..cba62ead4 100644 --- a/Flow.Launcher/Languages/zh-tw.xaml +++ b/Flow.Launcher/Languages/zh-tw.xaml @@ -126,8 +126,8 @@ 更新 取消 此更新需要重新啟動 Flow Launcher - 下列檔案會被更新 + 下列檔案會被更新 更新檔案 - 更新日誌 + 更新日誌 diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 75120322f..714fcc53f 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -175,6 +175,9 @@ Style="{DynamicResource QueryBoxStyle}" Text="{Binding QueryText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Visibility="Visible"> + + + @@ -190,12 +193,25 @@ + + Style="{DynamicResource SearchIconStyle}" + Visibility="{Binding SearchIconVisibility}" /> diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index e842f6e88..366407182 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -18,6 +18,8 @@ using KeyEventArgs = System.Windows.Input.KeyEventArgs; using NotifyIcon = System.Windows.Forms.NotifyIcon; using Flow.Launcher.Infrastructure; using System.Windows.Media; +using Flow.Launcher.Infrastructure.Hotkey; +using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher { @@ -50,7 +52,18 @@ namespace Flow.Launcher { InitializeComponent(); } + private void OnCopy(object sender, ExecutedRoutedEventArgs e) + { + if (QueryTextBox.SelectionLength == 0) + { + _viewModel.ResultCopy(string.Empty); + } + else if (!string.IsNullOrEmpty(QueryTextBox.Text)) + { + _viewModel.ResultCopy(QueryTextBox.SelectedText); + } + } private async void OnClosing(object sender, CancelEventArgs e) { _settings.WindowTop = Top; @@ -59,6 +72,7 @@ namespace Flow.Launcher _viewModel.Save(); e.Cancel = true; await PluginManager.DisposePluginsAsync(); + Notification.Uninstall(); Environment.Exit(0); } @@ -159,6 +173,9 @@ namespace Flow.Launcher case nameof(Settings.Language): UpdateNotifyIconText(); break; + case nameof(Settings.Hotkey): + UpdateNotifyIconText(); + break; } }; } @@ -180,7 +197,7 @@ namespace Flow.Launcher private void UpdateNotifyIconText() { var menu = contextMenu; - ((MenuItem)menu.Items[1]).Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen"); + ((MenuItem)menu.Items[1]).Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") + " (" + _settings.Hotkey + ")"; ((MenuItem)menu.Items[2]).Header = InternationalizationManager.Instance.GetTranslation("GameMode"); ((MenuItem)menu.Items[3]).Header = InternationalizationManager.Instance.GetTranslation("iconTraySettings"); ((MenuItem)menu.Items[4]).Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit"); @@ -203,7 +220,7 @@ namespace Flow.Launcher }; var open = new MenuItem { - Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") + Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") + " (" +_settings.Hotkey + ")" }; var gamemode = new MenuItem { @@ -495,6 +512,24 @@ namespace Flow.Launcher e.Handled = true; } break; + case Key.Back: + var specialKeyState = GlobalHotkey.CheckModifiers(); + if (specialKeyState.CtrlPressed) + { + if (_viewModel.SelectedIsFromQueryResults() + && QueryTextBox.CaretIndex == QueryTextBox.Text.Length) + { + var queryWithoutActionKeyword = + QueryBuilder.Build(QueryTextBox.Text.Trim(), PluginManager.NonGlobalPlugins).Search; + + if (FilesFolders.IsLocationPathString(queryWithoutActionKeyword)) + { + _viewModel.BackspaceCommand.Execute(null); + e.Handled = true; + } + } + } + break; default: break; @@ -503,7 +538,7 @@ namespace Flow.Launcher private void MoveQueryTextToEnd() { - QueryTextBox.CaretIndex = QueryTextBox.Text.Length; + Dispatcher.Invoke(() => QueryTextBox.CaretIndex = QueryTextBox.Text.Length); } public void InitializeColorScheme() diff --git a/Flow.Launcher/Notification.cs b/Flow.Launcher/Notification.cs index d8f9fd45e..3f5565eeb 100644 --- a/Flow.Launcher/Notification.cs +++ b/Flow.Launcher/Notification.cs @@ -1,4 +1,5 @@ using Flow.Launcher.Infrastructure; +using Microsoft.Toolkit.Uwp.Notifications; using System; using System.IO; using Windows.Data.Xml.Dom; @@ -8,10 +9,17 @@ namespace Flow.Launcher { internal static class Notification { + internal static bool legacy = Environment.OSVersion.Version.Build < 19041; + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "")] + internal static void Uninstall() + { + if (!legacy) + ToastNotificationManagerCompat.Uninstall(); + } + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "")] public static void Show(string title, string subTitle, string iconPath) { - var legacy = Environment.OSVersion.Version.Build < 19041; // Handle notification for win7/8/early win10 if (legacy) { @@ -24,13 +32,11 @@ namespace Flow.Launcher ? Path.Combine(Constant.ProgramDirectory, "Images\\app.png") : iconPath; - var xml = $"\"meziantou\"/{title}" + - $"{subTitle}"; - var toastXml = new XmlDocument(); - toastXml.LoadXml(xml); - var toast = new ToastNotification(toastXml); - ToastNotificationManager.CreateToastNotifier("Flow Launcher").Show(toast); - + new ToastContentBuilder() + .AddText(title, hintMaxLines: 1) + .AddText(subTitle) + .AddAppLogoOverride(new Uri(Icon)) + .Show(); } private static void LegacyShow(string title, string subTitle, string iconPath) diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 5b490bede..81f7a2389 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -209,21 +209,53 @@ namespace Flow.Launcher explorer.Start(); } - public void OpenUrl(string url, bool? inPrivate = null) + private void OpenUri(Uri uri, bool? inPrivate = null) { - var browserInfo = _settingsVM.Settings.CustomBrowser; - - var path = browserInfo.Path == "*" ? "" : browserInfo.Path; - - if (browserInfo.OpenInTab) + if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) { - url.OpenInBrowserTab(path, inPrivate ?? browserInfo.EnablePrivate, browserInfo.PrivateArg); + var browserInfo = _settingsVM.Settings.CustomBrowser; + + var path = browserInfo.Path == "*" ? "" : browserInfo.Path; + + if (browserInfo.OpenInTab) + { + uri.AbsoluteUri.OpenInBrowserTab(path, inPrivate ?? browserInfo.EnablePrivate, browserInfo.PrivateArg); + } + else + { + uri.AbsoluteUri.OpenInBrowserWindow(path, inPrivate ?? browserInfo.EnablePrivate, browserInfo.PrivateArg); + } } else { - url.OpenInBrowserWindow(path, inPrivate ?? browserInfo.EnablePrivate, browserInfo.PrivateArg); - } + Process.Start(new ProcessStartInfo() + { + FileName = uri.AbsoluteUri, + UseShellExecute = true + })?.Dispose(); + return; + } + } + + public void OpenUrl(string url, bool? inPrivate = null) + { + OpenUri(new Uri(url), inPrivate); + } + + public void OpenUrl(Uri url, bool? inPrivate = null) + { + OpenUri(url, inPrivate); + } + + public void OpenAppUri(string appUri) + { + OpenUri(new Uri(appUri)); + } + + public void OpenAppUri(Uri appUri) + { + OpenUri(appUri); } public event FlowLauncherGlobalKeyboardEventHandler GlobalKeyboardEvent; @@ -254,4 +286,4 @@ namespace Flow.Launcher #endregion } -} +} \ No newline at end of file diff --git a/Flow.Launcher/ReportWindow.xaml.cs b/Flow.Launcher/ReportWindow.xaml.cs index 7318fe4cd..6a9fd60e0 100644 --- a/Flow.Launcher/ReportWindow.xaml.cs +++ b/Flow.Launcher/ReportWindow.xaml.cs @@ -52,8 +52,8 @@ namespace Flow.Launcher var link = new Hyperlink { IsEnabled = true }; link.Inlines.Add(url); link.NavigateUri = new Uri(url); - link.RequestNavigate += (s, e) => SearchWeb.NewTabInBrowser(e.Uri.ToString()); - link.Click += (s, e) => SearchWeb.NewTabInBrowser(url); + link.RequestNavigate += (s, e) => SearchWeb.OpenInBrowserTab(e.Uri.ToString()); + link.Click += (s, e) => SearchWeb.OpenInBrowserTab(url); paragraph.Inlines.Add(textBeforeUrl); paragraph.Inlines.Add(link); diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index a021d5de2..b4d7e78a7 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -1469,6 +1469,7 @@ - + @@ -1486,7 +1487,7 @@ @@ -1520,6 +1519,7 @@ Grid.RowSpan="3" Grid.ColumnSpan="3" Margin="0,5" + HorizontalAlignment="Right" ui:FocusVisualHelper.IsTemplateFocusTarget="True" Background="{DynamicResource ToggleSwitchContainerBackground}" /> - - - - - - + diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index cd4ae2b14..98bc391dd 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -195,8 +195,10 @@ HorizontalAlignment="Left" VerticalAlignment="Center" Orientation="Horizontal"> - New Tab - New Window + + - + @@ -102,7 +99,7 @@ TargetType="{x:Type CheckBox}"> - + @@ -110,11 +107,16 @@ - @@ -948,9 +950,9 @@ FlowDirection="LeftToRight"> - - - + + +