From 7ae91b1af326126c88f22cc60d63f85b8b5263e8 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sat, 14 Jun 2025 20:45:30 +1000 Subject: [PATCH 1/2] Release 1.20.1 | Plugin 4.6.0 (#3706) --- .github/ISSUE_TEMPLATE/bug-report.yaml | 2 + .github/update_release_pr.py | 35 +- .github/workflows/default_plugins.yml | 85 +- .../Plugin/JsonRPCPluginSettings.cs | 2 +- Flow.Launcher.Core/Resource/Theme.cs | 10 +- .../Resource/TranslationConverter.cs | 25 - .../NativeMethods.txt | 5 + .../Storage/FlowLauncherJsonStorage.cs | 4 +- .../Storage/PluginBinaryStorage.cs | 4 +- .../Storage/PluginJsonStorage.cs | 4 +- .../UserSettings/CustomShortcutModel.cs | 8 + Flow.Launcher.Infrastructure/Win32Helper.cs | 5 + .../Flow.Launcher.Plugin.csproj | 8 +- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 19 +- .../SharedCommands/SearchWeb.cs | 43 +- Flow.Launcher/Helper/ErrorReporting.cs | 10 +- Flow.Launcher/HotkeyControlDialog.xaml | 12 +- Flow.Launcher/Languages/ar.xaml | 10 + Flow.Launcher/Languages/cs.xaml | 10 + Flow.Launcher/Languages/da.xaml | 12 +- Flow.Launcher/Languages/de.xaml | 10 + Flow.Launcher/Languages/en.xaml | 1 + Flow.Launcher/Languages/es-419.xaml | 10 + Flow.Launcher/Languages/es.xaml | 12 +- Flow.Launcher/Languages/fr.xaml | 12 +- Flow.Launcher/Languages/he.xaml | 10 + Flow.Launcher/Languages/it.xaml | 10 + Flow.Launcher/Languages/ja.xaml | 10 + Flow.Launcher/Languages/ko.xaml | 10 + Flow.Launcher/Languages/nb.xaml | 10 + Flow.Launcher/Languages/nl.xaml | 10 + Flow.Launcher/Languages/pl.xaml | 10 + Flow.Launcher/Languages/pt-br.xaml | 10 + Flow.Launcher/Languages/pt-pt.xaml | 14 +- Flow.Launcher/Languages/ru.xaml | 10 + Flow.Launcher/Languages/sk.xaml | 14 +- Flow.Launcher/Languages/sr.xaml | 10 + Flow.Launcher/Languages/tr.xaml | 60 +- Flow.Launcher/Languages/uk-UA.xaml | 10 + Flow.Launcher/Languages/vi.xaml | 10 + Flow.Launcher/Languages/zh-cn.xaml | 12 +- Flow.Launcher/Languages/zh-tw.xaml | 10 + Flow.Launcher/MainWindow.xaml.cs | 144 +- Flow.Launcher/Properties/Resources.fr-FR.resx | 130 -- Flow.Launcher/Properties/Resources.he-IL.resx | 130 -- Flow.Launcher/PublicAPIInstance.cs | 53 +- .../InstalledPluginDisplayKeyword.xaml | 3 +- .../Resources/CustomControlTemplate.xaml | 73 + .../Resources/Pages/WelcomePage1.xaml | 6 +- .../Resources/Pages/WelcomePage2.xaml | 10 +- .../Resources/Pages/WelcomePage4.xaml | 2 +- .../Resources/Pages/WelcomePage5.xaml | 10 +- .../Resources/SettingWindowStyle.xaml | 1 - .../SettingsPaneGeneralViewModel.cs | 2 + .../Views/SettingsPaneGeneral.xaml | 3 +- .../Views/SettingsPaneHotkey.xaml | 2 +- Flow.Launcher/Themes/Base.xaml | 4 + Flow.Launcher/WelcomeWindow.xaml | 6 +- .../ChromiumBookmarkLoader.cs | 128 +- .../FirefoxBookmarkLoader.cs | 266 +-- .../Helper/FaviconHelper.cs | 76 + .../Languages/ar.xaml | 2 + .../Languages/cs.xaml | 2 + .../Languages/da.xaml | 2 + .../Languages/de.xaml | 2 + .../Languages/en.xaml | 2 + .../Languages/es-419.xaml | 2 + .../Languages/es.xaml | 2 + .../Languages/fr.xaml | 2 + .../Languages/he.xaml | 2 + .../Languages/it.xaml | 2 + .../Languages/ja.xaml | 2 + .../Languages/ko.xaml | 2 + .../Languages/nb.xaml | 2 + .../Languages/nl.xaml | 2 + .../Languages/pl.xaml | 2 + .../Languages/pt-br.xaml | 2 + .../Languages/pt-pt.xaml | 2 + .../Languages/ru.xaml | 2 + .../Languages/sk.xaml | 2 + .../Languages/sr.xaml | 2 + .../Languages/tr.xaml | 2 + .../Languages/uk-UA.xaml | 2 + .../Languages/vi.xaml | 2 + .../Languages/zh-cn.xaml | 2 + .../Languages/zh-tw.xaml | 2 + .../Main.cs | 12 +- .../Models/Settings.cs | 2 + .../Views/SettingsControl.xaml | 8 + .../Flow.Launcher.Plugin.Explorer.csproj | 3 +- .../Languages/ar.xaml | 11 + .../Languages/cs.xaml | 11 + .../Languages/da.xaml | 11 + .../Languages/de.xaml | 11 + .../Languages/en.xaml | 3 + .../Languages/es-419.xaml | 11 + .../Languages/es.xaml | 11 + .../Languages/fr.xaml | 11 + .../Languages/he.xaml | 11 + .../Languages/it.xaml | 11 + .../Languages/ja.xaml | 11 + .../Languages/ko.xaml | 11 + .../Languages/nb.xaml | 11 + .../Languages/nl.xaml | 11 + .../Languages/pl.xaml | 11 + .../Languages/pt-br.xaml | 11 + .../Languages/pt-pt.xaml | 13 +- .../Languages/ru.xaml | 11 + .../Languages/sk.xaml | 11 + .../Languages/sr.xaml | 11 + .../Languages/tr.xaml | 23 +- .../Languages/uk-UA.xaml | 11 + .../Languages/vi.xaml | 11 + .../Languages/zh-cn.xaml | 11 + .../Languages/zh-tw.xaml | 11 + .../Everything/EverythingSearchManager.cs | 31 +- .../Search/ResultManager.cs | 8 +- .../ViewModels/ActionKeywordModel.cs | 2 + .../Views/ExplorerSettings.xaml | 1429 +++++++++-------- .../Views/ExplorerSettings.xaml.cs | 58 +- .../Languages/tr.xaml | 10 +- .../PluginsManager.cs | 106 +- .../Languages/tr.xaml | 24 +- .../Programs/ShellLinkHelper.cs | 9 +- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 141 +- .../Languages/tr.xaml | 8 +- .../Flow.Launcher.Plugin.WebSearch/Main.cs | 4 +- .../Properties/Resources.pt-PT.resx | 6 +- README.md | 4 + appveyor.yml | 15 +- 130 files changed, 2271 insertions(+), 1577 deletions(-) delete mode 100644 Flow.Launcher.Core/Resource/TranslationConverter.cs delete mode 100644 Flow.Launcher/Properties/Resources.fr-FR.resx delete mode 100644 Flow.Launcher/Properties/Resources.he-IL.resx create mode 100644 Plugins/Flow.Launcher.Plugin.BrowserBookmark/Helper/FaviconHelper.cs diff --git a/.github/ISSUE_TEMPLATE/bug-report.yaml b/.github/ISSUE_TEMPLATE/bug-report.yaml index 294c06fc19e..11a92195500 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/bug-report.yaml @@ -16,6 +16,8 @@ body: I have checked that this issue has not already been reported. - label: > I am using the latest version of Flow Launcher. + - label: > + I am using the prerelease version of Flow Launcher. - type: textarea attributes: diff --git a/.github/update_release_pr.py b/.github/update_release_pr.py index f90f6181d01..ccea511b31f 100644 --- a/.github/update_release_pr.py +++ b/.github/update_release_pr.py @@ -11,7 +11,7 @@ def get_github_prs(token: str, owner: str, repo: str, label: str = "", state: st token (str): GitHub token. owner (str): The owner of the repository. repo (str): The name of the repository. - label (str): The label name. + label (str): The label name. Filter is not applied when empty string. state (str): State of PR, e.g. open, closed, all Returns: @@ -89,7 +89,7 @@ def get_prs(pull_request_items: list[dict], label: str = "", state: str = "all") Args: pull_request_items (list[dict]): List of PR items. - label (str): The label name. + label (str): The label name. Filter is not applied when empty string. state (str): State of PR, e.g. open, closed, all Returns: @@ -99,14 +99,36 @@ def get_prs(pull_request_items: list[dict], label: str = "", state: str = "all") pr_list = [] count = 0 for pr in pull_request_items: - if pr["state"] == state and [item for item in pr["labels"] if item["name"] == label]: + if state in [pr["state"], "all"] and (not label or [item for item in pr["labels"] if item["name"] == label]): pr_list.append(pr) count += 1 - print(f"Found {count} PRs with {label if label else 'no'} label and state as {state}") + print(f"Found {count} PRs with {label if label else 'no filter on'} label and state as {state}") return pr_list +def get_prs_assignees(pull_request_items: list[dict], label: str = "", state: str = "all") -> list[str]: + """ + Returns a list of pull request assignees after applying the label and state filters, excludes jjw24. + + Args: + pull_request_items (list[dict]): List of PR items. + label (str): The label name. Filter is not applied when empty string. + state (str): State of PR, e.g. open, closed, all + + Returns: + list: A list of strs, where each string is an assignee name. List is not distinct, so can contain + duplicate names. + Returns an empty list if none are found. + """ + assignee_list = [] + for pr in pull_request_items: + if state in [pr["state"], "all"] and (not label or [item for item in pr["labels"] if item["name"] == label]): + [assignee_list.append(assignee["login"]) for assignee in pr["assignees"] if assignee["login"] != "jjw24" ] + + print(f"Found {len(assignee_list)} assignees with {label if label else 'no filter on'} label and state as {state}") + + return assignee_list def get_pr_descriptions(pull_request_items: list[dict]) -> str: """ @@ -208,6 +230,11 @@ def update_pull_request_description(token: str, owner: str, repo: str, pr_number description_content += f"## Features\n{get_pr_descriptions(enhancement_prs)}" if enhancement_prs else "" description_content += f"## Bug fixes\n{get_pr_descriptions(bug_fix_prs)}" if bug_fix_prs else "" + assignees = list(set(get_prs_assignees(pull_requests, "enhancement", "closed") + get_prs_assignees(pull_requests, "bug", "closed"))) + assignees.sort(key=str.lower) + + description_content += f"### Authors:\n{', '.join(assignees)}" + update_pull_request_description( github_token, repository_owner, repository_name, release_pr[0]["number"], description_content ) diff --git a/.github/workflows/default_plugins.yml b/.github/workflows/default_plugins.yml index 85acafae1fb..ec8dfcd4ef8 100644 --- a/.github/workflows/default_plugins.yml +++ b/.github/workflows/default_plugins.yml @@ -3,11 +3,10 @@ name: Publish Default Plugins on: push: branches: ['master'] - paths: ['Plugins/**'] workflow_dispatch: jobs: - build: + publish: runs-on: windows-latest steps: @@ -17,39 +16,24 @@ jobs: with: dotnet-version: 7.0.x - - name: Determine New Plugin Updates - uses: dorny/paths-filter@v3 - id: changes - with: - filters: | - browserbookmark: - - 'Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json' - calculator: - - 'Plugins/Flow.Launcher.Plugin.Calculator/plugin.json' - explorer: - - 'Plugins/Flow.Launcher.Plugin.Explorer/plugin.json' - pluginindicator: - - 'Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json' - pluginsmanager: - - 'Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json' - processkiller: - - 'Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json' - program: - - 'Plugins/Flow.Launcher.Plugin.Program/plugin.json' - shell: - - 'Plugins/Flow.Launcher.Plugin.Shell/plugin.json' - sys: - - 'Plugins/Flow.Launcher.Plugin.Sys/plugin.json' - url: - - 'Plugins/Flow.Launcher.Plugin.Url/plugin.json' - websearch: - - 'Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json' - windowssettings: - - 'Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json' - base: 'master' + - name: Update Plugins To Production Version + run: | + $version = "1.0.0" + Get-Content appveyor.yml | ForEach-Object { + if ($_ -match "version:\s*'(\d+\.\d+\.\d+)\.") { + $version = $matches[1] + } + } + + $jsonFiles = Get-ChildItem -Path ".\Plugins\*\plugin.json" + foreach ($file in $jsonFiles) { + $plugin_old_ver = Get-Content $file.FullName -Raw | ConvertFrom-Json + (Get-Content $file) -replace '"Version"\s*:\s*".*?"', "`"Version`": `"$version`"" | Set-Content $file + $plugin_new_ver = Get-Content $file.FullName -Raw | ConvertFrom-Json + Write-Host "Updated" $plugin_old_ver.Name "version from" $plugin_old_ver.Version "to" $plugin_new_ver.Version + } - name: Get BrowserBookmark Version - if: steps.changes.outputs.browserbookmark == 'true' id: updated-version-browserbookmark uses: notiz-dev/github-action-json-property@release with: @@ -57,14 +41,12 @@ jobs: prop_path: 'Version' - name: Build BrowserBookmark - if: steps.changes.outputs.browserbookmark == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.BrowserBookmark" 7z a -tzip "Flow.Launcher.Plugin.BrowserBookmark.zip" "./Flow.Launcher.Plugin.BrowserBookmark/*" rm -r "Flow.Launcher.Plugin.BrowserBookmark" - name: Publish BrowserBookmark - if: steps.changes.outputs.browserbookmark == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.BrowserBookmark" @@ -76,7 +58,6 @@ jobs: - name: Get Calculator Version - if: steps.changes.outputs.calculator == 'true' id: updated-version-calculator uses: notiz-dev/github-action-json-property@release with: @@ -84,14 +65,12 @@ jobs: prop_path: 'Version' - name: Build Calculator - if: steps.changes.outputs.calculator == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.Calculator" 7z a -tzip "Flow.Launcher.Plugin.Calculator.zip" "./Flow.Launcher.Plugin.Calculator/*" rm -r "Flow.Launcher.Plugin.Calculator" - name: Publish Calculator - if: steps.changes.outputs.calculator == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.Calculator" @@ -103,7 +82,6 @@ jobs: - name: Get Explorer Version - if: steps.changes.outputs.explorer == 'true' id: updated-version-explorer uses: notiz-dev/github-action-json-property@release with: @@ -111,14 +89,12 @@ jobs: prop_path: 'Version' - name: Build Explorer - if: steps.changes.outputs.explorer == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.Explorer" 7z a -tzip "Flow.Launcher.Plugin.Explorer.zip" "./Flow.Launcher.Plugin.Explorer/*" rm -r "Flow.Launcher.Plugin.Explorer" - name: Publish Explorer - if: steps.changes.outputs.explorer == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.Explorer" @@ -130,7 +106,6 @@ jobs: - name: Get PluginIndicator Version - if: steps.changes.outputs.pluginindicator == 'true' id: updated-version-pluginindicator uses: notiz-dev/github-action-json-property@release with: @@ -138,14 +113,12 @@ jobs: prop_path: 'Version' - name: Build PluginIndicator - if: steps.changes.outputs.pluginindicator == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.PluginIndicator/Flow.Launcher.Plugin.PluginIndicator.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.PluginIndicator" 7z a -tzip "Flow.Launcher.Plugin.PluginIndicator.zip" "./Flow.Launcher.Plugin.PluginIndicator/*" rm -r "Flow.Launcher.Plugin.PluginIndicator" - name: Publish PluginIndicator - if: steps.changes.outputs.pluginindicator == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.PluginIndicator" @@ -157,7 +130,6 @@ jobs: - name: Get PluginsManager Version - if: steps.changes.outputs.pluginsmanager == 'true' id: updated-version-pluginsmanager uses: notiz-dev/github-action-json-property@release with: @@ -165,14 +137,12 @@ jobs: prop_path: 'Version' - name: Build PluginsManager - if: steps.changes.outputs.pluginsmanager == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.PluginsManager/Flow.Launcher.Plugin.PluginsManager.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.PluginsManager" 7z a -tzip "Flow.Launcher.Plugin.PluginsManager.zip" "./Flow.Launcher.Plugin.PluginsManager/*" rm -r "Flow.Launcher.Plugin.PluginsManager" - name: Publish PluginsManager - if: steps.changes.outputs.pluginsmanager == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.PluginsManager" @@ -184,7 +154,6 @@ jobs: - name: Get ProcessKiller Version - if: steps.changes.outputs.processkiller == 'true' id: updated-version-processkiller uses: notiz-dev/github-action-json-property@release with: @@ -192,14 +161,12 @@ jobs: prop_path: 'Version' - name: Build ProcessKiller - if: steps.changes.outputs.processkiller == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.ProcessKiller" 7z a -tzip "Flow.Launcher.Plugin.ProcessKiller.zip" "./Flow.Launcher.Plugin.ProcessKiller/*" rm -r "Flow.Launcher.Plugin.ProcessKiller" - name: Publish ProcessKiller - if: steps.changes.outputs.processkiller == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller" @@ -211,7 +178,6 @@ jobs: - name: Get Program Version - if: steps.changes.outputs.program == 'true' id: updated-version-program uses: notiz-dev/github-action-json-property@release with: @@ -219,14 +185,12 @@ jobs: prop_path: 'Version' - name: Build Program - if: steps.changes.outputs.program == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj' --framework net7.0-windows10.0.19041.0 -c Release -o "Flow.Launcher.Plugin.Program" 7z a -tzip "Flow.Launcher.Plugin.Program.zip" "./Flow.Launcher.Plugin.Program/*" rm -r "Flow.Launcher.Plugin.Program" - name: Publish Program - if: steps.changes.outputs.program == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.Program" @@ -238,7 +202,6 @@ jobs: - name: Get Shell Version - if: steps.changes.outputs.shell == 'true' id: updated-version-shell uses: notiz-dev/github-action-json-property@release with: @@ -246,14 +209,12 @@ jobs: prop_path: 'Version' - name: Build Shell - if: steps.changes.outputs.shell == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.Shell" 7z a -tzip "Flow.Launcher.Plugin.Shell.zip" "./Flow.Launcher.Plugin.Shell/*" rm -r "Flow.Launcher.Plugin.Shell" - name: Publish Shell - if: steps.changes.outputs.shell == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.Shell" @@ -265,7 +226,6 @@ jobs: - name: Get Sys Version - if: steps.changes.outputs.sys == 'true' id: updated-version-sys uses: notiz-dev/github-action-json-property@release with: @@ -273,14 +233,12 @@ jobs: prop_path: 'Version' - name: Build Sys - if: steps.changes.outputs.sys == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.Sys" 7z a -tzip "Flow.Launcher.Plugin.Sys.zip" "./Flow.Launcher.Plugin.Sys/*" rm -r "Flow.Launcher.Plugin.Sys" - name: Publish Sys - if: steps.changes.outputs.sys == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.Sys" @@ -292,7 +250,6 @@ jobs: - name: Get Url Version - if: steps.changes.outputs.url == 'true' id: updated-version-url uses: notiz-dev/github-action-json-property@release with: @@ -300,14 +257,12 @@ jobs: prop_path: 'Version' - name: Build Url - if: steps.changes.outputs.url == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.Url" 7z a -tzip "Flow.Launcher.Plugin.Url.zip" "./Flow.Launcher.Plugin.Url/*" rm -r "Flow.Launcher.Plugin.Url" - name: Publish Url - if: steps.changes.outputs.url == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.Url" @@ -319,7 +274,6 @@ jobs: - name: Get WebSearch Version - if: steps.changes.outputs.websearch == 'true' id: updated-version-websearch uses: notiz-dev/github-action-json-property@release with: @@ -327,14 +281,12 @@ jobs: prop_path: 'Version' - name: Build WebSearch - if: steps.changes.outputs.websearch == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.WebSearch/Flow.Launcher.Plugin.WebSearch.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.WebSearch" 7z a -tzip "Flow.Launcher.Plugin.WebSearch.zip" "./Flow.Launcher.Plugin.WebSearch/*" rm -r "Flow.Launcher.Plugin.WebSearch" - name: Publish WebSearch - if: steps.changes.outputs.websearch == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.WebSearch" @@ -346,7 +298,6 @@ jobs: - name: Get WindowsSettings Version - if: steps.changes.outputs.windowssettings == 'true' id: updated-version-windowssettings uses: notiz-dev/github-action-json-property@release with: @@ -354,14 +305,12 @@ jobs: prop_path: 'Version' - name: Build WindowsSettings - if: steps.changes.outputs.windowssettings == 'true' run: | dotnet publish 'Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj' --framework net7.0-windows -c Release -o "Flow.Launcher.Plugin.WindowsSettings" 7z a -tzip "Flow.Launcher.Plugin.WindowsSettings.zip" "./Flow.Launcher.Plugin.WindowsSettings/*" rm -r "Flow.Launcher.Plugin.WindowsSettings" - name: Publish WindowsSettings - if: steps.changes.outputs.windowssettings == 'true' uses: softprops/action-gh-release@v2 with: repository: "Flow-Launcher/Flow.Launcher.Plugin.WindowsSettings" diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs b/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs index 003e72a5d86..435d97ab712 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs @@ -12,7 +12,7 @@ namespace Flow.Launcher.Core.Plugin { - public class JsonRPCPluginSettings + public class JsonRPCPluginSettings : ISavable { public required JsonRpcConfigurationModel? Configuration { get; init; } diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 059359694b4..a6e8dc6bf54 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -671,7 +671,15 @@ private void SetBlurForWindow(string theme, BackdropTypes backdropType) windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property.Name == "Background")); windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, new SolidColorBrush(Colors.Transparent))); } - + + // For themes with blur enabled, the window border is rendered by the system, so it's treated as a simple rectangle regardless of thickness. + //(This is to avoid issues when the window is forcibly changed to a rectangular shape during snap scenarios.) + var cornerRadiusSetter = windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Border.CornerRadiusProperty); + if (cornerRadiusSetter != null) + cornerRadiusSetter.Value = new CornerRadius(0); + else + windowBorderStyle.Setters.Add(new Setter(Border.CornerRadiusProperty, new CornerRadius(0))); + // Apply the blur effect Win32Helper.DWMSetBackdropForWindow(mainWindow, backdropType); ColorizeWindow(theme, backdropType); diff --git a/Flow.Launcher.Core/Resource/TranslationConverter.cs b/Flow.Launcher.Core/Resource/TranslationConverter.cs deleted file mode 100644 index eb0032758b4..00000000000 --- a/Flow.Launcher.Core/Resource/TranslationConverter.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Globalization; -using System.Windows.Data; -using CommunityToolkit.Mvvm.DependencyInjection; -using Flow.Launcher.Plugin; - -namespace Flow.Launcher.Core.Resource -{ - public class TranslationConverter : IValueConverter - { - // We should not initialize API in static constructor because it will create another API instance - private static IPublicAPI api = null; - private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService(); - - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - var key = value.ToString(); - if (string.IsNullOrEmpty(key)) return key; - return API.GetTranslation(key); - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => - throw new InvalidOperationException(); - } -} diff --git a/Flow.Launcher.Infrastructure/NativeMethods.txt b/Flow.Launcher.Infrastructure/NativeMethods.txt index 53c877c4f05..edc71feef24 100644 --- a/Flow.Launcher.Infrastructure/NativeMethods.txt +++ b/Flow.Launcher.Infrastructure/NativeMethods.txt @@ -42,6 +42,11 @@ MONITORINFOEXW WM_ENTERSIZEMOVE WM_EXITSIZEMOVE +WM_NCLBUTTONDBLCLK +WM_SYSCOMMAND + +SC_MAXIMIZE +SC_MINIMIZE OleInitialize OleUninitialize diff --git a/Flow.Launcher.Infrastructure/Storage/FlowLauncherJsonStorage.cs b/Flow.Launcher.Infrastructure/Storage/FlowLauncherJsonStorage.cs index 158e0cdf58c..857490badd2 100644 --- a/Flow.Launcher.Infrastructure/Storage/FlowLauncherJsonStorage.cs +++ b/Flow.Launcher.Infrastructure/Storage/FlowLauncherJsonStorage.cs @@ -2,11 +2,13 @@ using System.Threading.Tasks; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Infrastructure.Storage { - public class FlowLauncherJsonStorage : JsonStorage where T : new() + // Expose ISaveable interface in derived class to make sure we are calling the new version of Save method + public class FlowLauncherJsonStorage : JsonStorage, ISavable where T : new() { private static readonly string ClassName = "FlowLauncherJsonStorage"; diff --git a/Flow.Launcher.Infrastructure/Storage/PluginBinaryStorage.cs b/Flow.Launcher.Infrastructure/Storage/PluginBinaryStorage.cs index 01da96d6259..0e0906e7328 100644 --- a/Flow.Launcher.Infrastructure/Storage/PluginBinaryStorage.cs +++ b/Flow.Launcher.Infrastructure/Storage/PluginBinaryStorage.cs @@ -1,11 +1,13 @@ using System.IO; using System.Threading.Tasks; using Flow.Launcher.Infrastructure.Logger; +using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Infrastructure.Storage { - public class PluginBinaryStorage : BinaryStorage where T : new() + // Expose ISaveable interface in derived class to make sure we are calling the new version of Save method + public class PluginBinaryStorage : BinaryStorage, ISavable where T : new() { private static readonly string ClassName = "PluginBinaryStorage"; diff --git a/Flow.Launcher.Infrastructure/Storage/PluginJsonStorage.cs b/Flow.Launcher.Infrastructure/Storage/PluginJsonStorage.cs index 14715294958..d5908307129 100644 --- a/Flow.Launcher.Infrastructure/Storage/PluginJsonStorage.cs +++ b/Flow.Launcher.Infrastructure/Storage/PluginJsonStorage.cs @@ -2,11 +2,13 @@ using System.Threading.Tasks; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Infrastructure.Storage { - public class PluginJsonStorage : JsonStorage where T : new() + // Expose ISaveable interface in derived class to make sure we are calling the new version of Save method + public class PluginJsonStorage : JsonStorage, ISavable where T : new() { // Use assembly name to check which plugin is using this storage public readonly string AssemblyName; diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomShortcutModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomShortcutModel.cs index 2d15b54c5be..2603d46751c 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomShortcutModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomShortcutModel.cs @@ -1,6 +1,8 @@ using System; using System.Text.Json.Serialization; using System.Threading.Tasks; +using CommunityToolkit.Mvvm.DependencyInjection; +using Flow.Launcher.Plugin; namespace Flow.Launcher.Infrastructure.UserSettings { @@ -53,6 +55,12 @@ public class BaseBuiltinShortcutModel : ShortcutBaseModel { public string Description { get; set; } + public string LocalizedDescription => API.GetTranslation(Description); + + // We should not initialize API in static constructor because it will create another API instance + private static IPublicAPI api = null; + private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService(); + public BaseBuiltinShortcutModel(string key, string description) { Key = key; diff --git a/Flow.Launcher.Infrastructure/Win32Helper.cs b/Flow.Launcher.Infrastructure/Win32Helper.cs index 1be803fd4bd..86e7b7c971c 100644 --- a/Flow.Launcher.Infrastructure/Win32Helper.cs +++ b/Flow.Launcher.Infrastructure/Win32Helper.cs @@ -324,6 +324,11 @@ public static Point TransformPixelsToDIP(Visual visual, double unitX, double uni public const int WM_ENTERSIZEMOVE = (int)PInvoke.WM_ENTERSIZEMOVE; public const int WM_EXITSIZEMOVE = (int)PInvoke.WM_EXITSIZEMOVE; + public const int WM_NCLBUTTONDBLCLK = (int)PInvoke.WM_NCLBUTTONDBLCLK; + public const int WM_SYSCOMMAND = (int)PInvoke.WM_SYSCOMMAND; + + public const int SC_MAXIMIZE = (int)PInvoke.SC_MAXIMIZE; + public const int SC_MINIMIZE = (int)PInvoke.SC_MINIMIZE; #endregion diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index 4a26cec95b4..4a49e9589f2 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -14,10 +14,10 @@ - 4.5.0 - 4.5.0 - 4.5.0 - 4.5.0 + 4.6.0 + 4.6.0 + 4.6.0 + 4.6.0 Flow.Launcher.Plugin Flow-Launcher MIT diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index cb60251ed95..09c402bcfff 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -306,13 +306,28 @@ public interface IPublicAPI public void OpenDirectory(string DirectoryPath, string FileNameOrFilePath = null); /// - /// Opens the URL with the given Uri object. + /// Opens the URL using the browser with the given Uri object, even if the URL is a local file. + /// The browser and mode used is based on what's configured in Flow's default browser settings. + /// + public void OpenWebUrl(Uri url, bool? inPrivate = null); + + /// + /// Opens the URL using the browser with the given string, even if the URL is a local file. + /// 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 OpenWebUrl(string url, bool? inPrivate = null); + + /// + /// Opens the URL with the given Uri object in browser if scheme is Http or Https. + /// If the URL is a local file, it will instead be opened with the default application for that file type. /// 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. + /// Opens the URL with the given string in browser if scheme is Http or Https. + /// If the URL is a local file, it will instead be opened with the default application for that file type. /// The browser and mode used is based on what's configured in Flow's default browser settings. /// Non-C# plugins should use this method. /// diff --git a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs index 752c85933d6..ed3e91daf43 100644 --- a/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs +++ b/Flow.Launcher.Plugin/SharedCommands/SearchWeb.cs @@ -1,8 +1,9 @@ -using Microsoft.Win32; -using System; +using System; +using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; +using Microsoft.Win32; namespace Flow.Launcher.Plugin.SharedCommands { @@ -13,7 +14,7 @@ public static class SearchWeb { private static string GetDefaultBrowserPath() { - string name = string.Empty; + var name = string.Empty; try { using var regDefault = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice", false); @@ -23,8 +24,7 @@ private static string GetDefaultBrowserPath() name = regKey.GetValue(null).ToString().ToLower().Replace("\"", ""); if (!name.EndsWith("exe")) - name = name.Substring(0, name.LastIndexOf(".exe") + 4); - + name = name[..(name.LastIndexOf(".exe") + 4)]; } catch { @@ -65,12 +65,21 @@ public static void OpenInBrowserWindow(this string url, string browserPath = "", { Process.Start(psi)?.Dispose(); } - catch (System.ComponentModel.Win32Exception) + // This error may be thrown if browser path is incorrect + catch (Win32Exception) { - Process.Start(new ProcessStartInfo + try + { + Process.Start(new ProcessStartInfo + { + FileName = url, + UseShellExecute = true + }); + } + catch { - FileName = url, UseShellExecute = true - }); + throw; // Re-throw the exception if we cannot open the URL in the default browser + } } } @@ -100,12 +109,20 @@ public static void OpenInBrowserTab(this string url, string browserPath = "", bo Process.Start(psi)?.Dispose(); } // This error may be thrown if browser path is incorrect - catch (System.ComponentModel.Win32Exception) + catch (Win32Exception) { - Process.Start(new ProcessStartInfo + try + { + Process.Start(new ProcessStartInfo + { + FileName = url, + UseShellExecute = true + }); + } + catch { - FileName = url, UseShellExecute = true - }); + throw; // Re-throw the exception if we cannot open the URL in the default browser + } } } } diff --git a/Flow.Launcher/Helper/ErrorReporting.cs b/Flow.Launcher/Helper/ErrorReporting.cs index aa810ba651a..e201284cb61 100644 --- a/Flow.Launcher/Helper/ErrorReporting.cs +++ b/Flow.Launcher/Helper/ErrorReporting.cs @@ -1,20 +1,21 @@ using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; -using System.Windows; using System.Windows.Threading; using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Exception; +using Flow.Launcher.Infrastructure.Logger; using NLog; namespace Flow.Launcher.Helper; public static class ErrorReporting { - private static void Report(Exception e, [CallerMemberName] string methodName = "UnHandledException") + private static void Report(Exception e, bool silent = false, [CallerMemberName] string methodName = "UnHandledException") { var logger = LogManager.GetLogger(methodName); logger.Fatal(ExceptionFormatter.FormatExcpetion(e)); + if (silent) return; var reportWindow = new ReportWindow(e); reportWindow.Show(); } @@ -35,8 +36,9 @@ public static void DispatcherUnhandledException(object sender, DispatcherUnhandl public static void TaskSchedulerUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) { - // handle unobserved task exceptions on UI thread - Application.Current.Dispatcher.Invoke(() => Report(e.Exception)); + // log exception but do not handle unobserved task exceptions on UI thread + //Application.Current.Dispatcher.Invoke(() => Report(e.Exception, true)); + Log.Exception(nameof(ErrorReporting), "Unobserved task exception occurred.", e.Exception); // prevent application exit, so the user can copy the prompted error info e.SetObserved(); } diff --git a/Flow.Launcher/HotkeyControlDialog.xaml b/Flow.Launcher/HotkeyControlDialog.xaml index 1edce6d0634..d416f1bdcda 100644 --- a/Flow.Launcher/HotkeyControlDialog.xaml +++ b/Flow.Launcher/HotkeyControlDialog.xaml @@ -125,12 +125,12 @@ BorderThickness="0 1 0 0" CornerRadius="0 0 8 8"> diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs index 77febde9d5b..2ee08bf85c0 100644 --- a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs +++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs @@ -1,73 +1,52 @@ -using System.Collections.ObjectModel; -using System.Linq; -using System.Windows; -using System.Windows.Input; +using System.Windows; using System.Windows.Controls; -using Flow.Launcher.Helper; +using System.Windows.Input; using Flow.Launcher.Infrastructure.UserSettings; namespace Flow.Launcher { public partial class CustomQueryHotkeySetting : Window { - private readonly Settings _settings; + public string Hotkey { get; set; } = string.Empty; + public string ActionKeyword { get; set; } = string.Empty; - private bool update; - private CustomPluginHotkey updateCustomHotkey; + private readonly bool update; + private readonly CustomPluginHotkey originalCustomHotkey; - public CustomQueryHotkeySetting(Settings settings) + public CustomQueryHotkeySetting() { - _settings = settings; InitializeComponent(); + tbAdd.Visibility = Visibility.Visible; } - private void BtnCancel_OnClick(object sender, RoutedEventArgs e) + public CustomQueryHotkeySetting(CustomPluginHotkey hotkey) { - Close(); + originalCustomHotkey = hotkey; + update = true; + ActionKeyword = originalCustomHotkey.ActionKeyword; + InitializeComponent(); + tbUpdate.Visibility = Visibility.Visible; + HotkeyControl.SetHotkey(originalCustomHotkey.Hotkey, false); } - private void btnAdd_OnClick(object sender, RoutedEventArgs e) + private void BtnCancel_OnClick(object sender, RoutedEventArgs e) { - if (!update) - { - _settings.CustomPluginHotkeys ??= new ObservableCollection(); - - var pluginHotkey = new CustomPluginHotkey - { - Hotkey = HotkeyControl.CurrentHotkey.ToString(), ActionKeyword = tbAction.Text - }; - _settings.CustomPluginHotkeys.Add(pluginHotkey); - - HotKeyMapper.SetCustomQueryHotkey(pluginHotkey); - } - else - { - var oldHotkey = updateCustomHotkey.Hotkey; - updateCustomHotkey.ActionKeyword = tbAction.Text; - updateCustomHotkey.Hotkey = HotkeyControl.CurrentHotkey.ToString(); - //remove origin hotkey - HotKeyMapper.RemoveHotkey(oldHotkey); - HotKeyMapper.SetCustomQueryHotkey(updateCustomHotkey); - } - + DialogResult = false; Close(); } - public void UpdateItem(CustomPluginHotkey item) + private void btnAdd_OnClick(object sender, RoutedEventArgs e) { - updateCustomHotkey = _settings.CustomPluginHotkeys.FirstOrDefault(o => - o.ActionKeyword == item.ActionKeyword && o.Hotkey == item.Hotkey); - if (updateCustomHotkey == null) + Hotkey = HotkeyControl.CurrentHotkey.ToString(); + + if (string.IsNullOrEmpty(Hotkey) && string.IsNullOrEmpty(ActionKeyword)) { - App.API.ShowMsgBox(App.API.GetTranslation("invalidPluginHotkey")); - Close(); + App.API.ShowMsgBox(App.API.GetTranslation("emptyPluginHotkey")); return; } - tbAction.Text = updateCustomHotkey.ActionKeyword; - HotkeyControl.SetHotkey(updateCustomHotkey.Hotkey, false); - update = true; - lblAdd.Text = App.API.GetTranslation("update"); + DialogResult = !update || originalCustomHotkey.Hotkey != Hotkey || originalCustomHotkey.ActionKeyword != ActionKeyword; + Close(); } private void BtnTestActionKeyword_OnClick(object sender, RoutedEventArgs e) @@ -79,6 +58,7 @@ private void BtnTestActionKeyword_OnClick(object sender, RoutedEventArgs e) private void cmdEsc_OnPress(object sender, ExecutedRoutedEventArgs e) { + DialogResult = false; Close(); } diff --git a/Flow.Launcher/CustomShortcutSetting.xaml b/Flow.Launcher/CustomShortcutSetting.xaml index d8623753f63..5185354e772 100644 --- a/Flow.Launcher/CustomShortcutSetting.xaml +++ b/Flow.Launcher/CustomShortcutSetting.xaml @@ -118,24 +118,26 @@ FontSize="14" Text="{DynamicResource customShortcutExpansion}" /> - - + - + - + - + - + - + + Sub="{Binding BackdropSubText}" + Type="First"> + Icon="" + Type="Last"> - + - + ()) + foreach (var pair in PluginManager.GetResultUpdatePlugin()) { var plugin = (IResultUpdated)pair.Plugin; plugin.ResultsUpdated += (s, e) => diff --git a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs index d1cf7450121..f5523212e13 100644 --- a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs +++ b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs @@ -1,5 +1,5 @@ using System; -using System.Linq; +using System.Threading.Tasks; using CommunityToolkit.Mvvm.Input; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Plugin; @@ -9,27 +9,28 @@ namespace Flow.Launcher.ViewModel { public partial class PluginStoreItemViewModel : BaseModel { - private PluginPair PluginManagerData => PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7"); + private readonly UserPlugin _newPlugin; + private readonly PluginPair _oldPluginPair; + public PluginStoreItemViewModel(UserPlugin plugin) { - _plugin = plugin; + _newPlugin = plugin; + _oldPluginPair = PluginManager.GetPluginForId(plugin.ID); } - private UserPlugin _plugin; - - public string ID => _plugin.ID; - public string Name => _plugin.Name; - public string Description => _plugin.Description; - public string Author => _plugin.Author; - public string Version => _plugin.Version; - public string Language => _plugin.Language; - public string Website => _plugin.Website; - public string UrlDownload => _plugin.UrlDownload; - public string UrlSourceCode => _plugin.UrlSourceCode; - public string IcoPath => _plugin.IcoPath; + public string ID => _newPlugin.ID; + public string Name => _newPlugin.Name; + public string Description => _newPlugin.Description; + public string Author => _newPlugin.Author; + public string Version => _newPlugin.Version; + public string Language => _newPlugin.Language; + public string Website => _newPlugin.Website; + public string UrlDownload => _newPlugin.UrlDownload; + public string UrlSourceCode => _newPlugin.UrlSourceCode; + public string IcoPath => _newPlugin.IcoPath; - public bool LabelInstalled => PluginManager.GetPluginForId(_plugin.ID) != null; - public bool LabelUpdate => LabelInstalled && new Version(_plugin.Version) > new Version(PluginManager.GetPluginForId(_plugin.ID).Metadata.Version); + public bool LabelInstalled => _oldPluginPair != null; + public bool LabelUpdate => LabelInstalled && new Version(_newPlugin.Version) > new Version(_oldPluginPair.Metadata.Version); internal const string None = "None"; internal const string RecentlyUpdated = "RecentlyUpdated"; @@ -41,15 +42,15 @@ public string Category get { string category = None; - if (DateTime.Now - _plugin.LatestReleaseDate < TimeSpan.FromDays(7)) + if (DateTime.Now - _newPlugin.LatestReleaseDate < TimeSpan.FromDays(7)) { category = RecentlyUpdated; } - if (DateTime.Now - _plugin.DateAdded < TimeSpan.FromDays(7)) + if (DateTime.Now - _newPlugin.DateAdded < TimeSpan.FromDays(7)) { category = NewRelease; } - if (PluginManager.GetPluginForId(_plugin.ID) != null) + if (_oldPluginPair != null) { category = Installed; } @@ -59,11 +60,22 @@ public string Category } [RelayCommand] - private void ShowCommandQuery(string action) + private async Task ShowCommandQueryAsync(string action) { - var actionKeyword = PluginManagerData.Metadata.ActionKeywords.Any() ? PluginManagerData.Metadata.ActionKeywords[0] + " " : String.Empty; - App.API.ChangeQuery($"{actionKeyword}{action} {_plugin.Name}"); - App.API.ShowMainWindow(); + switch (action) + { + case "install": + await PluginInstaller.InstallPluginAndCheckRestartAsync(_newPlugin); + break; + case "uninstall": + await PluginInstaller.UninstallPluginAndCheckRestartAsync(_oldPluginPair.Metadata); + break; + case "update": + await PluginInstaller.UpdatePluginAndCheckRestartAsync(_newPlugin, _oldPluginPair.Metadata); + break; + default: + break; + } } } } diff --git a/Flow.Launcher/ViewModel/PluginViewModel.cs b/Flow.Launcher/ViewModel/PluginViewModel.cs index 01fa3d20326..ea222d02374 100644 --- a/Flow.Launcher/ViewModel/PluginViewModel.cs +++ b/Flow.Launcher/ViewModel/PluginViewModel.cs @@ -1,5 +1,4 @@ -using System.Linq; -using System.Threading.Tasks; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; @@ -32,21 +31,6 @@ public PluginPair PluginPair } } - private static string PluginManagerActionKeyword - { - get - { - var keyword = PluginManager - .GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7") - .Metadata.ActionKeywords.FirstOrDefault(); - return keyword switch - { - null or "*" => string.Empty, - _ => keyword - }; - } - } - private async Task LoadIconAsync() { Image = await App.API.LoadImageAsync(PluginPair.Metadata.IcoPath); @@ -186,10 +170,9 @@ private void OpenSourceCodeLink() } [RelayCommand] - private void OpenDeletePluginWindow() + private async Task OpenDeletePluginWindowAsync() { - App.API.ChangeQuery($"{PluginManagerActionKeyword} uninstall {PluginPair.Metadata.Name}".Trim(), true); - App.API.ShowMainWindow(); + await PluginInstaller.UninstallPluginAndCheckRestartAsync(PluginPair.Metadata); } [RelayCommand] diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 648ac49bbf2..c58abae28ee 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -64,9 +64,6 @@ public ResultViewModel(Result result, Settings settings) public Settings Settings { get; } - public Visibility ShowOpenResultHotkey => - Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Collapsed; - public Visibility ShowDefaultPreview => Result.PreviewPanel == null ? Visibility.Visible : Visibility.Collapsed; public Visibility ShowCustomizedPreview => Result.PreviewPanel == null ? Visibility.Collapsed : Visibility.Visible; @@ -152,8 +149,6 @@ public Visibility ShowBadge private bool PreviewImageAvailable => !string.IsNullOrEmpty(Result.Preview.PreviewImagePath) || Result.Preview.PreviewDelegate != null; - public string OpenResultModifiers => Settings.OpenResultModifiers; - public string ShowTitleToolTip => string.IsNullOrEmpty(Result.TitleToolTip) ? Result.Title : Result.TitleToolTip; diff --git a/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs b/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs index 1eee6dba5d3..67bbbd9301f 100644 --- a/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs +++ b/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs @@ -1,6 +1,5 @@ using System.Collections.ObjectModel; using System.Linq; -using System.Windows; using CommunityToolkit.Mvvm.Input; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml index 4a764bbfab9..66e30855f73 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml @@ -26,6 +26,6 @@ Wenn Sie nicht Chrome, Firefox oder Edge verwenden oder deren portable Version nutzen, müssen Sie das Lesezeichen-Datenverzeichnis hinzufügen und die richtige Browser-Engine auswählen, damit dieses Plug-in funktioniert. Zum Beispiel: Die Engine von Brave ist Chromium, und deren Standardspeicherort der Lesezeichen-Daten ist: %LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Bei der Firefox-Engine ist das Lesezeichenverzeichnis der Ordner userdata, der die Datei places.sqlite enthält. - Load favicons (can be time consuming during startup) + Favicons laden (kann während des Starts zeitaufwendig sein) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml index 2dff7543f24..9f92d86b153 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml @@ -19,12 +19,12 @@ Ścieżka katalogu danych Dodaj Edytuj - Usu + Usuń Przeglądaj Inne Silnik przeglądarki Jeśli nie używasz Chrome, Firefox lub Edge, lub używasz ich wersji przenośnej, musisz dodać katalog danych zakładek i wybrać poprawny silnik przeglądarki, aby wtyczka działała. Na przykład: silnikiem przeglądarki Brave jest Chromium, a domyślna lokalizacja danych zakładek to: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". W przypadku silnika Firefoksa, katalog zakładek to folder danych użytkownika zawierający plik places.sqlite. - Load favicons (can be time consuming during startup) + Wczytaj ikony ulubionych (może być czasochłonne podczas uruchamiania) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml index b8fd4fb8367..07ccc2ea4ce 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml @@ -25,6 +25,6 @@ Браузерний рушій Якщо ви не використовуєте Chrome, Firefox або Edge, або використовуєте їхні портативні версії, вам потрібно додати каталог даних закладок і вибрати правильний рушій браузера, щоб цей плагін працював. Наприклад: Рушій Brave - Chromium, і за замовчуванням розташування даних закладок: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Для браузера Firefox директорія закладок - це папка userdata, що містить файл places.sqlite. - Load favicons (can be time consuming during startup) + Завантажити піктограми (може зайняти багато часу під час запуску) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml index d327dcebbe4..ebdb0ff3518 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml @@ -96,8 +96,11 @@ حذف حذف الملف الحالي نهائيًا حذف المجلد الحالي نهائيًا - المسار: - Name: + اسم البرنامج + Type + المسار + ملف + مجلد حذف المحدد تشغيل كمستخدم مختلف تشغيل العنصر المحدد باستخدام حساب مستخدم مختلف diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml index 80e181a8f45..38f4f145ed7 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml @@ -96,8 +96,11 @@ Smazat Trvale odstranit aktuální soubor Trvale smazat aktuální složku - Cesta: - Name: + Jméno + Type + Cesta + Soubor + Složka Odstranit vybraný Spustit jako jiný uživatel Spustí vybranou položku jako uživatel s jiným účtem diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml index 7cbe281d8d3..8c011814c3a 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml @@ -96,8 +96,11 @@ Slet Permanently delete current file Permanently delete current folder - Path: - Name: + Name + Type + Path + File + Folder Delete the selected Run as different user Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml index 10700a0ee16..1d8c3937ab0 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml @@ -3,8 +3,8 @@ Bitte treffen Sie zuerst eine Auswahl - Please select a folder path. - Please choose a different name or folder path. + Bitte wählen Sie einen Ordnerpfad aus. + Bitte wählen Sie einen anderen Namen oder Ordnerpfad. Bitte wählen Sie einen Ordner-Link aus Sind Sie sicher, dass Sie {0} löschen wollen? Sind Sie sicher, dass Sie diese Datei dauerhaft löschen möchten? @@ -27,14 +27,14 @@ Hinzufügen Allgemeine Einstellung Aktions-Schlüsselwörter individuell anpassen - Customise Quick Access + Schnellzugriff individuell anpassen Schnellzugriff-Links Everyhting-Einstellung Vorschau-Panel Größe Erstellungsdatum Änderungsdatum - File Age + Dateialter Datei-Info anzeigen Datums- und Zeitformat Sortieroption: @@ -44,7 +44,7 @@ Shell-Pfad Indexsuche ausgeschlossene Pfade Ort des Suchergebnisses als Arbeitsverzeichnis der ausführbaren Datei verwenden - Display more information like size and age in tooltips + Mehr Informationen wie Größe und Alter in Tooltips anzeigen Drücken Sie Enter, um Ordner im Default-Dateimanager zu öffnen Indexsuche für Pfadsuche verwenden Indexierungsoptionen @@ -81,23 +81,26 @@ Strg+Enter, um das Verzeichnis zu öffnen Strg+Enter, um den enthaltenden Ordner zu öffnen - {0}{4}Size: {1}{4}Date created: {2}{4}Date modified: {3} + {0}{4}Größe: {1}{4}Erstellungsdatum: {2}{4}Änderunsgdatum: {3} Unbekannt - {0}{3}Space free: {1}{3}Total size: {2} + {0}{3}Platz frei: {1}{3}Größe total: {2} Pfad kopieren Pfad des aktuellen Elements in Zwischenablage kopieren - Copy name - Copy name of current item to clipboard + Name kopieren + Name des aktuellen Elements in Zwischenablage kopieren Kopieren Aktuelle Datei in Zwischenablage kopieren Aktuellen Ordner in Zwischenablage kopieren Löschen Aktuelle Datei dauerhaft löschen Aktuellen Ordner dauerhaft löschen - Pfad: - Name: + Name + Typ + Pfad + Datei + Ordner Ausgewähltes löschen Als anderer Benutzer ausführen Ausgewähltes unter Verwendung eines anderen Benutzerkontos ausführen @@ -164,12 +167,12 @@ Everything-Dienst erfolgreich installiert Der Everything-Dienst konnte nicht automatisch installiert werden. Bitte installieren Sie ihn manuell über https://www.voidtools.com Klicken Sie hier, um es zu starten - Es kann keine Everything-Installation gefuinden werden, möchten Sie einen Ort manuell auswählen?{0}{0}Klicken Sie auf Nein und Everything wird automatisch für Sie installiert + Es kann keine Everything-Installation gefunden werden, möchten Sie einen Ort manuell auswählen?{0}{0}Klicken Sie auf Nein und Everything wird automatisch für Sie installiert Möchten Sie die Inhaltssuche für Everything aktivieren? Es kann sehr langsam sein ohne Index (was nur in Everything v1.5+ unterstützt wird) - Unable to find Everything.exe - Failed to install Everything, please install it manually + Everything.exe kann nicht gefunden werden + Everything konnte nicht installiert werden, bitte installieren Sie es manuell Natives Kontextmenü @@ -178,10 +181,10 @@ Unten können Sie die Elemente angeben, die Sie aus dem Kontextmenü ausschließen möchten. Diese können partiell (z. B. „Stift mit“) oder vollständig („Öffnen mit“) sein. - Today - {0} days ago - 1 month ago - {0} months ago - 1 year ago - {0} years ago + Heute + Vor {0} Tagen + Vor 1 Monat + Vor {0} Monaten + Vor 1 Jahr + Vor {0} Jahren diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml index 4e372adbe2e..ae541a7457e 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml @@ -96,8 +96,11 @@ Eliminar Permanently delete current file Permanently delete current folder - Path: - Name: + Name + Type + Ruta + Archivo + Carpeta Delete the selected Run as different user Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml index 4f5977fa1a6..10ee4a9a494 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml @@ -34,7 +34,7 @@ Tamaño Fecha de creación Fecha de modificación - Edad del archivo + Antigüedad del archivo Mostrar información del archivo Formato de fecha y hora Ordenar por: @@ -44,7 +44,7 @@ Ruta del Shell Rutas excluídas del índice de búsqueda Usar la ubicación de los resultados de búsqueda como directorio de trabajo del ejecutable - Mostrar más información, como tamaño y antigüedad, en los consejos (tooltips) + Mostrar más información, como el tamaño y la antigüedad, en los mensajes emergentes Pulsar Entrar para abrir la carpeta en el administrador de archivos predeterminado Usar búsqueda indexada para buscar rutas Opciones de indexación @@ -96,8 +96,11 @@ Eliminar Elimina permanentemente el archivo actual Elimina permanentemente la carpeta actual - Ruta: - Nombre: + Nombre + Tipo + Ruta + Archivo + Carpeta Elimina el seleccionado Ejecutar como usuario diferente Ejecuta la selección usando una cuenta de usuario diferente diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml index 726fbe7d71f..8809004c724 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml @@ -96,8 +96,11 @@ Supprimer Supprimer définitivement le fichier actuel Supprimer définitivement le dossier actuel - Chemin : - Nom : + Nom + Type + Chemin + Fichier + Dossier Supprimer la sélection Exécuter en tant qu'utilisateur différent Exécuter le programme sélectionné en utilisant un autre compte d'utilisateur diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml index 6e955848dd3..a18a15aad4a 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml @@ -96,8 +96,11 @@ מחק מחק לצמיתות את הקובץ הנוכחי מחק לצמיתות את התיקייה הנוכחית - נתיב: - שם: + שם + Type + נתיב + קובץ + תיקייה מחק את הפריט שנבחר הפעל כמשתמש אחר הפעל את הפריט שנבחר באמצעות חשבון משתמש אחר diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml index df756e88626..3afaf2f250f 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml @@ -96,8 +96,11 @@ Cancella Elimina permanentemente il file corrente Elimina definitivamente la cartella corrente - Percorso: - Name: + Nome + Type + Percorso + File + Cartella Elimina il selezionato Esegui come utente differente Esegui la selezione utilizzando un altro account utente diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml index 3d944a2b82a..648efe642c0 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml @@ -96,8 +96,11 @@ 削除 現在のファイルを完全に削除 現在のフォルダーを完全に削除 - Path: - Name: + 名前 + Type + Path + ファイル + フォルダー Delete the selected Run as different user Run the selected using a different user account @@ -138,7 +141,7 @@ Warning: Everything service is not running Error while querying Everything Sort By - Name + 名前 Path サイズ Extension diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml index 27e4aa76ac4..cf4d8b8ad7f 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml @@ -96,8 +96,11 @@ 삭제 이 파일을 영구적으로 삭제 이 폴더를 영구적으로 삭제 - 경로: - Name: + Name + Type + Path + 파일 + 폴더 선택 항목을 삭제 다른 유저 권한으로 실행 선택한 사용자 계정으로 실행 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml index e5ef88959ea..733136c36f5 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml @@ -96,8 +96,11 @@ Slett Slett gjeldende fil permanent Slett gjeldende mappe permanent - Sti: - Name: + Navn + Type + Sti + Fil + Mappe Slett valgte Kjør som annen bruker Kjør valgte med en annen brukerkonto diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml index d8178a1f3c4..c4bfb639d8b 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml @@ -96,8 +96,11 @@ Verwijder Permanently delete current file Permanently delete current folder - Path: - Name: + Name + Type + Pad + Bestand + Map Delete the selected Run as different user Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml index 5a29fd9aba3..ddf56ab3757 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml @@ -2,9 +2,9 @@ - Pierw dokonaj wyboru - Please select a folder path. - Please choose a different name or folder path. + Najpierw dokonaj wyboru + Wybierz ścieżkę folderu. + Wybierz inną nazwę lub ścieżkę folderu. Musisz wybrać któryś folder z listy Czy jesteś pewien że chcesz usunąć {0}? Jesteś pewny, że chcesz usunąć ten plik trwale? @@ -27,14 +27,14 @@ Dodaj Ustawienia ogólne Zmień słowa kluczowe akcji - Customise Quick Access + Dostosuj Szybki Dostęp Linki szybkiego dostępu Ustawienia Everything Panel podglądu Rozmiar Data utworzenia Data modyfikacji - File Age + Wiek pliku Wyświetl informacje o pliku Format daty i czasu Opcje sortowania: @@ -44,7 +44,7 @@ Ścieżka powłoki Wykluczone ścieżki indeksu Użyj lokalizacji wyników wyszukiwania jako katalogu roboczego pliku wykonywalnego - Display more information like size and age in tooltips + Wyświetlaj więcej informacji, takich jak rozmiar i wiek w podpowiedziach Naciśnij Enter, aby otworzyć folder w domyślnym menedżerze plików Użyj wyszukiwania indeksowego do przeszukiwania ścieżek Opcje indeksowania @@ -81,23 +81,26 @@ Ctrl + Enter, aby otworzyć folder Ctrl + Enter, aby otworzyć folder zawierający - {0}{4}Size: {1}{4}Date created: {2}{4}Date modified: {3} + {0} {4}Rozmiar: {1} {4}Data utworzenia: {2} {4} Data modyfikacji: {3} Nieznane - {0}{3}Space free: {1}{3}Total size: {2} + {0} {3}Wolna przestrzeń: {1} {3}Rozmiar całkowity: {2} Skopiuj Ścieżkę Kopiuj ścieżkę bieżącego elementu do schowka - Copy name - Copy name of current item to clipboard + Kopiuj nazwę + Kopiuj nazwę bieżącego elementu do schowka Kopiuj Kopiuj bieżący plik do schowka Kopiuj bieżący folder do schowka Usu Trwale usuń bieżący plik Trwale usuń bieżący folder - Ścieżka: - Name: + Nazwa + Type + Ścieżka + Plik + Folder Usuń zaznaczone Uruchom jako inny użytkownik Uruchom wybrane używając innego konta użytkownika @@ -168,8 +171,8 @@ Czy chcesz włączyć wyszukiwanie zawartości dla programu Everything? Może działać bardzo wolno bez indeksu (który jest obsługiwany tylko w Everything w wersji 1.5 i nowszych) - Unable to find Everything.exe - Failed to install Everything, please install it manually + Nie znaleziono pliku Everything.exe + Błąd instalacji Everything, zainstaluj aplikację samodzielnie Natywne menu kontekstowe @@ -178,10 +181,10 @@ Poniżej możesz określić elementy, które chcesz wykluczyć z menu kontekstowego. Mogą być one częściowe (np. "otw w") lub pełne ("Otwórz za pomocą"). - Today - {0} days ago - 1 month ago - {0} months ago - 1 year ago - {0} years ago + Dzisiaj + {0} dni wcześniej + 1 miesiąc wcześniej + {0} miesięcy wcześniej + 1 rok temu + {0} lat temu diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml index 5785a561679..d0a26029055 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml @@ -96,8 +96,11 @@ Apagar Permanently delete current file Permanently delete current folder - Caminho: - Name: + Nome + Type + Path + Arquivo + Pasta Delete the selected Run as different user Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml index 5db8251e270..98a77d06a4f 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml @@ -96,8 +96,11 @@ Eliminar Eliminar permanentemente o ficheiro atual Eliminar permanentemente a pasta atual - Caminho: - Nome: + Nome + Tipo + Caminho + Ficheiro + Pasta Eliminar seleção Executar com outro utilizador Executar ações com uma conta de utilizador diferente diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml index 35bd1d87def..44a3a9b65e8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml @@ -96,8 +96,11 @@ Удалить Permanently delete current file Permanently delete current folder - Путь: - Name: + Name + Type + Path + Файл + Папка Delete the selected Запустить от имени другого пользователя Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml index 1323d6ae071..7c3f5deff06 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml @@ -96,8 +96,11 @@ Odstrániť Natrvalo odstrániť aktuálny súbor Natrvalo odstrániť aktuálny priečinok - Cesta: - Názov: + Názov + Typ + Cesta + Súbor + Priečinok Odstrániť vybraný Spustiť ako iný používateľ Spustí vybranú položku ako používateľ s iným kontom diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml index 6af5508843a..4df64e4d57c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml @@ -96,8 +96,11 @@ Obriši Permanently delete current file Permanently delete current folder - Path: - Name: + Name + Type + Path + File + Folder Delete the selected Run as different user Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml index 44674952b6c..ed327e1bced 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml @@ -96,8 +96,11 @@ Sil Mevcut dosyayı kalıcı olarak sil Mevcut klasörü kalıcı olarak sil - Yol: - Name: + Name + Type + Path + Dosya + Klasör Seçileni sil Başka bir kullanıcı olarak çalıştır Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml index b203687e98a..38829112c72 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml @@ -3,8 +3,8 @@ Будь ласка, спочатку зробіть вибір - Please select a folder path. - Please choose a different name or folder path. + Виберіть шлях до теки. + Виберіть інше ім'я або шлях до теки. Будь ласка, оберіть посилання на теку Ви впевнені, що хочете видалити {0}? Ви впевнені, що хочете назавжди видалити цей файл? @@ -27,14 +27,14 @@ Додати Загальні налаштування Налаштувати ключові слова дії - Customise Quick Access + Налаштування швидкого доступу Посилання швидкого доступу Налаштування Everything Панель поперегляду Розмір Дата створення Дата останньої зміни - File Age + Дата створення Показати інформацію про файл Формат дати й часу Варіант сортування: @@ -44,7 +44,7 @@ Шлях до оболонки Shell Виключені шляхи індексного пошуку Використовувати розташування результату пошуку як робочу директорію виконуваного файлу - Display more information like size and age in tooltips + Показувати більше інформації, наприклад розмір і дату створення, у підказках Натисніть Enter, щоб відкрити папку у файловому менеджері за замовчуванням Використовуйте індексний пошук для пошуку шляху Параметри індексації @@ -81,23 +81,26 @@ Ctrl + Enter, щоб відкрити каталог Ctrl + Enter, щоб відкрити відповідну папку - {0}{4}Size: {1}{4}Date created: {2}{4}Date modified: {3} + {0}{4}Розмір: {1}{4}Дата створення: {2}{4}Дата змінення: {3} Невідомо - {0}{3}Space free: {1}{3}Total size: {2} + {0}{3}Вільного місця: {1}{3}Загальний розмір: {2} Копіювати шлях Копіювати шлях до поточного елемента в буфер обміну - Copy name - Copy name of current item to clipboard + Копіювати назву + Скопіювати назву поточного елемента в буфер обміну Копіювати Копіювання поточного файлу в буфер обміну Копіювати поточну папку в буфер обміну Видалити Безповоротно видалити поточний файл Назавжди видалити поточну папку - Шлях: - Name: + Назва + Тип + Шлях + Файл + Тека Видалити вибране Запустити від імені іншого користувача Запустити вибране під обліковим записом іншого користувача @@ -156,7 +159,7 @@ Попередження: Це не швидке сортування, пошук може бути повільним Шукати повний шлях - Enable File/Folder Run Count + Увімкнути підрахунок запусків файлів / тек Натисніть, щоб запустити або встановити Everything Встановлення програми Everything @@ -168,20 +171,20 @@ Бажаєте увімкнути пошук контенту для Everything? Без індексу (який підтримується лише у версії Everything v1.5+) воно може працювати дуже повільно - Unable to find Everything.exe - Failed to install Everything, please install it manually + Не вдалося знайти Everything.exe + Не вдалося встановити Everything, встановіть його вручну Рідне контекстне меню Відображати рідне контекстне меню (експериментально) Нижче ви можете вказати елементи, які хочете включити до контекстного меню, вони можуть бути частковими (наприклад, «шир пера») або повними («Відкрити за допомогою»). - Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Нижче ви можете вказати елементи, які ви хочете виключити з контекстного меню. Вони можуть бути частковими (наприклад, «pen wit») або повними («Відкрити за допомогою»). - Today - {0} days ago - 1 month ago - {0} months ago - 1 year ago - {0} years ago + Сьогодні + {0} дн. тому + Місяць тому + {0} міс. тому + Рік тому + {0} р. тому diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml index f41276a670c..de6f9a6a4c7 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml @@ -96,8 +96,11 @@ Xóa Permanently delete current file Permanently delete current folder - Đường dẫn: - Name: + Tên + Type + Path + Ngày tháng + Thư Mục Xóa đã chọn Xóa lựa chọn đã chọn Chạy phần đã chọn bằng tài khoản người dùng khác diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml index 9bce7206284..79d8fc66db9 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml @@ -96,8 +96,11 @@ 删除 永久删除当前文件 永久删除当前文件夹 - 路径: - 名称: + 名称 + 类型 + 路径 + 文件 + 目录 删除所选内容 以其他用户身份运行 使用其他用户帐户运行所选内容 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml index 931c9de296a..c4e22066dda 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml @@ -96,8 +96,11 @@ 刪除 Permanently delete current file Permanently delete current folder - 路徑: - Name: + 名稱 + Type + 路徑 + 檔案 + 資料夾 刪除所選內容 Run as different user Run the selected using a different user account diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml index 22aa8f5971c..2b03bdc2080 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml @@ -1,4 +1,4 @@ - - + @@ -47,7 +44,7 @@ TextWrapping="Wrap" /> - + - - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - + + + diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml index 6fb809d9007..8a75cde72b5 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml @@ -43,10 +43,15 @@ تم تحديث الإضافة {0} بنجاح. يرجى إعادة تشغيل Flow. تم تحديث {0} إضافات بنجاح. يرجى إعادة تشغيل Flow. تم تعديل الإضافة {0} بالفعل. يرجى إعادة تشغيل Flow قبل إجراء أي تغييرات أخرى. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} مدير الإضافات - إدارة تثبيت وإلغاء تثبيت أو تحديث إضافات Flow Launcher + Install, uninstall or update Flow Launcher plugins via the search window مؤلف غير معروف @@ -61,5 +66,5 @@ تحذير التثبيت من مصدر غير معروف - إعادة تشغيل Flow Launcher تلقائيًا بعد تثبيت/إلغاء تثبيت/تحديث الإضافات + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml index d47e1814be0..5ca1700d444 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Správce pluginů - Správa instalace, odinstalace nebo aktualizace pluginů Flow Launcheru + Install, uninstall or update Flow Launcher plugins via the search window Neznámý autor @@ -61,5 +66,5 @@ Upozornění na instalaci z neznámého zdroje - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml index 616ce779b33..a5d0231ceae 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Unknown Author @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml index 47ea31cceee..c7ef7780198 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml @@ -43,10 +43,15 @@ Plug-in {0} erfolgreich aktualisiert. Bitte starten Sie Flow neu. {0} Plug-ins erfolgreich aktualisiert. Bitte starten Sie Flow neu. Plug-in {0} ist bereits modifiziert worden. Bitte starten Sie Flow neu, bevor Sie irgendwelche weitere Änderungen vornehmen. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plug-ins-Manager - Verwaltung der Installation, Deinstallation oder Aktualisierung der Plug-ins von Flow Launcher + Install, uninstall or update Flow Launcher plugins via the search window Unbekannter Autor @@ -61,5 +66,5 @@ Warnung vor Installation aus unbekannter Quelle - Automatischer Neustart von Flow Launcher nach Installation/Deinstallation/Aktualisierung von Plug-ins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml index 573ca90519e..fa2e65240ae 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml @@ -45,10 +45,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Unknown Author @@ -63,5 +68,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml index 616ce779b33..a5d0231ceae 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Unknown Author @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml index b0f25f3ea2b..b6a3a6cbcb5 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml @@ -43,10 +43,15 @@ Complemento {0} actualizado correctamente. Por favor, reinicie Flow. {0} complementos se han actualizado correctamente. Por favor, reinicie Flow. El complemento {0} ya ha sido modificado. Por favor, reinicie Flow antes de realizar más cambios. + {0} ya está modificado + Reiniciar Flow antes de realizar más cambios + + Archivo de instalación zip no válido + Por favor, compruebe si hay un plugin.json en {0} Administrador de complementos - Administración de instalación, desinstalación o actualización de los complementos de Flow Launcher + Instalar, desinstalar o actualizar complementos de Flow Launcher desde la ventana de búsqueda Autor desconocido @@ -61,5 +66,5 @@ Aviso de instalación desde fuentes desconocidas - Reiniciar automáticamente Flow Launcher después de instalar/desinstalar/actualizar complementos + Reiniciar Flow Launcher automáticamente después de instalar/desinstalar/actualizar el complemento a través del Administrador de complementos diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml index 3142ef86dc9..c95c9723102 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml @@ -43,10 +43,15 @@ Plugin {0} mis à jour avec succès. Veuillez redémarrer Flow. {0} plugins mis à jour avec succès. Veuillez redémarrer Flow. Le plugin {0} a déjà été modifié. Veuillez redémarrer Flow avant de faire d'autres modifications. + {0} est déjà modifié + Veuillez redémarrer Flow avant d'apporter d'autres modifications + + Fichier d'installation zip invalide + Veuillez vérifier s'il y a un plugin.json dans {0} Gestionnaire de plugins - Gestion de l'installation, de la désinstallation ou de la mise à jour des plugins Flow Launcher + Installer, désinstaller ou mettre à jour les plugins Flow Launcher via la fenêtre de recherche Auteur inconnu @@ -61,5 +66,5 @@ Avertissement d'installation à partir d'une source inconnue - Redémarrer automatiquement Flow Launcher après l'installation/désinstallation/mise à jour des plugins + Redémarrer Flow Launcher automatiquement après l'installation/désinstallation/mise à jour du plugin via le gestionnaire de plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml index 8c7f0cf028e..3fe7fd96818 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml @@ -43,10 +43,15 @@ התוסף {0} עודכן בהצלחה. נא הפעל מחדש את Flow. {0} תוספים עודכנו בהצלחה. נא הפעל מחדש את Flow. התוסף {0} כבר השתנה. נא הפעל מחדש את Flow לפני ביצוע שינויים נוספים. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} מנהל תוספים - ניהול התקנה, הסרה או עדכון של תוספים עבור Flow Launcher + Install, uninstall or update Flow Launcher plugins via the search window מחבר לא ידוע @@ -61,5 +66,5 @@ אזהרה בעת התקנה ממקור לא ידוע - הפעל מחדש את Flow Launcher באופן אוטומטי לאחר התקנה/הסרה/עדכון של תוספים + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml index d154e59dc81..3ccefa2db15 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml @@ -43,10 +43,15 @@ Il plugin {0} aggiornato con successo. Riavviare Flow. {0} plugin aggiornato con successo. Riavviare Flow. Il plugin {0} è già stato modificato. Riavviare Flow prima di fare altre modifiche. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Gestore dei plugin - Gestione dell'installazione, disinstallazione o aggiornamento dei plugin di Flow Launcher + Install, uninstall or update Flow Launcher plugins via the search window Autore Sconosciuto @@ -61,5 +66,5 @@ Avviso di installazione da sorgenti sconosciute - Riavvia automaticamente Flow Launcher dopo l'installazione/disinstallazione/aggiornamento dei plugin + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml index 616ce779b33..d62f0f61bfc 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Unknown Author @@ -60,6 +65,6 @@ Visit the PluginsManifest repository to see community-made plugin submissions - Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + 不明な提供元からインストールするとき警告する + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml index f6f46448d83..8c15f27ad70 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} 플러그인 관리자 - 플러그인의 설치/삭제/업데이트를 관리하는 플러그인 + Install, uninstall or update Flow Launcher plugins via the search window 알수없는 제작자 @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml index b0fd2d10ac7..bccd55459ae 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml @@ -43,10 +43,15 @@ Programtillegg {0} oppdatert. Vennligst restart Flow. {0} programtillegg oppdatert. Start Flow på nytt. Programtillegg {0} er allerede endret. Start Flow på nytt før nye endringer foretas. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Programtilleggsbehandling - Administrasjon av installasjon, avinstallere eller oppdatere Flow Launcher programtillegg + Install, uninstall or update Flow Launcher plugins via the search window Ukjent utvikler @@ -61,5 +66,5 @@ Advarsel om installering fra ukjent kilde - Start Flow Launcher automatisk på nytt etter installasjon/avinstallering/oppdatering av programtillegg + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml index 616ce779b33..a5d0231ceae 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Unknown Author @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml index 18790093100..3124cc63478 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml @@ -43,10 +43,15 @@ Wtyczka {0} została pomyślnie zaktualizowana. Proszę ponownie uruchomić Flow. {0} wtyczek zaktualizowano pomyślnie. Proszę ponownie uruchomić Flow. Wtyczka {0} została już zmodyfikowana. Proszę ponownie uruchomić Flow przed wprowadzeniem dalszych zmian. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Menadżer wtyczek - Zarządzanie instalowaniem, odinstalowywaniem i aktualizowaniem wtyczek Flow Launcher + Install, uninstall or update Flow Launcher plugins via the search window Nieznany autor @@ -61,5 +66,5 @@ Ostrzeżenie o instalacji z nieznanego źródła - Automatycznie uruchom ponownie Flow Launcher po zainstalowaniu/odinstalowaniu/zaktualizowaniu wtyczek + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml index 179bcab9718..2407d5b6e7d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Unknown Author @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml index 01535c689f1..40cfc82538d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml @@ -43,10 +43,15 @@ Plugin {0} atualizado com sucesso. Por favor, reinicie o Flow Launcher. {0} plugins atualizados com sucesso. Deve reiniciar Flow Launcher. O plugin {0} foi modificado. Por favor, reinicie o Flow Launcher antes de fazer mais alterações. + {0} já modificado + Reinicie Flow Launcher antes de fazer mais alterações + + Ficheiro Zip inválido + Verifique se existe o ficheiro "plugin.json" em {0} Gestor de plugins - Módulo para instalar, desinstalar e atualizar os plugins do Flow Launcher + Instalar, desinstalar ou atualizar plugins do Flow Launcher através da janela de pesquisa Autor desconhecido @@ -61,5 +66,5 @@ Aviso ao instalar de fontes desconhecidas - Reiniciar automaticamente após instalar/desinstalar/atualizar plugins + Reiniciar Flow Launcher após instalar/desinstalar/atualizar um plugin via Gestor de plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml index 5b0a379b59a..18913c7c65a 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Автор неизвестен @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml index 5529b2fc1a7..f788c9ce3c7 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml @@ -43,10 +43,15 @@ Plugin {0} bol úspešne aktualizovaný. Prosím, reštartuje Flow. Pluginy úspešne aktualizované ({0}). Reštartuje Flow. Plugin {0} už bol upravený. Prosím, reštartuje Flow pred ďalšími zmenami. + Plugin {0} už bol upravený + Pred vykonaním ďalších zmien reštartujte Flow Launcher + + Neplatný inštalačný súbor zip + Skontrolujte, či sa v {0} nachádza plugin.json Správca pluginov - Správa inštalácie, odinštalácie alebo aktualizácie pluginov programu Flow Launcher + Inštalovať, odinštalovať alebo aktualizovať pluginy Flow Launchera cez vyhľadávacie okno Neznámy autor @@ -61,5 +66,5 @@ Upozornenie na inštaláciu z neznámeho zdroja - Automaticky reštartovať Flow Launcher po inštalácií/odinštalácii/aktualizáciu pluginov + Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizáciu pluginu cez Správcu pluginov diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml index 616ce779b33..a5d0231ceae 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Unknown Author @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml index 14f2e130982..ed9aaf4b32c 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window Bilinmeyen Yazar @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml index 3d2b50a78c1..e07f417c77d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml @@ -13,8 +13,8 @@ Встановлення плагіна Завантажити та встановити {0} Видалення плагіна - Keep plugin settings - Do you want to keep the settings of the plugin for the next usage? + Зберегти налаштування плагіну + Хочете зберегти налаштування плагіну для наступного використання? Plugin successfully installed. Restarting Flow, please wait... Не вдалося знайти файл метаданих plugin.json у розпакованому zip-архіві. Помилка: Плагін, який має ідентичну або новішу версію з {0}, вже існує. @@ -43,10 +43,15 @@ Плагін {0} успішно оновлено. Будь ласка, перезапустіть Flow. {0} плагіни успішно оновлено. Будь ласка, перезапустіть Flow. Плагін {0} вже було змінено. Будь ласка, перезапустіть Flow, перш ніж вносити будь-які подальші зміни. + {0} вже змінено + Перезапустіть Flow перед тим, як вносити будь-які подальші зміни. + + Неправильний встановлюваний zip-файл + Перевірте, чи є файл plugin.json у {0}. Менеджер плагінів - Керування встановленням, видаленням або оновленням плагінів Flow Launcher + Встановити, видалити або оновити плагіни Flow Launcher через вікно пошуку. Невідомий автор @@ -61,5 +66,5 @@ Попередження про встановлення з невідомого джерела - Автоматичний перезапуск Flow Launcher після встановлення/видалення/оновлення плагінів + Автоматично перезапускати Flow Launcher після встановлення / видалення / оновлення плагіну за допомогою Менеджера плагінів diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml index 3f9315d6015..1a2a5c93a12 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} Trình quản lý plugin - Quản lý cài đặt, gỡ cài đặt hoặc cập nhật plugin Flow Launcher + Install, uninstall or update Flow Launcher plugins via the search window Không rõ tác giả @@ -61,5 +66,5 @@ Cảnh báo cài đặt từ nguồn không xác định - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml index 1a4199965a9..446609850df 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml @@ -43,10 +43,15 @@ 成功更新插件{0}。请重新启动 Flow Launcher。 插件 {0} 更新成功。请重新启动 Flow Launcher。 插件 {0} 已被修改。请在进行任何进一步更改之前重新启动Flow。 + {0} 已被修改 + 请在进行任何进一步更改之前重新启动 Flow + + 无效的 zip 安装程序文件 + 请检查 {0} 中是否有plugin.json 插件管理 - 安装,卸载或更新 Flow Launcher 插件 + 通过搜索窗口安装、卸载或更新 Flow Launcher 插件 未知作者 @@ -61,5 +66,5 @@ 未知源安装警告 - 安装/卸载/更新插件后自动重启 Flow Launcher + 通过插件管理器安装/卸载/更新插件后自动重启 Flow Launcher diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml index f16feb05017..ddd24d0edac 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml @@ -43,10 +43,15 @@ Plugin {0} successfully updated. Please restart Flow. {0} plugins successfully updated. Please restart Flow. Plugin {0} has already been modified. Please restart Flow before making any further changes. + {0} modified already + Please restart Flow before making any further changes + + Invalid zip installer file + Please check if there is a plugin.json in {0} 擴充功能管理 - Management of installing, uninstalling or updating Flow Launcher plugins + Install, uninstall or update Flow Launcher plugins via the search window 未知的作者 @@ -61,5 +66,5 @@ Install from unknown source warning - Automatically restart Flow Launcher after installing/uninstalling/updating plugins + Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs index 25182f6d3d2..efbe8d7ba7d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs @@ -114,6 +114,14 @@ internal async Task InstallOrUpdateAsync(UserPlugin plugin) return; } + if (Context.API.PluginModified(plugin.ID)) + { + Context.API.ShowMsgError( + string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_title"), plugin.Name), + Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_message")); + return; + } + string message; if (Settings.AutoRestartAfterChanging) { @@ -158,7 +166,8 @@ await DownloadFileAsync( if (cts.IsCancellationRequested) return; else - Install(plugin, filePath); + if (!Install(plugin, filePath)) + return; } catch (HttpRequestException e) { @@ -196,7 +205,7 @@ await DownloadFileAsync( } } - private async Task DownloadFileAsync(string prgBoxTitle, string downloadUrl, string filePath, CancellationTokenSource cts, bool deleteFile = true, bool showProgress = true) + private async Task DownloadFileAsync(string progressBoxTitle, string downloadUrl, string filePath, CancellationTokenSource cts, bool deleteFile = true, bool showProgress = true) { if (deleteFile && File.Exists(filePath)) File.Delete(filePath); @@ -204,12 +213,12 @@ private async Task DownloadFileAsync(string prgBoxTitle, string downloadUrl, str if (showProgress) { var exceptionHappened = false; - await Context.API.ShowProgressBoxAsync(prgBoxTitle, + await Context.API.ShowProgressBoxAsync(progressBoxTitle, async (reportProgress) => { if (reportProgress == null) { - // when reportProgress is null, it means there is expcetion with the progress box + // when reportProgress is null, it means there is exception with the progress box // so we record it with exceptionHappened and return so that progress box will close instantly exceptionHappened = true; return; @@ -242,6 +251,18 @@ internal async ValueTask> RequestUpdateAsync(string search, Cancell if (FilesFolders.IsZipFilePath(search, checkFileExists: true)) { pluginFromLocalPath = Utilities.GetPluginInfoFromZip(search); + + if (pluginFromLocalPath == null) return new List + { + new() + { + Title = Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_title"), + SubTitle = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_subtitle"), + search), + IcoPath = icoPath + } + }; + pluginFromLocalPath.LocalInstallPath = search; updateFromLocalPath = true; } @@ -261,6 +282,7 @@ where string.Compare(existingPlugin.Metadata.Version, pluginUpdateSource.Version select new { + existingPlugin.Metadata.ID, pluginUpdateSource.Name, pluginUpdateSource.Author, CurrentVersion = existingPlugin.Metadata.Version, @@ -290,6 +312,14 @@ where string.Compare(existingPlugin.Metadata.Version, pluginUpdateSource.Version IcoPath = x.IcoPath, Action = e => { + if (Context.API.PluginModified(x.ID)) + { + Context.API.ShowMsgError( + string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_title"), x.Name), + Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_message")); + return false; + } + string message; if (Settings.AutoRestartAfterChanging) { @@ -340,8 +370,11 @@ await DownloadFileAsync( } else { - await Context.API.UpdatePluginAsync(x.PluginExistingMetadata, x.PluginNewUserPlugin, - downloadToFilePath); + if (!await Context.API.UpdatePluginAsync(x.PluginExistingMetadata, x.PluginNewUserPlugin, + downloadToFilePath)) + { + return; + } if (Settings.AutoRestartAfterChanging) { @@ -406,6 +439,14 @@ await Context.API.UpdatePluginAsync(x.PluginExistingMetadata, x.PluginNewUserPlu IcoPath = icoPath, AsyncAction = async e => { + if (resultsForUpdate.All(x => Context.API.PluginModified(x.ID))) + { + Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_install_error_title"), + string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error"), + string.Join(" ", resultsForUpdate.Select(x => x.Name)))); + return false; + } + string message; if (Settings.AutoRestartAfterChanging) { @@ -427,6 +468,7 @@ await Context.API.UpdatePluginAsync(x.PluginExistingMetadata, x.PluginNewUserPlu return false; } + var anyPluginSuccess = false; await Task.WhenAll(resultsForUpdate.Select(async plugin => { var downloadToFilePath = Path.Combine(Path.GetTempPath(), @@ -444,8 +486,11 @@ await DownloadFileAsync( if (cts.IsCancellationRequested) return; else - await Context.API.UpdatePluginAsync(plugin.PluginExistingMetadata, plugin.PluginNewUserPlugin, - downloadToFilePath); + if (!await Context.API.UpdatePluginAsync(plugin.PluginExistingMetadata, plugin.PluginNewUserPlugin, + downloadToFilePath)) + return; + + anyPluginSuccess = true; } catch (Exception ex) { @@ -458,6 +503,8 @@ await Context.API.UpdatePluginAsync(plugin.PluginExistingMetadata, plugin.Plugin } })); + if (!anyPluginSuccess) return false; + if (Settings.AutoRestartAfterChanging) { Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_update_title"), @@ -559,6 +606,20 @@ internal List InstallFromLocalPath(string localPath) { var plugin = Utilities.GetPluginInfoFromZip(localPath); + if (plugin == null) + { + return new List + { + new() + { + Title = Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_title"), + SubTitle = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_subtitle"), + localPath), + IcoPath = icoPath + } + }; + } + plugin.LocalInstallPath = localPath; return new List @@ -600,14 +661,17 @@ private bool InstallSourceKnown(string url) return false; var author = pieces[3]; + var acceptedHost = "github.com"; var acceptedSource = "https://github.com"; var constructedUrlPart = string.Format("{0}/{1}/", acceptedSource, author); - return url.StartsWith(acceptedSource) && - Context.API.GetAllPlugins().Any(x => - !string.IsNullOrEmpty(x.Metadata.Website) && - x.Metadata.Website.StartsWith(constructedUrlPart) - ); + if (!Uri.TryCreate(url, UriKind.Absolute, out var uri) || uri.Host != acceptedHost) + return false; + + return Context.API.GetAllPlugins().Any(x => + !string.IsNullOrEmpty(x.Metadata.Website) && + x.Metadata.Website.StartsWith(constructedUrlPart) + ); } internal async ValueTask> RequestInstallOrUpdateAsync(string search, CancellationToken token, @@ -649,7 +713,7 @@ internal async ValueTask> RequestInstallOrUpdateAsync(string search return Search(results, search); } - private void Install(UserPlugin plugin, string downloadedFilePath) + private bool Install(UserPlugin plugin, string downloadedFilePath) { if (!File.Exists(downloadedFilePath)) throw new FileNotFoundException($"Plugin {plugin.ID} zip file not found at {downloadedFilePath}", @@ -657,10 +721,13 @@ private void Install(UserPlugin plugin, string downloadedFilePath) try { - Context.API.InstallPlugin(plugin, downloadedFilePath); + if (!Context.API.InstallPlugin(plugin, downloadedFilePath)) + return false; if (!plugin.IsFromLocalInstallPath) File.Delete(downloadedFilePath); + + return true; } catch (FileNotFoundException e) { @@ -682,6 +749,8 @@ private void Install(UserPlugin plugin, string downloadedFilePath) plugin.Name)); Context.API.LogException(ClassName, e.Message, e); } + + return false; } internal List RequestUninstall(string search) @@ -696,6 +765,14 @@ internal List RequestUninstall(string search) IcoPath = x.Metadata.IcoPath, AsyncAction = async e => { + if (Context.API.PluginModified(x.Metadata.ID)) + { + Context.API.ShowMsgError( + string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_title"), x.Metadata.Name), + Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_message")); + return false; + } + string message; if (Settings.AutoRestartAfterChanging) { @@ -717,7 +794,10 @@ internal List RequestUninstall(string search) MessageBoxButton.YesNo) == MessageBoxResult.Yes) { Context.API.HideMainWindow(); - await UninstallAsync(x.Metadata); + if (!await UninstallAsync(x.Metadata)) + { + return false; + } if (Settings.AutoRestartAfterChanging) { Context.API.RestartApp(); @@ -742,7 +822,7 @@ internal List RequestUninstall(string search) return Search(results, search); } - private async Task UninstallAsync(PluginMetadata plugin) + private async Task UninstallAsync(PluginMetadata plugin) { try { @@ -750,13 +830,14 @@ private async Task UninstallAsync(PluginMetadata plugin) Context.API.GetTranslation("plugin_pluginsmanager_keep_plugin_settings_subtitle"), Context.API.GetTranslation("plugin_pluginsmanager_keep_plugin_settings_title"), button: MessageBoxButton.YesNo) == MessageBoxResult.No; - await Context.API.UninstallPluginAsync(plugin, removePluginSettings); + return await Context.API.UninstallPluginAsync(plugin, removePluginSettings); } catch (ArgumentException e) { Context.API.LogException(ClassName, e.Message, e); Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_error_title"), - Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error")); + string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error"), plugin.Name)); + return false; } } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs index 4bb78f6ff8d..d76ce40c41e 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs @@ -65,9 +65,7 @@ internal static UserPlugin GetPluginInfoFromZip(string filePath) using (ZipArchive archive = System.IO.Compression.ZipFile.OpenRead(filePath)) { - var pluginJsonPath = archive.Entries.FirstOrDefault(x => x.Name == "plugin.json").ToString(); - ZipArchiveEntry pluginJsonEntry = archive.GetEntry(pluginJsonPath); - + var pluginJsonEntry = archive.Entries.FirstOrDefault(x => x.Name == "plugin.json"); if (pluginJsonEntry != null) { using Stream stream = pluginJsonEntry.Open(); diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index 327011ac31d..949e9e9db8b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json @@ -4,7 +4,7 @@ "pm" ], "Name": "Plugins Manager", - "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", + "Description": "Install, uninstall or update Flow Launcher plugins via the search window", "Author": "Jeremy Wu", "Version": "1.0.0", "Language": "csharp", diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml index 7e59db5ec06..1d7ff227b51 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml @@ -8,7 +8,7 @@ zamknij {0} procesów zamknij wszystkie instancje - Show title for processes with visible windows - Put processes with visible windows on the top + Pokaż tytuł dla procesów z widocznymi oknami + Umieść procesy z widocznymi oknami na górze diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml index 56004028bb7..6d2086abc45 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml @@ -8,7 +8,7 @@ вбити {0} процесів вбити всі екземпляри - Show title for processes with visible windows - Put processes with visible windows on the top + Показувати назву процесів із видимими вікнами + Помістити процеси з видимими вікнами у верхній частині diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml index 7919ae7cb60..cf716a15344 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml @@ -46,8 +46,8 @@ Bitte wählen Sie eine Programmquelle aus Sind Sie sicher, dass Sie die ausgewählten Programmquellen löschen wollen? - Please select program sources that are not added by you - Please select program sources that are added by you + Bitte wählen Sie die Programmquellen aus, die nicht von Ihnen hinzugefügt werden + Bitte wählen Sie die Programmquellen aus, die von Ihnen hinzugefügt werden Eine andere Programmquelle mit dem gleichen Ort ist bereits vorhanden. Programmquelle @@ -76,7 +76,7 @@ Als anderer Benutzer ausführen Als Administrator ausführen Enthaltenden Ordner öffnen - Hide + Ausblenden Zielordner öffnen Programm diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml index 4a1d815ec68..0134627c5ec 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml @@ -6,14 +6,14 @@ 削除 編集 追加 - Name + 名前 有効 Enabled 無効 Status Enabled Disabled - Location + 場所 All Programs File Type Reindex diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml index 290954d5fef..29158b2cefb 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml @@ -34,8 +34,8 @@ Приховує програми з поширеними назвами деінсталяторів, наприклад, unins000.exe Пошук в описі програми Flow буде шукати опис програми - Hide duplicated apps - Hide duplicated Win32 programs that are already in the UWP list + Приховати дублікати застосунків + Приховати дублікати програми Win32, які вже є в списку UWP Суфікси Максимальна глибина @@ -46,8 +46,8 @@ Будь ласка, виберіть джерело програми Ви впевнені, що хочете видалити вибрані джерела програм? - Please select program sources that are not added by you - Please select program sources that are added by you + Виберіть джерела програм, які не були додані вами. + Виберіть джерела програм, які були додані вами. Інше програмне джерело з тим самим розташуванням вже існує. Вихідний код програми @@ -76,7 +76,7 @@ Запустити від імені іншого користувача Запустити від імені адміністратора Відкрити папку - Hide + Приховати Відкрити цільову папку Програма @@ -86,7 +86,7 @@ Кастомізований провідник Аргументи - You can customize the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available. + Ви можете налаштувати провідник, який використовується для відкриття теки контейнера, ввівши змінну середовища провідника, який ви хочете використовувати. Буде корисно використовувати CMD, аби перевірити, чи доступна змінна середовища. Введіть спеціальні аргументи, які ви хочете додати до вашого провідника. %s для батьківського каталогу, %f для повного шляху (працює лише для win32). Докладнішу інформацію можна знайти на веб-сайті провідника. diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs index cb33250e15e..c2f4574a94a 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs @@ -290,12 +290,13 @@ private static IEnumerable CurrentUserPackages() } private static readonly Channel PackageChangeChannel = Channel.CreateBounded(1); + private static PackageCatalog? catalog; public static async Task WatchPackageChangeAsync() { if (Environment.OSVersion.Version.Major >= 10) { - var catalog = PackageCatalog.OpenForCurrentUser(); + catalog ??= PackageCatalog.OpenForCurrentUser(); catalog.PackageInstalling += (_, args) => { if (args.IsComplete) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml index d209cb739ca..d4747478445 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml @@ -6,7 +6,7 @@ Натисніть будь-яку клавішу, щоб закрити це вікно... Не закривати командний рядок після виконання команди Завжди запускати від імені адміністратора - Use Windows Terminal + Використовувати Термінал Windows Запустити від імені іншого користувача Shell Дозволяє виконувати системні команди з Flow Launcher diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index d0add9f3155..a51aadec7df 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -194,10 +194,13 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin var workingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var runAsAdministratorArg = !runAsAdministrator && !_settings.RunAsAdministrator ? "" : "runas"; - ProcessStartInfo info = new() + var info = new ProcessStartInfo() { - Verb = runAsAdministratorArg, WorkingDirectory = workingDirectory, + Verb = runAsAdministratorArg, + WorkingDirectory = workingDirectory, }; + var notifyStr = Context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close"); + var addedCharacter = _settings.UseWindowsTerminal ? "\\" : ""; switch (_settings.Shell) { case Shell.Cmd: @@ -211,8 +214,19 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin { info.FileName = "cmd.exe"; } - - info.ArgumentList.Add($"{(_settings.LeaveShellOpen ? "/k" : "/c")} {command} {(_settings.CloseShellAfterPress ? $"&& echo {Context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")} && pause > nul /c" : "")}"); + if (_settings.LeaveShellOpen) + { + info.ArgumentList.Add("/k"); + } + else + { + info.ArgumentList.Add("/c"); + } + info.ArgumentList.Add( + $"{command}" + + $"{(_settings.CloseShellAfterPress ? + $" && echo {notifyStr} && pause > nul /c" : + "")}"); break; } @@ -220,7 +234,6 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin { // Using just a ; doesn't work with wt, as it's used to create a new tab for the terminal window // \\ must be escaped for it to work properly, or breaking it into multiple arguments - var addedCharacter = _settings.UseWindowsTerminal ? "\\" : ""; if (_settings.UseWindowsTerminal) { info.FileName = "wt.exe"; @@ -238,7 +251,11 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin else { info.ArgumentList.Add("-Command"); - info.ArgumentList.Add($"{command}{addedCharacter}; {(_settings.CloseShellAfterPress ? $"Write-Host '{Context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")}'{addedCharacter}; [System.Console]::ReadKey(){addedCharacter}; exit" : "")}"); + info.ArgumentList.Add( + $"{command}{addedCharacter};" + + $"{(_settings.CloseShellAfterPress ? + $" Write-Host '{notifyStr}'{addedCharacter}; [System.Console]::ReadKey(){addedCharacter}; exit" : + "")}"); } break; } @@ -247,7 +264,6 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin { // Using just a ; doesn't work with wt, as it's used to create a new tab for the terminal window // \\ must be escaped for it to work properly, or breaking it into multiple arguments - var addedCharacter = _settings.UseWindowsTerminal ? "\\" : ""; if (_settings.UseWindowsTerminal) { info.FileName = "wt.exe"; @@ -262,7 +278,11 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin info.ArgumentList.Add("-NoExit"); } info.ArgumentList.Add("-Command"); - info.ArgumentList.Add($"{command}{addedCharacter}; {(_settings.CloseShellAfterPress ? $"Write-Host '{Context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")}'{addedCharacter}; [System.Console]::ReadKey(){addedCharacter}; exit" : "")}"); + info.ArgumentList.Add( + $"{command}{addedCharacter};" + + $"{(_settings.CloseShellAfterPress ? + $" Write-Host '{notifyStr}'{addedCharacter}; [System.Console]::ReadKey(){addedCharacter}; exit" : + "")}"); break; } diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml index 27fee87be24..7d131d94426 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml @@ -2,7 +2,7 @@ - Name + 名前 説明 コマンド diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml index c09a447d29c..33cee56d81e 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml @@ -69,7 +69,7 @@ Zresetuj Potwierdź Anuluj - Please enter a non-empty command keyword + Proszę wprowadzić niepuste słowo kluczowe polecenia Komendy systemowe Wykonywanie komend systemowych, np. wyłącz, zablokuj komputer, otwórz ustawienia itp. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml index 19d69511b10..c82be249adc 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml @@ -26,7 +26,7 @@ Поради щодо Flow Launcher Тека UserData Flow Launcher Перемкнути режим гри - Set the Flow Launcher Theme + Встановити тему Flow Launcher Редагувати @@ -51,7 +51,7 @@ Перегляньте документацію Flow Launcher для отримання додаткової допомоги та підказок щодо використання порад Відкрити каталог, де зберігаються налаштування Flow Launcher Перемкнути режим гри - Quickly change the Flow Launcher theme + Швидко змінити тему Flow Launcher Успішно @@ -62,14 +62,14 @@ Ви впевнені, що хочете перезавантажити комп'ютер за допомогою додаткових параметрів завантаження? Ви впевнені, що хочете вийти з системи? - Command Keyword Setting - Custom Command Keyword - Enter a keyword to search for command: {0}. This keyword is used to match your query. - Command Keyword + Налаштування ключового слова команди + Власне ключове слово команди + Введіть ключове слово для пошуку команди: {0}. Це ключове слово використовується для відповідності вашому запиту. + Ключове слово команди Скинути Підтвердити Скасувати - Please enter a non-empty command keyword + Введіть непорожнє ключове слово команди Системні команди Надає команди, пов'язані з системою, наприклад, вимкнення, блокування, налаштування тощо. diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml index d693a3f28d2..05ee397778f 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml @@ -17,7 +17,7 @@ Wyzwalacz Adres URL Szukaj - Use Search Query Autocomplete + Użyj autouzupełniania zapytań wyszukiwania Autouzupełnianie danych z: Musisz wybrać coś z listy Czy jesteś pewien że chcesz usunąć {0}? diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml index 5536a7e680e..51e1efc6eba 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml @@ -17,7 +17,7 @@ Ключове слово дії URL Пошук - Use Search Query Autocomplete + Використовувати автозаповнення пошукового запиту Автозаповнення даних з: Будь ласка, виберіть пошуковий запит в Інтернеті Ви впевнені, що хочете видалити {0}? @@ -29,8 +29,8 @@ Таким чином, загальна формула для пошуку на Netflix має вигляд https://www.netflix.com/search?q={q} - Copy URL - Copy search URL to clipboard + Копіювати URL + Скопіювати URL-адресу пошуку в буфер обміну Назва diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx index d9de28e4bb7..e963e34da2b 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx @@ -348,7 +348,7 @@ Area UpdateAndSecurity - Sichern und wiederherstellen + Sichern und Wiederherstellen Area Control Panel (legacy settings) @@ -1324,7 +1324,7 @@ Area Control Panel (legacy settings) - Remotedesktop + Remote-Desktop Area System @@ -1752,7 +1752,7 @@ Einen Dateityp immer in einem spezifischen Programm öffnen lassen - Stimme ändern + Ändern der Stimme des Erzählers Tastaturprobleme finden und beheben @@ -1761,7 +1761,7 @@ Screenreader verwenden - Arbeitsgruppe auf diesem Computer Anzeigen + Anzeigen, zu welcher Arbeitsgruppe dieser Computer gehört Mausrad-Einstellungen ändern @@ -1773,7 +1773,7 @@ Probleme finden und beheben - Einstellung für empfangene Inhalte von Tippen und Senden + Ändern der Einstellungen für Inhalte, die über Tippen und Senden empfangen werden Change default settings for media or devices @@ -1812,7 +1812,7 @@ Ein Bluetooth-Gerät hinzufügen - Customise the mouse buttons + Individuelles Anpassen der Maustasten Set tablet buttons to perform certain tasks @@ -1869,16 +1869,16 @@ Scanner und Kameras ansehen - Microsoft IME Register Word (Japanese) + Microsoft IME Register Word (Japanisch) - Restore your files with File History + Ihre Dateien mit File History wiederherstellen Turn On-Screen keyboard on or off - Block or allow third-party cookies + Cookies von Drittanbietern blockieren oder zulassen Audioaufzeichnungsprobleme finden und beheben @@ -1902,7 +1902,7 @@ Preview, delete, show or hide fonts - Microsoft Quick Settings + Microsoft-Schnelleinstellungen View reliability history @@ -1917,7 +1917,7 @@ Sicherheitsrichtlinien zurücksetzen - Pop-ups blockieren oder erlauben + Pop-ups blockieren oder zulassen Autovervollständigung im Internet Explorer ein- oder ausschalten @@ -1938,7 +1938,7 @@ Automatische Fensteranordnung ausschalten - Troubleshooting History + Fehlerbehebungshistorie Speicherprobleme Ihres Computers diagnostizieren @@ -1968,13 +1968,13 @@ Specify single- or double-click to open - Select users who can use remote desktop + Benutzer auswählen, die den Remote-Desktop verwenden können - Show which programs are installed on your computer + Anzeigen, welche Programme auf Ihrem Computer installiert sind - Allow remote access to your computer + Remote-Zugriff auf Ihren Computer erlauben Erweiterte Systemeinstellungen ansehen @@ -2082,7 +2082,7 @@ Ihren Wiederherstellungsschlüssel sichern - Save backup copies of your files with File History + Backup-Kopien Ihrer Dateien mit File History speichern View current accessibility settings @@ -2143,7 +2143,7 @@ Windows-Features ein- oder ausschalten - Betriebssystem, welches auf deinem Computer läuft, anzeigen + Anzeigen, welches Betriebssystem auf Ihrem Computer ausgeführt wird Lokale Dienste ansehen @@ -2176,7 +2176,7 @@ Change advanced colour management settings for displays, scanners and printers - Lasse Windows Vereinfachte Zugriffseinstellungen vorschlagen + Windows die Einstellungen für erleichterte Bedienung vorschlagen lassen Clear disk space by deleting unnecessary files @@ -2191,16 +2191,16 @@ Record steps to reproduce a problem - Aussehen und Leistung von Windows anpassen + Anpassen des Erscheinungsbildes und der Leistung von Windows Einstellungen für Microsoft IME (Japanisch) - Lade jemanden ein, sich mit deinem PC zu verbinden und dir zu helfen oder anderen zu helfen + Laden Sie jemanden ein, eine Verbindung zu Ihrem PC herzustellen und Ihnen zu helfen, oder bieten Sie an, jemand anderem zu helfen - Programme für frühere Versionen von Windows ausführen + Programme ausführen, die für frühere Versionen von Windows entwickelt wurden Choose the order of how your screen rotates @@ -2239,7 +2239,7 @@ Wählen Sie, wie Sie Links öffnen - Allow Remote Assistance invitations to be sent from this computer + Erlauben, dass Einladungen zur Remote-Unterstützung von diesem Computer aus gesendet werden Task-Manager @@ -2257,7 +2257,7 @@ Lupe ein- oder ausschalten - See the name of this computer + Den Namen dieses Computers ansehen Netzwerkverbindungen ansehen @@ -2302,13 +2302,13 @@ How to change the size of virtual memory - Hear text read aloud with Narrator + Text mit Erzähler vorlesen lassen Set up USB game controllers - Show which domain your computer is on + Anzeigen, in welcher Domäne sich Ihr Computer befindet Alle Problemberichte ansehen @@ -2401,7 +2401,7 @@ Create and format hard disk partitions - Change date, time or number formats + Datums-, Zeit- oder Zahlenformate ändern Change PC wake-up settings @@ -2452,13 +2452,13 @@ Change the way measurements are displayed - Press key combinations one at a time + Tastenkombinationen nacheinander drücken - Restore data, files or computer from backup (Windows 7) + Daten, Dateien oder Computer aus Backup wiederherstellen (Windows 7) - Set your default programs + Ihre per Default vorgegebenen Programme festlegen Eine Breitbandverbindung einrichten @@ -2473,10 +2473,10 @@ Geplante Tasks - Ignore repeated keystrokes using FilterKeys + Wiederholte Tastenanschläge unter Verwendung von FilterKeys ignorieren - Find and fix bluescreen problems + Probleme mit Bluescreens finden und beheben Einen Ton hören, wenn Tasten gedrückt werden @@ -2485,16 +2485,16 @@ Browsing-Historie löschen - Change what the power buttons do + Ändern, was die Power-Tasten bewirken - Create standard user account + Standard-Benutzerkonto erstellen Take speech tutorials - View system resource usage in Task Manager + Systemressourcennutzung im Task-Manager ansehen Einen Account erstellen diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx index 91be8a39225..6625a42ddc2 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx @@ -837,7 +837,7 @@ ライト モード - Location + 場所 Area Privacy diff --git a/appveyor.yml b/appveyor.yml index b38e5bb1a88..39e2a114c7c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,7 @@ -version: '1.20.1.{build}' +version: '1.20.2.{build}' + +# Do not build on tags because we create a release on merge to master. Otherwise will upload artifacts twice changing the hash, as well as triggering duplicate GitHub release action & NuGet deployments. +skip_tags: true init: - ps: | @@ -14,7 +17,6 @@ init: cache: - '%USERPROFILE%\.nuget\packages -> **.sln, **.csproj' # preserve nuget folder (packages) unless the solution or projects change - assembly_info: patch: true file: SolutionAssemblyInfo.cs @@ -67,7 +69,17 @@ deploy: - provider: GitHub repository: Flow-Launcher/Prereleases release: v$(prereleaseTag) - description: 'This is the early access build of our upcoming release. All changes contained here are reviewed, tested and stable to use.\n\nSee our [release](https://github.com/Flow-Launcher/Flow.Launcher/pulls?q=is%3Aopen+is%3Apr+label%3Arelease) Pull Request for details.\n\nFor latest production release visit [here](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest)\n\nPlease report any bugs or issues over at the [main repository](https://github.com/Flow-Launcher/Flow.Launcher/issues)' + description: | + This is the early access build of our upcoming release. + All changes contained here are reviewed, tested and stable to use. + + This build includes new changes from commit: + $(APPVEYOR_REPO_COMMIT_MESSAGE) + + See all changes in this early access by going to the [milstones](https://github.com/Flow-Launcher/Flow.Launcher/milestones?sort=title&direction=asc) section and choosing the upcoming milestone. + For latest production release visit [here](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest) + + Please report any bugs or issues over at the [main repository](https://github.com/Flow-Launcher/Flow.Launcher/issues)' auth_token: secure: ij4UeXUYQBDJxn2YRAAhUOjklOGVKDB87Hn5J8tKIzj13yatoI7sLM666QDQFEgv artifact: Squirrel Installer, Portable Version, Squirrel nupkg, Squirrel RELEASES