├── .cm └── gitstream.cm ├── .editorconfig ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yaml │ ├── code-review.md │ ├── discussion.md.not_used │ └── feature-request.md ├── actions │ └── spelling │ │ ├── README.md │ │ ├── advice.md │ │ ├── allow.txt │ │ ├── candidate.patterns │ │ ├── excludes.txt │ │ ├── expect.txt │ │ ├── line_forbidden.patterns │ │ ├── patterns.txt │ │ └── reject.txt ├── dependabot.yml ├── pr-labeler.yml ├── update_release_pr.py └── workflows │ ├── default_plugins.yml │ ├── dotnet.yml │ ├── gitstream.yml │ ├── pr_assignee.yml │ ├── pr_milestone.yml │ ├── release_deploy.yml │ ├── release_pr.yml │ ├── spelling.yml │ ├── stale.yml │ ├── top-ranking-issues.yml │ └── winget.yml ├── .gitignore ├── Artworks ├── Default Icons │ ├── app_missing_img.png │ ├── app_missing_img_01.png │ ├── app_missing_img_01.svg │ ├── app_missing_img_02.png │ ├── app_missing_img_02.svg │ ├── app_missing_img_03.png │ ├── app_missing_img_03.svg │ ├── app_missing_img_buttons.png │ ├── app_missing_img_buttons.svg │ ├── app_missing_img_fluent.png │ ├── app_missing_img_fluent.svg │ ├── app_missing_img_huge.png │ ├── app_missing_img_huge.svg │ ├── app_missing_img_lightblue.png │ ├── app_missing_img_lightblue.svg │ ├── app_missing_img_lightblue_buttons.png │ ├── app_missing_img_lightblue_buttons.svg │ ├── app_missing_img_minimal.png │ ├── app_missing_img_minimal.svg │ ├── app_missing_img_minimal_buttons.png │ └── app_missing_img_minimal_buttons.svg ├── Logo │ ├── app_error.png │ ├── logo.ico │ ├── logo.png │ ├── logo.svg │ ├── logo128.png │ ├── logo16.png │ ├── logo256.png │ ├── logo32.png │ ├── logo48.png │ ├── logo512.png │ ├── logo64.png │ └── resources │ │ ├── flow-header-landscape-transparent.png │ │ ├── flow-header-landscape.png │ │ ├── flow-header-square-transparent.png │ │ ├── flow-header-square.png │ │ ├── flow-logo.ai │ │ └── preview.pdf ├── app.ico ├── app.png ├── app_error.png ├── app_missing_img.png └── mainsearch.png ├── Directory.Build.props ├── Directory.Build.targets ├── Flow.Launcher.Core ├── Configuration │ ├── IPortable.cs │ └── Portable.cs ├── ExternalPlugins │ ├── CommunityPluginSource.cs │ ├── CommunityPluginStore.cs │ ├── Environments │ │ ├── AbstractPluginEnvironment.cs │ │ ├── JavaScriptEnvironment.cs │ │ ├── JavaScriptV2Environment.cs │ │ ├── PythonEnvironment.cs │ │ ├── PythonV2Environment.cs │ │ ├── TypeScriptEnvironment.cs │ │ └── TypeScriptV2Environment.cs │ ├── FlowPluginException.cs │ └── PluginsManifest.cs ├── Flow.Launcher.Core.csproj ├── FodyWeavers.xml ├── Plugin │ ├── ExecutablePlugin.cs │ ├── ExecutablePluginV2.cs │ ├── JsonPRCModel.cs │ ├── JsonRPCConfigurationModel.cs │ ├── JsonRPCPlugin.cs │ ├── JsonRPCPluginBase.cs │ ├── JsonRPCPluginSettings.cs │ ├── JsonRPCPluginV2.cs │ ├── JsonRPCV2Models │ │ ├── JsonRPCExecuteResponse.cs │ │ ├── JsonRPCPublicAPI.cs │ │ └── JsonRPCQueryRequest.cs │ ├── NodePlugin.cs │ ├── NodePluginV2.cs │ ├── PluginAssemblyLoader.cs │ ├── PluginConfig.cs │ ├── PluginManager.cs │ ├── PluginsLoader.cs │ ├── ProcessStreamPluginV2.cs │ ├── PythonPlugin.cs │ ├── PythonPluginV2.cs │ ├── QueryBuilder.cs │ └── README.md ├── Properties │ └── AssemblyInfo.cs ├── README.md ├── Resource │ ├── AvailableLanguages.cs │ ├── FontHelper.cs │ ├── Internationalization.cs │ ├── JsonObjectConverter.cs │ ├── Language.cs │ ├── LocalizationConverter.cs │ ├── LocalizedDescriptionAttribute.cs │ ├── Theme.cs │ └── TranslationConverter.cs ├── Storage │ └── IRemovable.cs └── Updater.cs ├── Flow.Launcher.Infrastructure ├── Constant.cs ├── Exception │ └── ExceptionFormatter.cs ├── FileExplorerHelper.cs ├── Flow.Launcher.Infrastructure.csproj ├── FodyWeavers.xml ├── Helper.cs ├── Hotkey │ ├── GlobalHotkey.cs │ ├── HotkeyModel.cs │ ├── IHotkeySettings.cs │ └── RegisteredHotkeyData.cs ├── Http │ └── Http.cs ├── Image │ ├── ImageCache.cs │ ├── ImageHashGenerator.cs │ ├── ImageLoader.cs │ └── ThumbnailReader.cs ├── KeyConstant.cs ├── Logger │ └── Log.cs ├── MonitorInfo.cs ├── NativeMethods.txt ├── PInvokeExtensions.cs ├── PinyinAlphabet.cs ├── Properties │ └── AssemblyInfo.cs ├── Stopwatch.cs ├── Storage │ ├── BinaryStorage.cs │ ├── FlowLauncherJsonStorage.cs │ ├── JsonStorage.cs │ ├── PluginBinaryStorage.cs │ └── PluginJsonStorage.cs ├── StringMatcher.cs ├── UI │ └── EnumBindingSource.cs ├── UserSettings │ ├── CustomBrowserViewModel.cs │ ├── CustomExplorerViewModel.cs │ ├── CustomShortcutModel.cs │ ├── DataLocation.cs │ ├── HttpProxy.cs │ ├── PluginHotkey.cs │ ├── PluginSettings.cs │ └── Settings.cs └── Win32Helper.cs ├── Flow.Launcher.Plugin ├── ActionContext.cs ├── AllowedLanguage.cs ├── BaseModel.cs ├── EventHandler.cs ├── Features.cs ├── Flow.Launcher.Plugin.csproj ├── FodyWeavers.xml ├── GlyphInfo.cs ├── Interfaces │ ├── IAsyncExternalPreview.cs │ ├── IAsyncHomeQuery.cs │ ├── IAsyncPlugin.cs │ ├── IAsyncReloadable.cs │ ├── IContextMenu.cs │ ├── IHomeQuery.cs │ ├── IPlugin.cs │ ├── IPluginI18n.cs │ ├── IPublicAPI.cs │ ├── IReloadable.cs │ ├── IResultUpdated.cs │ ├── ISavable.cs │ └── ISettingProvider.cs ├── KeyEvent.cs ├── NativeMethods.txt ├── PluginInitContext.cs ├── PluginMetadata.cs ├── PluginPair.cs ├── Properties │ └── AssemblyInfo.cs ├── Query.cs ├── README.md ├── Result.cs ├── SharedCommands │ ├── FilesFolders.cs │ ├── SearchWeb.cs │ └── ShellCommand.cs ├── SharedModels │ ├── MatchResult.cs │ └── ThemeData.cs └── UserPlugin.cs ├── Flow.Launcher.Test ├── FilesFoldersTest.cs ├── Flow.Launcher.Test.csproj ├── FuzzyMatcherTest.cs ├── HttpTest.cs ├── PluginLoadTest.cs ├── Plugins │ ├── ExplorerTest.cs │ ├── JsonRPCPluginTest.cs │ └── UrlPluginTest.cs └── QueryBuilderTest.cs ├── Flow.Launcher.sln ├── Flow.Launcher.sln.DotSettings ├── Flow.Launcher ├── ActionKeywords.xaml ├── ActionKeywords.xaml.cs ├── App.xaml ├── App.xaml.cs ├── Converters │ ├── BadgePositionConverter.cs │ ├── BoolToIMEConversionModeConverter.cs │ ├── BoolToVisibilityConverter.cs │ ├── BorderClipConverter.cs │ ├── DateTimeFormatToNowConverter.cs │ ├── DiameterToCenterPointConverter.cs │ ├── HighlightTextConverter.cs │ ├── IconRadiusConverter.cs │ ├── OpenResultHotkeyVisibilityConverter.cs │ ├── OrdinalConverter.cs │ ├── QuerySuggestionBoxConverter.cs │ ├── SizeRatioConverter.cs │ ├── StringToKeyBindingConverter.cs │ └── TextConverter.cs ├── CustomQueryHotkeySetting.xaml ├── CustomQueryHotkeySetting.xaml.cs ├── CustomShortcutSetting.xaml ├── CustomShortcutSetting.xaml.cs ├── Flow.Launcher.csproj ├── FodyWeavers.xml ├── Helper │ ├── AutoStartup.cs │ ├── DataWebRequestFactory.cs │ ├── ErrorReporting.cs │ ├── HotKeyMapper.cs │ ├── SingleInstance.cs │ ├── SingletonWindowOpener.cs │ ├── SyntaxSugars.cs │ ├── WallpaperPathRetrieval.cs │ └── WindowsMediaPlayerHelper.cs ├── HotkeyControl.xaml ├── HotkeyControl.xaml.cs ├── HotkeyControlDialog.xaml ├── HotkeyControlDialog.xaml.cs ├── Images │ ├── Browser.png │ ├── Error.png │ ├── Exclamation.png │ ├── Information.png │ ├── Link.png │ ├── New Message.png │ ├── Question.png │ ├── app.ico │ ├── app.png │ ├── app_error.png │ ├── app_missing_img.png │ ├── calculator.png │ ├── cancel.png │ ├── close.png │ ├── cmd.png │ ├── color.png │ ├── copy.png │ ├── dev.ico │ ├── down.png │ ├── file.png │ ├── find.png │ ├── folder.png │ ├── gamemode.ico │ ├── history.png │ ├── illustration_01.png │ ├── illustration_02.png │ ├── image.png │ ├── info.png │ ├── keyboard.png │ ├── loading.png │ ├── lock.png │ ├── logoff.png │ ├── mainsearch.svg │ ├── ok.png │ ├── open.png │ ├── page_img01.png │ ├── plugin.png │ ├── plugins.png │ ├── proxy.png │ ├── recyclebin.png │ ├── restart.png │ ├── search.png │ ├── settings.png │ ├── shutdown.png │ ├── sleep.png │ ├── store.png │ ├── theme.png │ ├── up.png │ ├── update.png │ └── wizard.png ├── Languages │ ├── ar.xaml │ ├── cs.xaml │ ├── da.xaml │ ├── de.xaml │ ├── en.xaml │ ├── es-419.xaml │ ├── es.xaml │ ├── fr.xaml │ ├── he.xaml │ ├── it.xaml │ ├── ja.xaml │ ├── ko.xaml │ ├── nb-NO.xaml │ ├── nb.xaml │ ├── nl.xaml │ ├── pl.xaml │ ├── pt-br.xaml │ ├── pt-pt.xaml │ ├── ru.xaml │ ├── sk.xaml │ ├── sr.xaml │ ├── tr.xaml │ ├── uk-UA.xaml │ ├── vi.xaml │ ├── zh-cn.xaml │ └── zh-tw.xaml ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── MessageBoxEx.xaml ├── MessageBoxEx.xaml.cs ├── Msg.xaml ├── Msg.xaml.cs ├── Notification.cs ├── ProgressBoxEx.xaml ├── ProgressBoxEx.xaml.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── PublishProfiles │ │ └── Net7.0-SelfContained.pubxml │ ├── Resources.Designer.cs │ ├── Resources.fr-FR.resx │ ├── Resources.he-IL.resx │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── PublicAPIInstance.cs ├── ReportWindow.xaml ├── ReportWindow.xaml.cs ├── Resources │ ├── Controls │ │ ├── Card.xaml │ │ ├── Card.xaml.cs │ │ ├── CardGroup.xaml │ │ ├── CardGroup.xaml.cs │ │ ├── CardGroupCardStyleSelector.cs │ │ ├── ExCard.xaml │ │ ├── ExCard.xaml.cs │ │ ├── HotkeyDisplay.xaml │ │ ├── HotkeyDisplay.xaml.cs │ │ ├── HyperLink.xaml │ │ ├── HyperLink.xaml.cs │ │ ├── InfoBar.xaml │ │ ├── InfoBar.xaml.cs │ │ ├── InstalledPluginDisplay.xaml │ │ ├── InstalledPluginDisplay.xaml.cs │ │ ├── InstalledPluginDisplayBottomData.xaml │ │ ├── InstalledPluginDisplayBottomData.xaml.cs │ │ ├── InstalledPluginDisplayKeyword.xaml │ │ └── InstalledPluginDisplayKeyword.xaml.cs │ ├── CustomControlTemplate.xaml │ ├── Dark.xaml │ ├── Light.xaml │ ├── MarkupExtensions │ │ ├── CollapsedWhenExtension.cs │ │ ├── HideableVisibilityConverter.cs │ │ └── VisibleWhenExtension.cs │ ├── Pages │ │ ├── WelcomePage1.xaml │ │ ├── WelcomePage1.xaml.cs │ │ ├── WelcomePage2.xaml │ │ ├── WelcomePage2.xaml.cs │ │ ├── WelcomePage3.xaml │ │ ├── WelcomePage3.xaml.cs │ │ ├── WelcomePage4.xaml │ │ ├── WelcomePage4.xaml.cs │ │ ├── WelcomePage5.xaml │ │ └── WelcomePage5.xaml.cs │ ├── Segoe Fluent Icons.ttf │ ├── SettingWindowStyle.xaml │ ├── app.ico │ ├── dev.ico │ └── open.wav ├── ResultListBox.xaml ├── ResultListBox.xaml.cs ├── SelectBrowserWindow.xaml ├── SelectBrowserWindow.xaml.cs ├── SelectFileManagerWindow.xaml ├── SelectFileManagerWindow.xaml.cs ├── SettingPages │ ├── ViewModels │ │ ├── DropdownDataGeneric.cs │ │ ├── SettingsPaneAboutViewModel.cs │ │ ├── SettingsPaneGeneralViewModel.cs │ │ ├── SettingsPaneHotkeyViewModel.cs │ │ ├── SettingsPanePluginStoreViewModel.cs │ │ ├── SettingsPanePluginsViewModel.cs │ │ ├── SettingsPaneProxyViewModel.cs │ │ └── SettingsPaneThemeViewModel.cs │ └── Views │ │ ├── SettingsPaneAbout.xaml │ │ ├── SettingsPaneAbout.xaml.cs │ │ ├── SettingsPaneGeneral.xaml │ │ ├── SettingsPaneGeneral.xaml.cs │ │ ├── SettingsPaneHotkey.xaml │ │ ├── SettingsPaneHotkey.xaml.cs │ │ ├── SettingsPanePluginStore.xaml │ │ ├── SettingsPanePluginStore.xaml.cs │ │ ├── SettingsPanePlugins.xaml │ │ ├── SettingsPanePlugins.xaml.cs │ │ ├── SettingsPaneProxy.xaml │ │ ├── SettingsPaneProxy.xaml.cs │ │ ├── SettingsPaneTheme.xaml │ │ └── SettingsPaneTheme.xaml.cs ├── SettingWindow.xaml ├── SettingWindow.xaml.cs ├── Settings.cs ├── Storage │ ├── HistoryItem.cs │ ├── QueryHistory.cs │ ├── TopMostRecord.cs │ └── UserSelectedRecord.cs ├── Themes │ ├── Base.xaml │ ├── BlurBlack Darker.xaml │ ├── BlurBlack.xaml │ ├── BlurWhite.xaml │ ├── Circle System.xaml │ ├── Cyan Dark.xaml │ ├── Darker Glass.xaml │ ├── Darker.xaml │ ├── Discord Dark.xaml │ ├── Dracula.xaml │ ├── Gray.xaml │ ├── League.xaml │ ├── Midnight.xaml │ ├── Nord Darker.xaml │ ├── Pink.xaml │ ├── SlimLight.xaml │ ├── Sublime.xaml │ ├── ThemeBuilder │ │ ├── Template.xaml │ │ └── ThemeConvertor.py │ ├── Ubuntu.xaml │ ├── Win10System.xaml │ └── Win11Light.xaml ├── ViewModel │ ├── MainViewModel.cs │ ├── PluginStoreItemViewModel.cs │ ├── PluginViewModel.cs │ ├── ResultViewModel.cs │ ├── ResultsForUpdate.cs │ ├── ResultsViewModel.cs │ ├── SelectBrowserViewModel.cs │ ├── SelectFileManagerViewModel.cs │ ├── SettingWindowViewModel.cs │ └── WelcomeViewModel.cs ├── WelcomeWindow.xaml ├── WelcomeWindow.xaml.cs ├── app.manifest └── app.png ├── LICENSE ├── Plugins ├── Flow.Launcher.Plugin.BrowserBookmark │ ├── ChromeBookmarkLoader.cs │ ├── ChromiumBookmarkLoader.cs │ ├── Commands │ │ └── BookmarkLoader.cs │ ├── CustomChromiumBookmarkLoader.cs │ ├── CustomFirefoxBookmarkLoader.cs │ ├── EdgeBookmarkLoader.cs │ ├── FirefoxBookmarkLoader.cs │ ├── Flow.Launcher.Plugin.BrowserBookmark.csproj │ ├── IBookmarkLoader.cs │ ├── Images │ │ ├── bookmark.png │ │ └── copylink.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── Models │ │ ├── Bookmark.cs │ │ ├── CustomBrowser.cs │ │ └── Settings.cs │ ├── Views │ │ ├── CustomBrowserSetting.xaml │ │ ├── CustomBrowserSetting.xaml.cs │ │ ├── SettingsControl.xaml │ │ └── SettingsControl.xaml.cs │ └── plugin.json ├── Flow.Launcher.Plugin.Calculator │ ├── DecimalSeparator.cs │ ├── Flow.Launcher.Plugin.Calculator.csproj │ ├── Images │ │ └── calculator.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── NumberTranslator.cs │ ├── Settings.cs │ ├── ViewModels │ │ └── SettingsViewModel.cs │ ├── Views │ │ ├── CalculatorSettings.xaml │ │ └── CalculatorSettings.xaml.cs │ └── plugin.json ├── Flow.Launcher.Plugin.Explorer │ ├── ContextMenu.cs │ ├── EverythingSDK │ │ ├── x64 │ │ │ └── Everything.dll │ │ └── x86 │ │ │ └── Everything.dll │ ├── Exceptions │ │ ├── EngineNotAvailableException.cs │ │ └── SearchException.cs │ ├── Flow.Launcher.Plugin.Explorer.csproj │ ├── Helper │ │ ├── ShellContextMenu.cs │ │ ├── ShellContextMenuDisplayHelper.cs │ │ └── SortOptionTranslationHelper.cs │ ├── Images │ │ ├── context_menu.png │ │ ├── copy.png │ │ ├── deletefilefolder.png │ │ ├── error.png │ │ ├── everything_error.png │ │ ├── excludeindexpath.png │ │ ├── explorer.png │ │ ├── file.png │ │ ├── folder.png │ │ ├── index_error.png │ │ ├── index_error2.png │ │ ├── quickaccess.png │ │ ├── removequickaccess.png │ │ ├── robot_error.png │ │ ├── user.png │ │ └── windowsindexingoptions.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── Search │ │ ├── Constants.cs │ │ ├── DirectoryInfo │ │ │ └── DirectoryInfoSearch.cs │ │ ├── EnvironmentVariables.cs │ │ ├── Everything │ │ │ ├── EverythingAPI.cs │ │ │ ├── EverythingApiDllImport.cs │ │ │ ├── EverythingDownloadHelper.cs │ │ │ ├── EverythingSearchManager.cs │ │ │ ├── EverythingSearchOption.cs │ │ │ ├── Exceptions │ │ │ │ ├── CreateThreadException.cs │ │ │ │ ├── CreateWindowException.cs │ │ │ │ ├── IPCErrorException.cs │ │ │ │ ├── InvalidCallException.cs │ │ │ │ ├── InvalidIndexException.cs │ │ │ │ ├── MemoryErrorException.cs │ │ │ │ └── RegisterClassExException.cs │ │ │ └── SortOption.cs │ │ ├── IProvider │ │ │ ├── IContentIndexProvider.cs │ │ │ ├── IIndexProvider.cs │ │ │ └── IPathIndexProvider.cs │ │ ├── QuickAccessLinks │ │ │ ├── AccessLink.cs │ │ │ └── QuickAccess.cs │ │ ├── ResultManager.cs │ │ ├── SearchManager.cs │ │ ├── SearchResult.cs │ │ └── WindowsIndex │ │ │ ├── QueryConstructor.cs │ │ │ ├── WindowsIndex.cs │ │ │ └── WindowsIndexSearchManager.cs │ ├── Settings.cs │ ├── ViewModels │ │ ├── ActionKeywordModel.cs │ │ ├── EnumBindingModel.cs │ │ └── SettingsViewModel.cs │ ├── Views │ │ ├── ActionKeywordSetting.xaml │ │ ├── ActionKeywordSetting.xaml.cs │ │ ├── Converters │ │ │ └── EverythingEnumNameConverter.cs │ │ ├── ExplorerSettings.xaml │ │ ├── ExplorerSettings.xaml.cs │ │ ├── PreviewPanel.xaml │ │ └── PreviewPanel.xaml.cs │ └── plugin.json ├── Flow.Launcher.Plugin.PluginIndicator │ ├── Flow.Launcher.Plugin.PluginIndicator.csproj │ ├── Images │ │ └── work.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ └── plugin.json ├── Flow.Launcher.Plugin.PluginsManager │ ├── ContextMenu.cs │ ├── Flow.Launcher.Plugin.PluginsManager.csproj │ ├── Images │ │ ├── manifestsite.png │ │ ├── pluginsmanager.png │ │ ├── request.png │ │ ├── sourcecode.png │ │ └── zipfolder.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── PluginsManager.cs │ ├── Settings.cs │ ├── Utilities.cs │ ├── ViewModels │ │ └── SettingsViewModel.cs │ ├── Views │ │ ├── PluginsManagerSettings.xaml │ │ └── PluginsManagerSettings.xaml.cs │ └── plugin.json ├── Flow.Launcher.Plugin.ProcessKiller │ ├── Flow.Launcher.Plugin.ProcessKiller.csproj │ ├── Images │ │ └── app.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── NativeMethods.txt │ ├── ProcessHelper.cs │ ├── ProcessResult.cs │ ├── Readme.md │ ├── Settings.cs │ ├── ViewModels │ │ └── SettingsViewModel.cs │ ├── Views │ │ ├── SettingsControl.xaml │ │ └── SettingsControl.xaml.cs │ └── plugin.json ├── Flow.Launcher.Plugin.Program │ ├── AddProgramSource.xaml │ ├── AddProgramSource.xaml.cs │ ├── Flow.Launcher.Plugin.Program.csproj │ ├── Images │ │ ├── cmd.png │ │ ├── disable.png │ │ ├── folder.png │ │ ├── program.png │ │ └── user.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Logger │ │ └── ProgramLogger.cs │ ├── Main.cs │ ├── NativeMethods.txt │ ├── ProgramSuffixes.xaml │ ├── ProgramSuffixes.xaml.cs │ ├── Programs │ │ ├── IProgram.cs │ │ ├── ShellLinkHelper.cs │ │ ├── ShellLocalization.cs │ │ ├── UWPPackage.cs │ │ └── Win32.cs │ ├── Settings.cs │ ├── SuffixesConverter.cs │ ├── ViewModels │ │ └── AddProgramSourceViewModel.cs │ ├── Views │ │ ├── Commands │ │ │ └── ProgramSettingDisplay.cs │ │ ├── Models │ │ │ └── ProgramSource.cs │ │ ├── ProgramSetting.xaml │ │ └── ProgramSetting.xaml.cs │ └── plugin.json ├── Flow.Launcher.Plugin.Shell │ ├── Flow.Launcher.Plugin.Shell.csproj │ ├── Images │ │ ├── admin.png │ │ ├── copy.png │ │ ├── shell.png │ │ └── user.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── Settings.cs │ ├── ShellSetting.xaml │ ├── ShellSetting.xaml.cs │ └── plugin.json ├── Flow.Launcher.Plugin.Sys │ ├── Command.cs │ ├── CommandKeywordSetting.xaml │ ├── CommandKeywordSetting.xaml.cs │ ├── Flow.Launcher.Plugin.Sys.csproj │ ├── Images │ │ ├── app.png │ │ ├── checkupdate.png │ │ ├── close.png │ │ ├── hibernate.png │ │ ├── indexoption.png │ │ ├── lock.png │ │ ├── logoff.png │ │ ├── openrecyclebin.png │ │ ├── recyclebin.png │ │ ├── restart.png │ │ ├── restart_advanced.png │ │ ├── shutdown.png │ │ ├── sleep.png │ │ └── theme_selector.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── NativeMethods.txt │ ├── Settings.cs │ ├── SettingsViewModel.cs │ ├── SysSettings.xaml │ ├── SysSettings.xaml.cs │ ├── ThemeSelector.cs │ └── plugin.json ├── Flow.Launcher.Plugin.Url │ ├── Flow.Launcher.Plugin.Url.csproj │ ├── Images │ │ └── url.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── Settings.cs │ └── plugin.json ├── Flow.Launcher.Plugin.WebSearch │ ├── Flow.Launcher.Plugin.WebSearch.csproj │ ├── Images │ │ ├── baidu.png │ │ ├── bing.png │ │ ├── copylink.png │ │ ├── duckduckgo.png │ │ ├── facebook.png │ │ ├── gist.png │ │ ├── github.png │ │ ├── gmail.png │ │ ├── google.png │ │ ├── google_drive.png │ │ ├── google_maps.png │ │ ├── google_translate.png │ │ ├── netflix.png │ │ ├── pictures.png │ │ ├── stackoverflow.png │ │ ├── twitter.png │ │ ├── web_search.png │ │ ├── wiki.png │ │ ├── wolframalpha.png │ │ ├── yahoo.png │ │ ├── youtube.png │ │ └── youtubemusic.png │ ├── Languages │ │ ├── ar.xaml │ │ ├── cs.xaml │ │ ├── da.xaml │ │ ├── de.xaml │ │ ├── en.xaml │ │ ├── es-419.xaml │ │ ├── es.xaml │ │ ├── fr.xaml │ │ ├── he.xaml │ │ ├── it.xaml │ │ ├── ja.xaml │ │ ├── ko.xaml │ │ ├── nb.xaml │ │ ├── nl.xaml │ │ ├── pl.xaml │ │ ├── pt-br.xaml │ │ ├── pt-pt.xaml │ │ ├── ru.xaml │ │ ├── sk.xaml │ │ ├── sr.xaml │ │ ├── tr.xaml │ │ ├── uk-UA.xaml │ │ ├── vi.xaml │ │ ├── zh-cn.xaml │ │ └── zh-tw.xaml │ ├── Main.cs │ ├── SearchSource.cs │ ├── SearchSourceSetting.xaml │ ├── SearchSourceSetting.xaml.cs │ ├── SearchSourceViewModel.cs │ ├── Settings.cs │ ├── SettingsControl.xaml │ ├── SettingsControl.xaml.cs │ ├── SettingsViewModel.cs │ ├── SuggestionSources │ │ ├── Baidu.cs │ │ ├── Bing.cs │ │ ├── DuckDuckGo.cs │ │ ├── Google.cs │ │ └── SuggestionSource.cs │ ├── plugin.json │ └── setting.json └── Flow.Launcher.Plugin.WindowsSettings │ ├── Classes │ └── WindowsSetting.cs │ ├── Flow.Launcher.Plugin.WindowsSettings.csproj │ ├── Helper │ ├── ContextMenuHelper.cs │ ├── JsonSettingsListHelper.cs │ ├── ResultHelper.cs │ ├── TranslationHelper.cs │ └── UnsupportedSettingsHelper.cs │ ├── Images │ ├── ControlPanel_Small.png │ └── WindowsSettings.light.png │ ├── Log.cs │ ├── Main.cs │ ├── Properties │ ├── Resources.Designer.cs │ ├── Resources.ar-SA.resx │ ├── Resources.cs-CZ.resx │ ├── Resources.cs.resx │ ├── Resources.da-DK.resx │ ├── Resources.de-DE.resx │ ├── Resources.de.resx │ ├── Resources.es-419.resx │ ├── Resources.es-EM.resx │ ├── Resources.es.resx │ ├── Resources.fr-FR.resx │ ├── Resources.fr.resx │ ├── Resources.he-IL.resx │ ├── Resources.hu.resx │ ├── Resources.it-IT.resx │ ├── Resources.it.resx │ ├── Resources.ja-JP.resx │ ├── Resources.ja.resx │ ├── Resources.ko-KR.resx │ ├── Resources.ko.resx │ ├── Resources.nb-NO.resx │ ├── Resources.nl-NL.resx │ ├── Resources.pl-PL.resx │ ├── Resources.pl.resx │ ├── Resources.pt-BR.resx │ ├── Resources.pt-PT.resx │ ├── Resources.resx │ ├── Resources.ru-RU.resx │ ├── Resources.ru.resx │ ├── Resources.sk-SK.resx │ ├── Resources.sr-CS.resx │ ├── Resources.sv.resx │ ├── Resources.tr-TR.resx │ ├── Resources.tr.resx │ ├── Resources.uk-UA.resx │ ├── Resources.vi-VN.resx │ ├── Resources.zh-TW.resx │ └── Resources.zh-cn.resx │ ├── README.md │ ├── WindowsSettings.json │ └── plugin.json ├── README.md ├── Scripts ├── flowlauncher.nuspec └── post_build.ps1 ├── Settings.XamlStyler ├── SolutionAssemblyInfo.cs ├── appveyor.yml ├── attribution.md ├── azure-pipelines.yml ├── crowdin.yml └── global.json /.github/ISSUE_TEMPLATE/code-review.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F50E Code Review" 3 | about: Describe (bad) code that needs to be improved 4 | title: "[Describe Problematic Code]" 5 | labels: 'code review' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Point to the corresponding file and line number(s) which could be improved.** 11 | 12 | Click on the line number in GitHub to create an anchored link to the corresponding code section. For example: 13 | 14 | 15 | https://github.com/Flow-Launcher/Flow.Launcher/blob/master/Flow.Launcher/Storage/TopMostRecord.cs#L8 16 | 17 | Provide your alternative implementation idea: 18 | 19 | ``` 20 | Code 21 | ``` 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/discussion.md.not_used: -------------------------------------------------------------------------------- 1 | --- 2 | name: "⁉️ Question/Discussion" 3 | about: Create a report to help us improve 4 | title: "[Ask a question or propose a change]" 5 | labels: 'question/discussion' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Question** 11 | Describe your question. 12 | 13 | **Discussion** 14 | Discuss a topic. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "⭐ Feature request" 3 | about: Suggest a new idea or a feature enhacement 4 | title: "[Describe Your Feature]" 5 | labels: 'enhancement' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | 12 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 13 | 14 | **Describe the solution you'd like** 15 | 16 | A clear and concise description of what you want to happen. 17 | 18 | **Describe alternatives you've considered** 19 | 20 | A clear and concise description of any alternative solutions or features you've considered. 21 | 22 | **Additional context** 23 | 24 | Add any other context or screenshots about the feature request here. 25 | -------------------------------------------------------------------------------- /.github/actions/spelling/allow.txt: -------------------------------------------------------------------------------- 1 | github 2 | https 3 | ssh 4 | ubuntu 5 | runcount 6 | Firefox 7 | Português 8 | Português (Brasil) 9 | -------------------------------------------------------------------------------- /.github/actions/spelling/reject.txt: -------------------------------------------------------------------------------- 1 | ^attache$ 2 | benefitting 3 | occurences? 4 | ^dependan.* 5 | ^oer$ 6 | Sorce 7 | ^[Ss]pae.* 8 | ^untill$ 9 | ^untilling$ 10 | ^wether.* 11 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "nuget" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "daily" 12 | open-pull-requests-limit: 3 13 | ignore: 14 | - dependency-name: "squirrel-windows" 15 | reviewers: 16 | - "jjw24" 17 | - "taooceros" 18 | - "JohnTheGr8" 19 | - package-ecosystem: "github-actions" 20 | directory: "/" 21 | schedule: 22 | interval: "daily" 23 | -------------------------------------------------------------------------------- /.github/pr-labeler.yml: -------------------------------------------------------------------------------- 1 | # The bot always updates the labels, add/remove as necessary [default: false] 2 | alwaysReplace: false 3 | # Treats the text and labels as case sensitive [default: true] 4 | caseSensitive: false 5 | # Array of labels to be applied to the PR [default: []] 6 | customLabels: 7 | # Finds the `text` within the PR title and body and applies the `label` 8 | - text: 'bug' 9 | label: 'bug' 10 | - text: 'fix' 11 | label: 'bug' 12 | - text: 'dependabot' 13 | label: 'bug' 14 | - text: 'New Crowdin updates' 15 | label: 'bug' 16 | - text: 'New Crowdin updates' 17 | label: 'kind/i18n' 18 | - text: 'feature' 19 | label: 'enhancement' 20 | - text: 'add new' 21 | label: 'enhancement' 22 | - text: 'refactor' 23 | label: 'enhancement' 24 | - text: 'refactor' 25 | label: 'Code Refactor' 26 | # Search the body of the PR for the `text` [default: true] 27 | searchBody: true 28 | # Search the title of the PR for the `text` [default: true] 29 | searchTitle: true 30 | # Search for whole words only [default: false] 31 | wholeWords: false 32 | -------------------------------------------------------------------------------- /.github/workflows/pr_assignee.yml: -------------------------------------------------------------------------------- 1 | name: Assign PR to creator 2 | 3 | on: 4 | pull_request_target: 5 | types: [opened] 6 | branches-ignore: 7 | - l10n_dev 8 | 9 | permissions: 10 | pull-requests: write 11 | 12 | jobs: 13 | automation: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Assign PR to creator 17 | uses: toshimaru/auto-author-assign@v2.1.1 18 | -------------------------------------------------------------------------------- /.github/workflows/pr_milestone.yml: -------------------------------------------------------------------------------- 1 | name: Set Milestone 2 | 3 | # Assigns the earliest created milestone that matches the below glob pattern. 4 | 5 | on: 6 | pull_request_target: 7 | types: [opened] 8 | 9 | permissions: 10 | pull-requests: write 11 | 12 | jobs: 13 | automation: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: set-milestone 18 | uses: andrefcdias/add-to-milestone@v1.3.0 19 | with: 20 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 21 | milestone: "+([0-9]).+([0-9]).+([0-9])" 22 | use-expression: true 23 | -------------------------------------------------------------------------------- /.github/workflows/release_pr.yml: -------------------------------------------------------------------------------- 1 | name: Update release PR 2 | 3 | on: 4 | pull_request: 5 | types: [opened, reopened, synchronize] 6 | branches: 7 | - master 8 | workflow_dispatch: 9 | 10 | jobs: 11 | update-pr: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | 16 | - uses: actions/setup-python@v5 17 | with: 18 | python-version: "3.x" 19 | 20 | - name: Run release PR update 21 | env: 22 | GITHUB_TOKEN: ${{ secrets.PR_TOKEN }} 23 | run: | 24 | pip install requests -q 25 | python3 ./.github/update_release_pr.py 26 | -------------------------------------------------------------------------------- /.github/workflows/top-ranking-issues.yml: -------------------------------------------------------------------------------- 1 | name: Top-Ranking Issues 2 | on: 3 | schedule: 4 | - cron: '0 0 */1 * *' 5 | workflow_dispatch: 6 | 7 | jobs: 8 | ShowAndLabelTopIssues: 9 | name: Display and label top issues. 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Top Issues action 13 | uses: rickstaa/top-issues-action@v1.3.101 14 | env: 15 | github_token: ${{ secrets.GITHUB_TOKEN }} 16 | with: 17 | dashboard: true 18 | dashboard_show_total_reactions: true 19 | top_list_size: 10 20 | top_features: true 21 | top_bugs: true 22 | dashboard_title: Top-Ranking Issues 📈 23 | dashboard_label: ⭐ Dashboard 24 | hide_dashboard_footer: true 25 | top_issues: false 26 | -------------------------------------------------------------------------------- /.github/workflows/winget.yml: -------------------------------------------------------------------------------- 1 | name: Publish to Winget 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | publish: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: vedantmgoyal2009/winget-releaser@v2 11 | with: 12 | identifier: Flow-Launcher.Flow-Launcher 13 | token: ${{ secrets.WINGET_TOKEN }} 14 | -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_01.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_02.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_03.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_buttons.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_fluent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_fluent.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_huge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_huge.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_lightblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_lightblue.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_lightblue_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_lightblue_buttons.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_minimal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_minimal.png -------------------------------------------------------------------------------- /Artworks/Default Icons/app_missing_img_minimal_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Default Icons/app_missing_img_minimal_buttons.png -------------------------------------------------------------------------------- /Artworks/Logo/app_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/app_error.png -------------------------------------------------------------------------------- /Artworks/Logo/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo.ico -------------------------------------------------------------------------------- /Artworks/Logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo.png -------------------------------------------------------------------------------- /Artworks/Logo/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Artworks/Logo/logo128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo128.png -------------------------------------------------------------------------------- /Artworks/Logo/logo16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo16.png -------------------------------------------------------------------------------- /Artworks/Logo/logo256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo256.png -------------------------------------------------------------------------------- /Artworks/Logo/logo32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo32.png -------------------------------------------------------------------------------- /Artworks/Logo/logo48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo48.png -------------------------------------------------------------------------------- /Artworks/Logo/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo512.png -------------------------------------------------------------------------------- /Artworks/Logo/logo64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/logo64.png -------------------------------------------------------------------------------- /Artworks/Logo/resources/flow-header-landscape-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/resources/flow-header-landscape-transparent.png -------------------------------------------------------------------------------- /Artworks/Logo/resources/flow-header-landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/resources/flow-header-landscape.png -------------------------------------------------------------------------------- /Artworks/Logo/resources/flow-header-square-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/resources/flow-header-square-transparent.png -------------------------------------------------------------------------------- /Artworks/Logo/resources/flow-header-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/resources/flow-header-square.png -------------------------------------------------------------------------------- /Artworks/Logo/resources/flow-logo.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/resources/flow-logo.ai -------------------------------------------------------------------------------- /Artworks/Logo/resources/preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/Logo/resources/preview.pdf -------------------------------------------------------------------------------- /Artworks/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/app.ico -------------------------------------------------------------------------------- /Artworks/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/app.png -------------------------------------------------------------------------------- /Artworks/app_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/app_error.png -------------------------------------------------------------------------------- /Artworks/app_missing_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/app_missing_img.png -------------------------------------------------------------------------------- /Artworks/mainsearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Artworks/mainsearch.png -------------------------------------------------------------------------------- /Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | -------------------------------------------------------------------------------- /Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | false 9 | 10 | 11 | false 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Configuration/IPortable.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Flow.Launcher.Core.Configuration 3 | { 4 | public interface IPortable 5 | { 6 | void EnablePortableMode(); 7 | void DisablePortableMode(); 8 | void RemoveShortcuts(); 9 | void RemoveUninstallerEntry(); 10 | void CreateShortcuts(); 11 | void CreateUninstallerEntry(); 12 | void MoveUserDataFolder(string fromLocation, string toLocation); 13 | void VerifyUserDataAfterMove(string fromLocation, string toLocation); 14 | bool CanUpdatePortability(); 15 | } 16 | } -------------------------------------------------------------------------------- /Flow.Launcher.Core/ExternalPlugins/Environments/JavaScriptEnvironment.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Flow.Launcher.Infrastructure.UserSettings; 3 | using Flow.Launcher.Plugin; 4 | 5 | namespace Flow.Launcher.Core.ExternalPlugins.Environments 6 | { 7 | internal class JavaScriptEnvironment : TypeScriptEnvironment 8 | { 9 | internal override string Language => AllowedLanguage.JavaScript; 10 | 11 | internal JavaScriptEnvironment(List pluginMetadataList, PluginsSettings pluginSettings) : base(pluginMetadataList, pluginSettings) { } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/ExternalPlugins/Environments/JavaScriptV2Environment.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Flow.Launcher.Infrastructure.UserSettings; 3 | using Flow.Launcher.Plugin; 4 | 5 | namespace Flow.Launcher.Core.ExternalPlugins.Environments 6 | { 7 | internal class JavaScriptV2Environment : TypeScriptV2Environment 8 | { 9 | internal override string Language => AllowedLanguage.JavaScriptV2; 10 | 11 | internal JavaScriptV2Environment(List pluginMetadataList, PluginsSettings pluginSettings) : base(pluginMetadataList, pluginSettings) { } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/ExternalPlugins/Environments/PythonV2Environment.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Flow.Launcher.Core.Plugin; 3 | using Flow.Launcher.Infrastructure.UserSettings; 4 | using Flow.Launcher.Plugin; 5 | 6 | namespace Flow.Launcher.Core.ExternalPlugins.Environments 7 | { 8 | internal class PythonV2Environment : PythonEnvironment 9 | { 10 | internal override string Language => AllowedLanguage.PythonV2; 11 | 12 | internal override PluginPair CreatePluginPair(string filePath, PluginMetadata metadata) 13 | { 14 | return new PluginPair 15 | { 16 | Plugin = new PythonPluginV2(filePath), 17 | Metadata = metadata 18 | }; 19 | } 20 | 21 | internal PythonV2Environment(List pluginMetadataList, PluginsSettings pluginSettings) : base(pluginMetadataList, pluginSettings) { } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/ExternalPlugins/FlowPluginException.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin; 2 | using System; 3 | 4 | namespace Flow.Launcher.Core.ExternalPlugins 5 | { 6 | public class FlowPluginException : Exception 7 | { 8 | public PluginMetadata Metadata { get; set; } 9 | 10 | public FlowPluginException(PluginMetadata metadata, Exception e) : base(e.Message, e) 11 | { 12 | Metadata = metadata; 13 | } 14 | 15 | public override string ToString() 16 | { 17 | return $@"{Metadata.Name} Exception: 18 | Websites: {Metadata.Website} 19 | Author: {Metadata.Author} 20 | Version: {Metadata.Version} 21 | {base.ToString()}"; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Flow.Launcher.Core/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Plugin/ExecutablePluginV2.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.IO; 3 | using System.Text.Json; 4 | using System.Threading; 5 | using System.Threading.Tasks; 6 | 7 | namespace Flow.Launcher.Core.Plugin 8 | { 9 | internal sealed class ExecutablePluginV2 : ProcessStreamPluginV2 10 | { 11 | protected override ProcessStartInfo StartInfo { get; set; } 12 | 13 | public ExecutablePluginV2(string filename) 14 | { 15 | StartInfo = new ProcessStartInfo { FileName = filename }; 16 | } 17 | 18 | protected override MessageHandlerType MessageHandler { get; } = MessageHandlerType.NewLineDelimited; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Plugin/JsonRPCV2Models/JsonRPCExecuteResponse.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Core.Plugin.JsonRPCV2Models 2 | { 3 | public record JsonRPCExecuteResponse(bool Hide = true); 4 | } 5 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Plugin/JsonRPCV2Models/JsonRPCQueryRequest.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Flow.Launcher.Plugin; 3 | 4 | namespace Flow.Launcher.Core.Plugin.JsonRPCV2Models 5 | { 6 | public record JsonRPCQueryRequest( 7 | List Results 8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Plugin/NodePluginV2.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.IO; 3 | using System.IO.Pipelines; 4 | using System.Threading; 5 | using System.Threading.Tasks; 6 | using Flow.Launcher.Plugin; 7 | 8 | namespace Flow.Launcher.Core.Plugin 9 | { 10 | /// 11 | /// Execution of JavaScript & TypeScript plugins 12 | /// 13 | internal sealed class NodePluginV2 : ProcessStreamPluginV2 14 | { 15 | public NodePluginV2(string filename) 16 | { 17 | StartInfo = new ProcessStartInfo { FileName = filename, }; 18 | } 19 | 20 | protected override ProcessStartInfo StartInfo { get; set; } 21 | 22 | public override async Task InitAsync(PluginInitContext context) 23 | { 24 | StartInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); 25 | await base.InitAsync(context); 26 | } 27 | 28 | protected override MessageHandlerType MessageHandler { get; } = MessageHandlerType.HeaderDelimited; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Plugin/README.md: -------------------------------------------------------------------------------- 1 | There are two kinds of plugins: 2 | 1. System plugin 3 | Those plugins that action keyword is "*", those plugin doesn't need action keyword 4 | 2. User Plugin 5 | Those plugins that contains customized action keyword -------------------------------------------------------------------------------- /Flow.Launcher.Core/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Flow.Launcher.Test")] 4 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/README.md: -------------------------------------------------------------------------------- 1 | What does Flow.Launcher.Core do? 2 | ===== 3 | 4 | * Handle Query 5 | * Define Flow.Launcher exceptions 6 | * Manage Plugins (including system plugin and user plugin) 7 | * Manage Themes 8 | * Manage i18n 9 | * Manage Update and version -------------------------------------------------------------------------------- /Flow.Launcher.Core/Resource/Language.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Core.Resource 2 | { 3 | public class Language 4 | { 5 | public Language(string code, string display) 6 | { 7 | LanguageCode = code; 8 | Display = display; 9 | } 10 | 11 | /// 12 | /// E.g. En or Zh-CN 13 | /// 14 | public string LanguageCode { get; set; } 15 | 16 | public string Display { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Resource/LocalizedDescriptionAttribute.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | using Flow.Launcher.Plugin; 4 | 5 | namespace Flow.Launcher.Core.Resource 6 | { 7 | public class LocalizedDescriptionAttribute : DescriptionAttribute 8 | { 9 | // We should not initialize API in static constructor because it will create another API instance 10 | private static IPublicAPI api = null; 11 | private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService(); 12 | 13 | private readonly string _resourceKey; 14 | 15 | public LocalizedDescriptionAttribute(string resourceKey) 16 | { 17 | _resourceKey = resourceKey; 18 | } 19 | 20 | public override string Description 21 | { 22 | get 23 | { 24 | string description = API.GetTranslation(_resourceKey); 25 | return string.IsNullOrWhiteSpace(description) ? 26 | string.Format("[[{0}]]", _resourceKey) : description; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Resource/TranslationConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using CommunityToolkit.Mvvm.DependencyInjection; 5 | using Flow.Launcher.Plugin; 6 | 7 | namespace Flow.Launcher.Core.Resource 8 | { 9 | public class TranslationConverter : IValueConverter 10 | { 11 | // We should not initialize API in static constructor because it will create another API instance 12 | private static IPublicAPI api = null; 13 | private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService(); 14 | 15 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 16 | { 17 | var key = value.ToString(); 18 | if (string.IsNullOrEmpty(key)) return key; 19 | return API.GetTranslation(key); 20 | } 21 | 22 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => 23 | throw new InvalidOperationException(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Flow.Launcher.Core/Storage/IRemovable.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Core.Storage; 2 | 3 | /// 4 | /// Remove storage instances from instance 5 | /// 6 | public interface IRemovable 7 | { 8 | /// 9 | /// Remove all instances of one plugin 10 | /// 11 | /// 12 | public void RemovePluginSettings(string assemblyName); 13 | 14 | /// 15 | /// Remove all instances of one plugin 16 | /// 17 | /// 18 | public void RemovePluginCaches(string cacheDirectory); 19 | } 20 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/Helper.cs: -------------------------------------------------------------------------------- 1 | #nullable enable 2 | 3 | using System; 4 | 5 | namespace Flow.Launcher.Infrastructure 6 | { 7 | public static class Helper 8 | { 9 | /// 10 | /// http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy 11 | /// 12 | public static T NonNull(this T? obj) 13 | { 14 | if (obj == null) 15 | { 16 | throw new NullReferenceException(); 17 | } 18 | else 19 | { 20 | return obj; 21 | } 22 | } 23 | 24 | public static void RequireNonNull(this T obj) 25 | { 26 | if (obj == null) 27 | { 28 | throw new NullReferenceException(); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/Hotkey/IHotkeySettings.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Flow.Launcher.Infrastructure.Hotkey; 4 | 5 | /// 6 | /// Interface that you should implement in your settings class to be able to pass it to 7 | /// Flow.Launcher.HotkeyControlDialog. It allows the dialog to display the hotkeys that have already been 8 | /// registered, and optionally provide a way to unregister them. 9 | /// 10 | public interface IHotkeySettings 11 | { 12 | /// 13 | /// A list of hotkeys that have already been registered. The dialog will display these hotkeys and provide a way to 14 | /// unregister them. 15 | /// 16 | public List RegisteredHotkeys { get; } 17 | } 18 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/KeyConstant.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Infrastructure 2 | { 3 | public static class KeyConstant 4 | { 5 | public const string Ctrl = nameof(Ctrl); 6 | public const string Alt = nameof(Alt); 7 | public const string Space = nameof(Space); 8 | } 9 | } -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/NativeMethods.txt: -------------------------------------------------------------------------------- 1 | SHCreateItemFromParsingName 2 | DeleteObject 3 | IShellItem 4 | IShellItemImageFactory 5 | S_OK 6 | 7 | SetWindowsHookEx 8 | UnhookWindowsHookEx 9 | CallNextHookEx 10 | GetModuleHandle 11 | GetKeyState 12 | VIRTUAL_KEY 13 | 14 | EnumWindows 15 | 16 | DwmSetWindowAttribute 17 | DWM_SYSTEMBACKDROP_TYPE 18 | DWM_WINDOW_CORNER_PREFERENCE 19 | 20 | MAX_PATH 21 | SystemParametersInfo 22 | 23 | SetForegroundWindow 24 | 25 | GetWindowLong 26 | GetForegroundWindow 27 | GetDesktopWindow 28 | GetShellWindow 29 | GetWindowRect 30 | GetClassName 31 | FindWindowEx 32 | WINDOW_STYLE 33 | 34 | SetLastError 35 | WINDOW_EX_STYLE 36 | 37 | GetSystemMetrics 38 | EnumDisplayMonitors 39 | MonitorFromWindow 40 | GetMonitorInfo 41 | MONITORINFOEXW 42 | 43 | WM_ENTERSIZEMOVE 44 | WM_EXITSIZEMOVE 45 | 46 | OleInitialize 47 | OleUninitialize 48 | 49 | GetKeyboardLayout 50 | GetWindowThreadProcessId 51 | ActivateKeyboardLayout 52 | GetKeyboardLayoutList 53 | PostMessage 54 | WM_INPUTLANGCHANGEREQUEST 55 | INPUTLANGCHANGE_FORWARD 56 | LOCALE_TRANSIENT_KEYBOARD1 57 | LOCALE_TRANSIENT_KEYBOARD2 58 | LOCALE_TRANSIENT_KEYBOARD3 59 | LOCALE_TRANSIENT_KEYBOARD4 60 | 61 | SHParseDisplayName 62 | SHOpenFolderAndSelectItems 63 | CoTaskMemFree 64 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/PInvokeExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices; 2 | using Windows.Win32.Foundation; 3 | using Windows.Win32.UI.WindowsAndMessaging; 4 | 5 | namespace Windows.Win32; 6 | 7 | // Edited from: https://github.com/files-community/Files 8 | internal static partial class PInvoke 9 | { 10 | [DllImport("User32", EntryPoint = "SetWindowLongW", ExactSpelling = true)] 11 | static extern int _SetWindowLong(HWND hWnd, int nIndex, int dwNewLong); 12 | 13 | [DllImport("User32", EntryPoint = "SetWindowLongPtrW", ExactSpelling = true)] 14 | static extern nint _SetWindowLongPtr(HWND hWnd, int nIndex, nint dwNewLong); 15 | 16 | // NOTE: 17 | // CsWin32 doesn't generate SetWindowLong on other than x86 and vice versa. 18 | // For more info, visit https://github.com/microsoft/CsWin32/issues/882 19 | public static unsafe nint SetWindowLongPtr(HWND hWnd, WINDOW_LONG_PTR_INDEX nIndex, nint dwNewLong) 20 | { 21 | return sizeof(nint) is 4 22 | ? _SetWindowLong(hWnd, (int)nIndex, (int)dwNewLong) 23 | : _SetWindowLongPtr(hWnd, (int)nIndex, dwNewLong); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Flow.Launcher")] 4 | [assembly: InternalsVisibleTo("Flow.Launcher.Core")] 5 | [assembly: InternalsVisibleTo("Flow.Launcher.Test")] 6 | [assembly: System.Runtime.Versioning.SupportedOSPlatform("Windows10.0.19041.0")] 7 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin; 2 | using System.Text.Json.Serialization; 3 | 4 | namespace Flow.Launcher.Infrastructure.UserSettings 5 | { 6 | public class CustomBrowserViewModel : BaseModel 7 | { 8 | public string Name { get; set; } 9 | public string Path { get; set; } 10 | public string PrivateArg { get; set; } 11 | public bool EnablePrivate { get; set; } 12 | public bool OpenInTab { get; set; } = true; 13 | [JsonIgnore] 14 | public bool OpenInNewWindow => !OpenInTab; 15 | public bool Editable { get; set; } = true; 16 | 17 | public CustomBrowserViewModel Copy() 18 | { 19 | return new CustomBrowserViewModel 20 | { 21 | Name = Name, 22 | Path = Path, 23 | OpenInTab = OpenInTab, 24 | PrivateArg = PrivateArg, 25 | EnablePrivate = EnablePrivate, 26 | Editable = Editable 27 | }; 28 | } 29 | } 30 | } 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin; 2 | 3 | namespace Flow.Launcher.ViewModel 4 | { 5 | public class CustomExplorerViewModel : BaseModel 6 | { 7 | public string Name { get; set; } 8 | public string Path { get; set; } 9 | public string FileArgument { get; set; } = "\"%d\""; 10 | public string DirectoryArgument { get; set; } = "\"%d\""; 11 | public bool Editable { get; init; } = true; 12 | 13 | public CustomExplorerViewModel Copy() 14 | { 15 | return new CustomExplorerViewModel 16 | { 17 | Name = Name, 18 | Path = Path, 19 | FileArgument = FileArgument, 20 | DirectoryArgument = DirectoryArgument, 21 | Editable = Editable 22 | }; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Flow.Launcher.Infrastructure/UserSettings/PluginHotkey.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin; 2 | 3 | namespace Flow.Launcher.Infrastructure.UserSettings 4 | { 5 | public class CustomPluginHotkey : BaseModel 6 | { 7 | public string Hotkey { get; set; } 8 | public string ActionKeyword { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/BaseModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.CompilerServices; 3 | using JetBrains.Annotations; 4 | 5 | namespace Flow.Launcher.Plugin 6 | { 7 | /// 8 | /// Base model for plugin classes 9 | /// 10 | public class BaseModel : INotifyPropertyChanged 11 | { 12 | /// 13 | /// Property changed event handler 14 | /// 15 | public event PropertyChangedEventHandler PropertyChanged; 16 | 17 | /// 18 | /// Invoked when a property changes 19 | /// 20 | /// 21 | [NotifyPropertyChangedInvocator] 22 | protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 23 | { 24 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Features.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin 2 | { 3 | /// 4 | /// Base Interface for Flow's special plugin feature interface 5 | /// 6 | public interface IFeatures 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/GlyphInfo.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin 2 | { 3 | /// 4 | /// Text with FontFamily specified 5 | /// 6 | /// Font Family of this Glyph 7 | /// Text/Unicode of the Glyph 8 | public record GlyphInfo(string FontFamily, string Glyph); 9 | } 10 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/IAsyncHomeQuery.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | 5 | namespace Flow.Launcher.Plugin 6 | { 7 | /// 8 | /// Asynchronous Query Model for Flow Launcher When Query Text is Empty 9 | /// 10 | public interface IAsyncHomeQuery : IFeatures 11 | { 12 | /// 13 | /// Asynchronous Querying When Query Text is Empty 14 | /// 15 | /// 16 | /// If the Querying method requires high IO transmission 17 | /// or performing CPU intense jobs (performing better with cancellation), please use this IAsyncHomeQuery interface 18 | /// 19 | /// Cancel when querying job is obsolete 20 | /// 21 | Task> HomeQueryAsync(CancellationToken token); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/IAsyncPlugin.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | 5 | namespace Flow.Launcher.Plugin 6 | { 7 | /// 8 | /// Asynchronous Plugin Model for Flow Launcher 9 | /// 10 | public interface IAsyncPlugin 11 | { 12 | /// 13 | /// Asynchronous Querying 14 | /// 15 | /// 16 | /// If the Querying or Init method requires high IO transmission 17 | /// or performing CPU intense jobs (performing better with cancellation), please use this IAsyncPlugin interface 18 | /// 19 | /// Query to search 20 | /// Cancel when querying job is obsolete 21 | /// 22 | Task> QueryAsync(Query query, CancellationToken token); 23 | 24 | /// 25 | /// Initialize plugin asynchrously (will still wait finish to continue) 26 | /// 27 | /// 28 | /// 29 | Task InitAsync(PluginInitContext context); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/IAsyncReloadable.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace Flow.Launcher.Plugin 4 | { 5 | /// 6 | /// This interface is to indicate and allow plugins to asyncronously reload their 7 | /// in memory data cache or other mediums when user makes a new change 8 | /// that is not immediately captured. For example, for BrowserBookmark and Program 9 | /// plugin does not automatically detect when a user added a new bookmark or program, 10 | /// so this interface's function is exposed to allow user manually do the reloading after 11 | /// those new additions. 12 | /// 13 | /// The command that allows user to manual reload is exposed via Plugin.Sys, and 14 | /// it will call the plugins that have implemented this interface. 15 | /// 16 | public interface IAsyncReloadable : IFeatures 17 | { 18 | /// 19 | /// Reload plugin data 20 | /// 21 | /// 22 | Task ReloadDataAsync(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/IContextMenu.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Flow.Launcher.Plugin 4 | { 5 | /// 6 | /// Adds support for presenting additional options for a given from a context menu. 7 | /// 8 | public interface IContextMenu : IFeatures 9 | { 10 | /// 11 | /// Load context menu items for the given result. 12 | /// 13 | /// 14 | /// The for which the user has activated the context menu. 15 | /// 16 | List LoadContextMenus(Result selectedResult); 17 | } 18 | } -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/IHomeQuery.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | 5 | namespace Flow.Launcher.Plugin 6 | { 7 | /// 8 | /// Synchronous Query Model for Flow Launcher When Query Text is Empty 9 | /// 10 | /// If the Querying method requires high IO transmission 11 | /// or performing CPU intense jobs (performing better with cancellation), please try the IAsyncHomeQuery interface 12 | /// 13 | /// 14 | public interface IHomeQuery : IAsyncHomeQuery 15 | { 16 | /// 17 | /// Querying When Query Text is Empty 18 | /// 19 | /// This method will be called within a Task.Run, 20 | /// so please avoid synchronously wait for long. 21 | /// 22 | /// 23 | /// 24 | List HomeQuery(); 25 | 26 | Task> IAsyncHomeQuery.HomeQueryAsync(CancellationToken token) => Task.Run(HomeQuery); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/IPluginI18n.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | 3 | namespace Flow.Launcher.Plugin 4 | { 5 | /// 6 | /// Represent plugins that support internationalization 7 | /// 8 | public interface IPluginI18n : IFeatures 9 | { 10 | /// 11 | /// Get a localised version of the plugin's title 12 | /// 13 | string GetTranslatedPluginTitle(); 14 | 15 | /// 16 | /// Get a localised version of the plugin's description 17 | /// 18 | string GetTranslatedPluginDescription(); 19 | 20 | /// 21 | /// The method will be invoked when language of flow changed 22 | /// 23 | void OnCultureInfoChanged(CultureInfo newCulture) 24 | { 25 | 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/IReloadable.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin 2 | { 3 | /// 4 | /// This interface is to indicate and allow plugins to synchronously reload their 5 | /// in memory data cache or other mediums when user makes a new change 6 | /// that is not immediately captured. For example, for BrowserBookmark and Program 7 | /// plugin does not automatically detect when a user added a new bookmark or program, 8 | /// so this interface's function is exposed to allow user manually do the reloading after 9 | /// those new additions. 10 | /// 11 | /// The command that allows user to manual reload is exposed via Plugin.Sys, and 12 | /// it will call the plugins that have implemented this interface. 13 | /// 14 | /// 15 | /// If requiring reloading data asynchronously, please use the IAsyncReloadable interface 16 | /// 17 | /// 18 | public interface IReloadable : IFeatures 19 | { 20 | /// 21 | /// Synchronously reload plugin data 22 | /// 23 | void ReloadData(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/ISavable.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin 2 | { 3 | /// 4 | /// Inherit this interface if you need to save additional data which is not a setting or cache, 5 | /// please implement this interface. 6 | /// 7 | /// 8 | /// For storing plugin settings, prefer 9 | /// or . 10 | /// For storing plugin caches, prefer 11 | /// or . 12 | /// Once called, those settings and caches will be automatically saved by Flow. 13 | /// 14 | public interface ISavable : IFeatures 15 | { 16 | /// 17 | /// Save additional plugin data. 18 | /// 19 | void Save(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Interfaces/ISettingProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Flow.Launcher.Plugin 4 | { 5 | /// 6 | /// This interface is used to create settings panel for .Net plugins 7 | /// 8 | public interface ISettingProvider 9 | { 10 | /// 11 | /// Create settings panel control for .Net plugins 12 | /// 13 | /// 14 | Control CreateSettingPanel(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/KeyEvent.cs: -------------------------------------------------------------------------------- 1 | using Windows.Win32; 2 | 3 | namespace Flow.Launcher.Plugin 4 | { 5 | /// 6 | /// Enumeration of key events for 7 | /// 8 | /// and 9 | /// 10 | public enum KeyEvent 11 | { 12 | /// 13 | /// Key down 14 | /// 15 | WM_KEYDOWN = (int)PInvoke.WM_KEYDOWN, 16 | 17 | /// 18 | /// Key up 19 | /// 20 | WM_KEYUP = (int)PInvoke.WM_KEYUP, 21 | 22 | /// 23 | /// System key up 24 | /// 25 | WM_SYSKEYUP = (int)PInvoke.WM_SYSKEYUP, 26 | 27 | /// 28 | /// System key down 29 | /// 30 | WM_SYSKEYDOWN = (int)PInvoke.WM_SYSKEYDOWN 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/NativeMethods.txt: -------------------------------------------------------------------------------- 1 | EnumThreadWindows 2 | GetWindowText 3 | GetWindowTextLength 4 | 5 | WM_KEYDOWN 6 | WM_KEYUP 7 | WM_SYSKEYDOWN 8 | WM_SYSKEYUP -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/PluginInitContext.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin 2 | { 3 | /// 4 | /// Carries data passed to a plugin when it gets initialized. 5 | /// 6 | public class PluginInitContext 7 | { 8 | /// 9 | /// Default constructor. 10 | /// 11 | public PluginInitContext() 12 | { 13 | } 14 | 15 | /// 16 | /// Constructor. 17 | /// 18 | /// 19 | /// 20 | public PluginInitContext(PluginMetadata currentPluginMetadata, IPublicAPI api) 21 | { 22 | CurrentPluginMetadata = currentPluginMetadata; 23 | API = api; 24 | } 25 | 26 | /// 27 | /// The metadata of the plugin being initialized. 28 | /// 29 | public PluginMetadata CurrentPluginMetadata { get; internal set; } 30 | 31 | /// 32 | /// Public APIs for plugin invocation 33 | /// 34 | public IPublicAPI API { get; set; } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Flow.Launcher")] 4 | [assembly: InternalsVisibleTo("Flow.Launcher.Core")] 5 | [assembly: InternalsVisibleTo("Flow.Launcher.Test")] 6 | -------------------------------------------------------------------------------- /Flow.Launcher.Plugin/README.md: -------------------------------------------------------------------------------- 1 | Reference this package to develop a plugin for [Flow Launcher](https://github.com/Flow-Launcher/Flow.Launcher). 2 | 3 | Useful links: 4 | 5 | * [General plugin development guide](https://www.flowlauncher.com/docs/#/plugin-dev) 6 | * [.Net plugin development guide](https://www.flowlauncher.com/docs/#/develop-dotnet-plugins) 7 | * [Package API Reference](https://www.flowlauncher.com/docs/#/API-Reference/Flow.Launcher.Plugin) 8 | -------------------------------------------------------------------------------- /Flow.Launcher.sln.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | SDK -------------------------------------------------------------------------------- /Flow.Launcher/Converters/BadgePositionConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | 5 | namespace Flow.Launcher.Converters; 6 | 7 | public class BadgePositionConverter : IValueConverter 8 | { 9 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 10 | { 11 | if (value is double actualWidth && parameter is string param) 12 | { 13 | double offset = actualWidth / 2 - 8; 14 | 15 | if (param == "1") // X-Offset 16 | { 17 | return offset + 2; 18 | } 19 | else if (param == "2") // Y-Offset 20 | { 21 | return offset + 2; 22 | } 23 | } 24 | 25 | return 0.0; 26 | } 27 | 28 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 29 | { 30 | throw new NotSupportedException(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/DateTimeFormatToNowConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | 5 | namespace Flow.Launcher.Converters; 6 | 7 | public class DateTimeFormatToNowConverter : IValueConverter 8 | { 9 | 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | return value is not string format ? null : DateTime.Now.ToString(format); 13 | } 14 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 15 | { 16 | throw new NotImplementedException(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/DiameterToCenterPointConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Data; 5 | 6 | namespace Flow.Launcher.Converters; 7 | 8 | public class DiameterToCenterPointConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | if (value is double d) 13 | { 14 | return new Point(d / 2, d / 2); 15 | } 16 | 17 | return new Point(0, 0); 18 | } 19 | 20 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 21 | { 22 | throw new NotSupportedException(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/IconRadiusConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | 5 | namespace Flow.Launcher.Converters; 6 | 7 | public class IconRadiusConverter : IMultiValueConverter 8 | { 9 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 10 | { 11 | if (values is not [double size, bool isIconCircular]) 12 | throw new ArgumentException("IconRadiusConverter must have 2 parameters: [double, bool]"); 13 | 14 | return isIconCircular ? size / 2 : size; 15 | } 16 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 17 | { 18 | throw new NotSupportedException(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/OpenResultHotkeyVisibilityConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Controls; 5 | using System.Windows.Data; 6 | 7 | namespace Flow.Launcher.Converters; 8 | 9 | [ValueConversion(typeof(bool), typeof(Visibility))] 10 | public class OpenResultHotkeyVisibilityConverter : IValueConverter 11 | { 12 | private const int MaxVisibleHotkeys = 10; 13 | 14 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 15 | { 16 | var number = int.MaxValue; 17 | 18 | if (value is ListBoxItem listBoxItem 19 | && ItemsControl.ItemsControlFromItemContainer(listBoxItem) is ListBox listBox) 20 | number = listBox.ItemContainerGenerator.IndexFromContainer(listBoxItem) + 1; 21 | 22 | return number <= MaxVisibleHotkeys ? Visibility.Visible : Visibility.Collapsed; 23 | } 24 | 25 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new InvalidOperationException(); 26 | } 27 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/OrdinalConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Controls; 4 | using System.Windows.Data; 5 | 6 | namespace Flow.Launcher.Converters; 7 | 8 | public class OrdinalConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | if (value is not ListBoxItem listBoxItem 13 | || ItemsControl.ItemsControlFromItemContainer(listBoxItem) is not ListBox listBox) 14 | { 15 | return 0; 16 | } 17 | 18 | var res = listBox.ItemContainerGenerator.IndexFromContainer(listBoxItem) + 1; 19 | return res == 10 ? 0 : res; // 10th item => HOTKEY+0 20 | 21 | } 22 | 23 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new InvalidOperationException(); 24 | } 25 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/SizeRatioConverter.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Data; 2 | using System; 3 | using System.Globalization; 4 | using System.Windows; 5 | 6 | namespace Flow.Launcher.Converters; 7 | 8 | public class SizeRatioConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | if (value is double size && parameter is string ratioString) 13 | { 14 | if (double.TryParse(ratioString, NumberStyles.Any, CultureInfo.InvariantCulture, out double ratio)) 15 | { 16 | return size * ratio; 17 | } 18 | } 19 | 20 | return 0.0; 21 | } 22 | 23 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 24 | { 25 | throw new NotSupportedException(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/StringToKeyBindingConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using System.Windows.Input; 5 | 6 | namespace Flow.Launcher.Converters; 7 | 8 | class StringToKeyBindingConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | if (parameter is not string mode || value is not string hotkeyStr) 13 | return null; 14 | 15 | var converter = new KeyGestureConverter(); 16 | var key = (KeyGesture)converter.ConvertFromString(hotkeyStr); 17 | return mode switch 18 | { 19 | "key" => key?.Key, 20 | "modifiers" => key?.Modifiers, 21 | _ => null 22 | }; 23 | } 24 | 25 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 26 | { 27 | throw new NotImplementedException(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Flow.Launcher/Converters/TextConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using Flow.Launcher.ViewModel; 5 | 6 | namespace Flow.Launcher.Converters; 7 | 8 | public class TextConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | var id = value?.ToString(); 13 | var translationKey = id switch 14 | { 15 | PluginStoreItemViewModel.NewRelease => "pluginStore_NewRelease", 16 | PluginStoreItemViewModel.RecentlyUpdated => "pluginStore_RecentlyUpdated", 17 | PluginStoreItemViewModel.None => "pluginStore_None", 18 | PluginStoreItemViewModel.Installed => "pluginStore_Installed", 19 | _ => null 20 | }; 21 | 22 | if (translationKey is null) 23 | return id; 24 | 25 | return App.API.GetTranslation(translationKey); 26 | } 27 | 28 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new InvalidOperationException(); 29 | } 30 | -------------------------------------------------------------------------------- /Flow.Launcher/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Flow.Launcher/Helper/SyntaxSugars.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Helper; 4 | 5 | public static class SyntaxSugars 6 | { 7 | public static TResult CallOrRescueDefault(Func callback) 8 | { 9 | return CallOrRescueDefault(callback, default(TResult)); 10 | } 11 | 12 | public static TResult CallOrRescueDefault(Func callback, TResult def) 13 | { 14 | try 15 | { 16 | return callback(); 17 | } 18 | catch 19 | { 20 | return def; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Flow.Launcher/Helper/WindowsMediaPlayerHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | 3 | namespace Flow.Launcher.Helper; 4 | internal static class WindowsMediaPlayerHelper 5 | { 6 | internal static bool IsWindowsMediaPlayerInstalled() 7 | { 8 | using var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\MediaPlayer"); 9 | return key?.GetValue("Installation Directory") != null; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Flow.Launcher/Images/Browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/Browser.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/Error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/Error.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/Exclamation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/Exclamation.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/Information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/Information.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/Link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/Link.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/New Message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/New Message.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/Question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/Question.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/app.ico -------------------------------------------------------------------------------- /Flow.Launcher/Images/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/app.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/app_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/app_error.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/app_missing_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/app_missing_img.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/calculator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/calculator.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/cancel.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/close.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/cmd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/cmd.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/color.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/copy.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/dev.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/dev.ico -------------------------------------------------------------------------------- /Flow.Launcher/Images/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/down.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/file.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/find.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/folder.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/gamemode.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/gamemode.ico -------------------------------------------------------------------------------- /Flow.Launcher/Images/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/history.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/illustration_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/illustration_01.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/illustration_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/illustration_02.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/image.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/info.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/keyboard.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/loading.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/lock.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/logoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/logoff.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/ok.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/open.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/page_img01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/page_img01.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/plugin.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/plugins.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/proxy.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/recyclebin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/recyclebin.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/restart.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/search.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/settings.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/shutdown.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/sleep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/sleep.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/store.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/theme.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/up.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/update.png -------------------------------------------------------------------------------- /Flow.Launcher/Images/wizard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Images/wizard.png -------------------------------------------------------------------------------- /Flow.Launcher/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo( 4 | ResourceDictionaryLocation.None, 5 | ResourceDictionaryLocation.SourceAssembly 6 | )] 7 | -------------------------------------------------------------------------------- /Flow.Launcher/Properties/PublishProfiles/Net7.0-SelfContained.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | FileSystem 8 | Release 9 | Any CPU 10 | net7.0-windows10.0.19041.0 11 | ..\Output\Release\ 12 | win-x64 13 | true 14 | False 15 | False 16 | False 17 | 18 | 19 | -------------------------------------------------------------------------------- /Flow.Launcher/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | https://github.com/Flow-Launcher/Flow.Launcher 7 | 8 | 9 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Controls/CardGroupCardStyleSelector.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | 4 | namespace Flow.Launcher.Resources.Controls; 5 | 6 | public class CardGroupCardStyleSelector : StyleSelector 7 | { 8 | public Style FirstStyle { get; set; } 9 | public Style MiddleStyle { get; set; } 10 | public Style LastStyle { get; set; } 11 | 12 | public override Style SelectStyle(object item, DependencyObject container) 13 | { 14 | var itemsControl = ItemsControl.ItemsControlFromItemContainer(container); 15 | var index = itemsControl.ItemContainerGenerator.IndexFromContainer(container); 16 | 17 | if (index == 0) return FirstStyle; 18 | if (index == itemsControl.Items.Count - 1) return LastStyle; 19 | return MiddleStyle; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Controls/HyperLink.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Controls/HyperLink.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | using System.Windows.Navigation; 4 | 5 | namespace Flow.Launcher.Resources.Controls; 6 | 7 | public partial class HyperLink : UserControl 8 | { 9 | public static readonly DependencyProperty UriProperty = DependencyProperty.Register( 10 | nameof(Uri), typeof(string), typeof(HyperLink), new PropertyMetadata(default(string)) 11 | ); 12 | 13 | public string Uri 14 | { 15 | get => (string)GetValue(UriProperty); 16 | set => SetValue(UriProperty, value); 17 | } 18 | 19 | public static readonly DependencyProperty TextProperty = DependencyProperty.Register( 20 | nameof(Text), typeof(string), typeof(HyperLink), new PropertyMetadata(default(string)) 21 | ); 22 | 23 | public string Text 24 | { 25 | get => (string)GetValue(TextProperty); 26 | set => SetValue(TextProperty, value); 27 | } 28 | 29 | public HyperLink() 30 | { 31 | InitializeComponent(); 32 | } 33 | 34 | private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) 35 | { 36 | App.API.OpenUrl(e.Uri); 37 | e.Handled = true; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Controls/InstalledPluginDisplay.xaml.cs: -------------------------------------------------------------------------------- 1 | using ModernWpf.Controls; 2 | 3 | namespace Flow.Launcher.Resources.Controls; 4 | 5 | public partial class InstalledPluginDisplay 6 | { 7 | public InstalledPluginDisplay() 8 | { 9 | InitializeComponent(); 10 | } 11 | 12 | // This is used for PriorityControl to force its value to be 0 when the user clears the value 13 | private void NumberBox_OnValueChanged(NumberBox sender, NumberBoxValueChangedEventArgs args) 14 | { 15 | if (double.IsNaN(args.NewValue)) 16 | { 17 | sender.Value = 0; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Controls/InstalledPluginDisplayBottomData.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Flow.Launcher.Resources.Controls; 4 | 5 | public partial class InstalledPluginDisplayBottomData : UserControl 6 | { 7 | public InstalledPluginDisplayBottomData() 8 | { 9 | InitializeComponent(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Controls/InstalledPluginDisplayKeyword.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Flow.Launcher.Resources.Controls; 4 | 5 | public partial class InstalledPluginDisplayKeyword : UserControl 6 | { 7 | public InstalledPluginDisplayKeyword() 8 | { 9 | InitializeComponent(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/MarkupExtensions/VisibleWhenExtension.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Data; 3 | 4 | namespace Flow.Launcher.Resources.MarkupExtensions; 5 | 6 | #nullable enable 7 | 8 | public class VisibleWhenExtension : CollapsedWhenExtension 9 | { 10 | protected override Visibility DefaultVisibility => Visibility.Collapsed; 11 | protected override Visibility InvertedVisibility => Visibility.Visible; 12 | 13 | public VisibleWhenExtension(Binding when) : base(when) { } 14 | } 15 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Pages/WelcomePage3.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Navigation; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | using Flow.Launcher.Infrastructure.UserSettings; 4 | using Flow.Launcher.ViewModel; 5 | 6 | namespace Flow.Launcher.Resources.Pages 7 | { 8 | public partial class WelcomePage3 9 | { 10 | public Settings Settings { get; } = Ioc.Default.GetRequiredService(); 11 | private readonly WelcomeViewModel _viewModel = Ioc.Default.GetRequiredService(); 12 | 13 | protected override void OnNavigatedTo(NavigationEventArgs e) 14 | { 15 | // Sometimes the navigation is not triggered by button click, 16 | // so we need to reset the page number 17 | _viewModel.PageNum = 3; 18 | 19 | if (!IsInitialized) 20 | { 21 | InitializeComponent(); 22 | } 23 | base.OnNavigatedTo(e); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Pages/WelcomePage4.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Navigation; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | using Flow.Launcher.Infrastructure.UserSettings; 4 | using Flow.Launcher.ViewModel; 5 | 6 | namespace Flow.Launcher.Resources.Pages 7 | { 8 | public partial class WelcomePage4 9 | { 10 | public Settings Settings { get; } = Ioc.Default.GetRequiredService(); 11 | private readonly WelcomeViewModel _viewModel = Ioc.Default.GetRequiredService(); 12 | 13 | protected override void OnNavigatedTo(NavigationEventArgs e) 14 | { 15 | // Sometimes the navigation is not triggered by button click, 16 | // so we need to reset the page number 17 | _viewModel.PageNum = 4; 18 | 19 | if (!IsInitialized) 20 | { 21 | InitializeComponent(); 22 | } 23 | base.OnNavigatedTo(e); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Flow.Launcher/Resources/Segoe Fluent Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Resources/Segoe Fluent Icons.ttf -------------------------------------------------------------------------------- /Flow.Launcher/Resources/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Resources/app.ico -------------------------------------------------------------------------------- /Flow.Launcher/Resources/dev.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Resources/dev.ico -------------------------------------------------------------------------------- /Flow.Launcher/Resources/open.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/Resources/open.wav -------------------------------------------------------------------------------- /Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Navigation; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | using Flow.Launcher.SettingPages.ViewModels; 4 | using Flow.Launcher.ViewModel; 5 | 6 | namespace Flow.Launcher.SettingPages.Views; 7 | 8 | public partial class SettingsPaneGeneral 9 | { 10 | private SettingsPaneGeneralViewModel _viewModel = null!; 11 | private readonly SettingWindowViewModel _settingViewModel = Ioc.Default.GetRequiredService(); 12 | 13 | protected override void OnNavigatedTo(NavigationEventArgs e) 14 | { 15 | // Sometimes the navigation is not triggered by button click, 16 | // so we need to reset the page type 17 | _settingViewModel.PageType = typeof(SettingsPaneGeneral); 18 | 19 | // If the navigation is not triggered by button click, view model will be null again 20 | if (_viewModel == null) 21 | { 22 | _viewModel = Ioc.Default.GetRequiredService(); 23 | DataContext = _viewModel; 24 | } 25 | if (!IsInitialized) 26 | { 27 | InitializeComponent(); 28 | } 29 | base.OnNavigatedTo(e); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Flow.Launcher/SettingPages/Views/SettingsPaneHotkey.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Navigation; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | using Flow.Launcher.SettingPages.ViewModels; 4 | using Flow.Launcher.ViewModel; 5 | 6 | namespace Flow.Launcher.SettingPages.Views; 7 | 8 | public partial class SettingsPaneHotkey 9 | { 10 | private SettingsPaneHotkeyViewModel _viewModel = null!; 11 | private readonly SettingWindowViewModel _settingViewModel = Ioc.Default.GetRequiredService(); 12 | 13 | protected override void OnNavigatedTo(NavigationEventArgs e) 14 | { 15 | // Sometimes the navigation is not triggered by button click, 16 | // so we need to reset the page type 17 | _settingViewModel.PageType = typeof(SettingsPaneHotkey); 18 | 19 | // If the navigation is not triggered by button click, view model will be null again 20 | if (_viewModel == null) 21 | { 22 | _viewModel = Ioc.Default.GetRequiredService(); 23 | DataContext = _viewModel; 24 | } 25 | if (!IsInitialized) 26 | { 27 | InitializeComponent(); 28 | } 29 | base.OnNavigatedTo(e); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Flow.Launcher/SettingPages/Views/SettingsPaneProxy.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Navigation; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | using Flow.Launcher.SettingPages.ViewModels; 4 | using Flow.Launcher.ViewModel; 5 | 6 | namespace Flow.Launcher.SettingPages.Views; 7 | 8 | public partial class SettingsPaneProxy 9 | { 10 | private SettingsPaneProxyViewModel _viewModel = null!; 11 | private readonly SettingWindowViewModel _settingViewModel = Ioc.Default.GetRequiredService(); 12 | 13 | protected override void OnNavigatedTo(NavigationEventArgs e) 14 | { 15 | // Sometimes the navigation is not triggered by button click, 16 | // so we need to reset the page type 17 | _settingViewModel.PageType = typeof(SettingsPaneProxy); 18 | 19 | // If the navigation is not triggered by button click, view model will be null again 20 | if (_viewModel == null) 21 | { 22 | _viewModel = Ioc.Default.GetRequiredService(); 23 | DataContext = _viewModel; 24 | } 25 | if (!IsInitialized) 26 | { 27 | InitializeComponent(); 28 | } 29 | base.OnNavigatedTo(e); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Flow.Launcher/SettingPages/Views/SettingsPaneTheme.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Navigation; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | using Flow.Launcher.SettingPages.ViewModels; 4 | using Flow.Launcher.ViewModel; 5 | 6 | namespace Flow.Launcher.SettingPages.Views; 7 | 8 | public partial class SettingsPaneTheme 9 | { 10 | private SettingsPaneThemeViewModel _viewModel = null!; 11 | private readonly SettingWindowViewModel _settingViewModel = Ioc.Default.GetRequiredService(); 12 | 13 | protected override void OnNavigatedTo(NavigationEventArgs e) 14 | { 15 | // Sometimes the navigation is not triggered by button click, 16 | // so we need to reset the page type 17 | _settingViewModel.PageType = typeof(SettingsPaneTheme); 18 | 19 | // If the navigation is not triggered by button click, view model will be null again 20 | if (_viewModel == null) 21 | { 22 | _viewModel = Ioc.Default.GetRequiredService(); 23 | DataContext = _viewModel; 24 | } 25 | if (!IsInitialized) 26 | { 27 | InitializeComponent(); 28 | } 29 | base.OnNavigatedTo(e); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Flow.Launcher/Storage/QueryHistory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text.Json.Serialization; 5 | 6 | namespace Flow.Launcher.Storage 7 | { 8 | public class History 9 | { 10 | [JsonInclude] 11 | public List Items { get; private set; } = new List(); 12 | 13 | private int _maxHistory = 300; 14 | 15 | public void Add(string query) 16 | { 17 | if (string.IsNullOrEmpty(query)) return; 18 | if (Items.Count > _maxHistory) 19 | { 20 | Items.RemoveAt(0); 21 | } 22 | 23 | if (Items.Count > 0 && Items.Last().Query == query) 24 | { 25 | Items.Last().ExecutedDateTime = DateTime.Now; 26 | } 27 | else 28 | { 29 | Items.Add(new HistoryItem 30 | { 31 | Query = query, 32 | ExecutedDateTime = DateTime.Now 33 | }); 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Flow.Launcher/Themes/ThemeBuilder/ThemeConvertor.py: -------------------------------------------------------------------------------- 1 | import os,plistlib 2 | 3 | def convert(path,templatePath): 4 | pl = plistlib.readPlist(path) 5 | with open(templatePath, 'r') as content_file: 6 | template = content_file.read() 7 | for key in pl: 8 | if "rgba" in pl[key]: 9 | template = template.replace("{%"+key+"%}",tohex(pl[key].replace("rgba","rgb"))) 10 | f = open(path.replace(".alfredtheme",".xaml"),'w') 11 | f.write(template) 12 | f.close() 13 | 14 | 15 | def tohex(string): 16 | string = string[4:] 17 | split = string.split(",") 18 | split[2] = ''.join(split[2].split(")")[0]) 19 | r = int(split[0]) 20 | g = int(split[1]) 21 | b = int(split[2]) 22 | tu = (r, g, b) 23 | return '#%02x%02x%02x' % tu 24 | 25 | #print tohex("rgb(255,255,255,0.50)") 26 | print convert("Night.alfredtheme","Light.xaml") 27 | -------------------------------------------------------------------------------- /Flow.Launcher/ViewModel/ResultsForUpdate.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin; 2 | using System.Collections.Generic; 3 | using System.Threading; 4 | 5 | namespace Flow.Launcher.ViewModel 6 | { 7 | public record struct ResultsForUpdate( 8 | IReadOnlyList Results, 9 | PluginMetadata Metadata, 10 | Query Query, 11 | CancellationToken Token, 12 | bool ReSelectFirstResult = true, 13 | bool ShouldClearExistingResults = false) 14 | { 15 | public string ID { get; } = Metadata.ID; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Flow.Launcher/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Flow.Launcher/app.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Flow-Launcher 4 | Copyright (c) 2015 Wox 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy of 7 | this software and associated documentation files (the "Software"), to deal in 8 | the Software without restriction, including without limitation the rights to 9 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 10 | the Software, and to permit persons to whom the Software is furnished to do so, 11 | subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 18 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 19 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 20 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.BrowserBookmark.Models; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | 6 | namespace Flow.Launcher.Plugin.BrowserBookmark; 7 | 8 | public class ChromeBookmarkLoader : ChromiumBookmarkLoader 9 | { 10 | public override List GetBookmarks() 11 | { 12 | return LoadChromeBookmarks(); 13 | } 14 | 15 | private List LoadChromeBookmarks() 16 | { 17 | var bookmarks = new List(); 18 | var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 19 | bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome")); 20 | bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary")); 21 | bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium")); 22 | return bookmarks; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.BrowserBookmark.Models; 2 | using System.Collections.Generic; 3 | 4 | namespace Flow.Launcher.Plugin.BrowserBookmark; 5 | 6 | public class CustomChromiumBookmarkLoader : ChromiumBookmarkLoader 7 | { 8 | public CustomChromiumBookmarkLoader(CustomBrowser browser) 9 | { 10 | BrowserName = browser.Name; 11 | BrowserDataPath = browser.DataDirectoryPath; 12 | } 13 | public string BrowserDataPath { get; init; } 14 | public string BookmarkFilePath { get; init; } 15 | public string BrowserName { get; init; } 16 | 17 | public override List GetBookmarks() => BrowserDataPath != null ? LoadBookmarks(BrowserDataPath, BrowserName) : LoadBookmarksFromFile(BookmarkFilePath, BrowserName); 18 | } 19 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomFirefoxBookmarkLoader.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using Flow.Launcher.Plugin.BrowserBookmark.Models; 4 | 5 | namespace Flow.Launcher.Plugin.BrowserBookmark; 6 | 7 | public class CustomFirefoxBookmarkLoader : FirefoxBookmarkLoaderBase 8 | { 9 | public CustomFirefoxBookmarkLoader(CustomBrowser browser) 10 | { 11 | BrowserName = browser.Name; 12 | BrowserDataPath = browser.DataDirectoryPath; 13 | } 14 | 15 | /// 16 | /// Path to places.sqlite 17 | /// 18 | public string BrowserDataPath { get; init; } 19 | 20 | public string BrowserName { get; init; } 21 | 22 | public override List GetBookmarks() 23 | { 24 | return GetBookmarksFromPath(Path.Combine(BrowserDataPath, "places.sqlite")); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.BrowserBookmark.Models; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | 6 | namespace Flow.Launcher.Plugin.BrowserBookmark; 7 | 8 | public class EdgeBookmarkLoader : ChromiumBookmarkLoader 9 | { 10 | private List LoadEdgeBookmarks() 11 | { 12 | var bookmarks = new List(); 13 | var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 14 | bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge\User Data"), "Microsoft Edge")); 15 | bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge Dev\User Data"), "Microsoft Edge Dev")); 16 | bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge SxS\User Data"), "Microsoft Edge Canary")); 17 | 18 | return bookmarks; 19 | } 20 | 21 | public override List GetBookmarks() => LoadEdgeBookmarks(); 22 | } 23 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.BrowserBookmark.Models; 2 | using System.Collections.Generic; 3 | 4 | namespace Flow.Launcher.Plugin.BrowserBookmark; 5 | 6 | public interface IBookmarkLoader 7 | { 8 | public List GetBookmarks(); 9 | } 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/Images/bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Images/bookmark.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/Images/copylink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Images/copylink.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Flow.Launcher.Plugin.BrowserBookmark.Models; 4 | 5 | // Source may be important in the future 6 | public record Bookmark(string Name, string Url, string Source = "") 7 | { 8 | public override int GetHashCode() 9 | { 10 | var hashName = Name?.GetHashCode() ?? 0; 11 | var hashUrl = Url?.GetHashCode() ?? 0; 12 | return hashName ^ hashUrl; 13 | } 14 | 15 | public virtual bool Equals(Bookmark other) 16 | { 17 | return other != null && Name == other.Name && Url == other.Url; 18 | } 19 | 20 | public List CustomBrowsers { get; set; } = new(); 21 | public string FaviconPath { get; set; } = string.Empty; 22 | } 23 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.BrowserBookmark.Models; 2 | 3 | public class CustomBrowser : BaseModel 4 | { 5 | private string _name; 6 | private string _dataDirectoryPath; 7 | private BrowserType _browserType = BrowserType.Chromium; 8 | 9 | public string Name 10 | { 11 | get => _name; 12 | set 13 | { 14 | _name = value; 15 | OnPropertyChanged(); 16 | } 17 | } 18 | 19 | public string DataDirectoryPath 20 | { 21 | get => _dataDirectoryPath; 22 | set 23 | { 24 | _dataDirectoryPath = value; 25 | OnPropertyChanged(); 26 | } 27 | } 28 | 29 | public BrowserType BrowserType 30 | { 31 | get => _browserType; 32 | set 33 | { 34 | _browserType = value; 35 | OnPropertyChanged(); 36 | } 37 | } 38 | } 39 | 40 | public enum BrowserType 41 | { 42 | Chromium, 43 | Firefox, 44 | } 45 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | 3 | namespace Flow.Launcher.Plugin.BrowserBookmark.Models; 4 | 5 | public class Settings : BaseModel 6 | { 7 | public bool OpenInNewBrowserWindow { get; set; } = true; 8 | 9 | public string BrowserPath { get; set; } 10 | 11 | public bool LoadChromeBookmark { get; set; } = true; 12 | public bool LoadFirefoxBookmark { get; set; } = true; 13 | public bool LoadEdgeBookmark { get; set; } = true; 14 | 15 | public ObservableCollection CustomChromiumBrowsers { get; set; } = new(); 16 | } 17 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "0ECADE17459B49F587BF81DC3A125110", 3 | "ActionKeyword": "b", 4 | "Name": "Browser Bookmarks", 5 | "Description": "Search your browser bookmarks", 6 | "Author": "qianlifeng, Ioannis G.", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", 11 | "IcoPath": "Images\\bookmark.png" 12 | } 13 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Calculator/DecimalSeparator.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using Flow.Launcher.Core.Resource; 3 | 4 | namespace Flow.Launcher.Plugin.Calculator 5 | { 6 | [TypeConverter(typeof(LocalizationConverter))] 7 | public enum DecimalSeparator 8 | { 9 | [LocalizedDescription("flowlauncher_plugin_calculator_decimal_seperator_use_system_locale")] 10 | UseSystemLocale, 11 | 12 | [LocalizedDescription("flowlauncher_plugin_calculator_decimal_seperator_dot")] 13 | Dot, 14 | 15 | [LocalizedDescription("flowlauncher_plugin_calculator_decimal_seperator_comma")] 16 | Comma 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Calculator/Images/calculator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Calculator/Images/calculator.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Flow.Launcher.Plugin.Calculator 3 | { 4 | public class Settings 5 | { 6 | public DecimalSeparator DecimalSeparator { get; set; } = DecimalSeparator.UseSystemLocale; 7 | public int MaxDecimalPlaces { get; set; } = 10; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace Flow.Launcher.Plugin.Calculator.ViewModels 5 | { 6 | public class SettingsViewModel : BaseModel 7 | { 8 | public SettingsViewModel(Settings settings) 9 | { 10 | Settings = settings; 11 | } 12 | 13 | public Settings Settings { get; init; } 14 | 15 | public IEnumerable MaxDecimalPlacesRange => Enumerable.Range(1, 20); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | using Flow.Launcher.Plugin.Calculator.ViewModels; 4 | 5 | namespace Flow.Launcher.Plugin.Calculator.Views 6 | { 7 | /// 8 | /// Interaction logic for CalculatorSettings.xaml 9 | /// 10 | public partial class CalculatorSettings : UserControl 11 | { 12 | private readonly SettingsViewModel _viewModel; 13 | private readonly Settings _settings; 14 | 15 | public CalculatorSettings(SettingsViewModel viewModel) 16 | { 17 | _viewModel = viewModel; 18 | _settings = viewModel.Settings; 19 | DataContext = viewModel; 20 | InitializeComponent(); 21 | } 22 | 23 | private void CalculatorSettings_Loaded(object sender, RoutedEventArgs e) 24 | { 25 | DecimalSeparatorComboBox.SelectedItem = _settings.DecimalSeparator; 26 | MaxDecimalPlaces.SelectedItem = _settings.MaxDecimalPlaces; 27 | } 28 | } 29 | 30 | 31 | } 32 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Calculator/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "CEA0FDFC6D3B4085823D60DC76F28855", 3 | "ActionKeyword": "*", 4 | "Name": "Calculator", 5 | "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", 6 | "Author": "cxfksword", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.Calculator.dll", 11 | "IcoPath": "Images\\calculator.png" 12 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/EverythingSDK/x64/Everything.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/EverythingSDK/x64/Everything.dll -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/EverythingSDK/x86/Everything.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/EverythingSDK/x86/Everything.dll -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/SearchException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Exceptions 4 | { 5 | public class SearchException : Exception 6 | { 7 | public string EngineName { get; } 8 | public SearchException(string engineName, string message) : base(message) 9 | { 10 | EngineName = engineName; 11 | } 12 | 13 | public SearchException(string engineName, string message, Exception innerException) : base(message, innerException) 14 | { 15 | EngineName = engineName; 16 | } 17 | 18 | public override string ToString() 19 | { 20 | return $"{EngineName} Search Exception:\n {base.ToString()}"; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Helper/SortOptionTranslationHelper.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.Everything.Everything; 2 | using JetBrains.Annotations; 3 | using System; 4 | 5 | namespace Flow.Launcher.Plugin.Explorer.Helper; 6 | 7 | public static class SortOptionTranslationHelper 8 | { 9 | [CanBeNull] 10 | public static IPublicAPI API { get; internal set; } 11 | 12 | public static string GetTranslatedName(this SortOption sortOption) 13 | { 14 | const string prefix = "flowlauncher_plugin_everything_sort_by_"; 15 | 16 | ArgumentNullException.ThrowIfNull(API); 17 | 18 | var enumName = Enum.GetName(sortOption); 19 | var splited = enumName!.Split('_'); 20 | var name = string.Join('_', splited[..^1]); 21 | var direction = splited[^1]; 22 | 23 | return $"{API.GetTranslation(prefix + name.ToLower())} {API.GetTranslation(prefix + direction.ToLower())}"; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/context_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/context_menu.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/copy.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/deletefilefolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/deletefilefolder.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/error.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/everything_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/everything_error.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/excludeindexpath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/excludeindexpath.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/file.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/folder.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/index_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/index_error.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/index_error2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/index_error2.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/quickaccess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/quickaccess.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/removequickaccess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/removequickaccess.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/robot_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/robot_error.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/user.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Images/windowsindexingoptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Explorer/Images/windowsindexingoptions.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchOption.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.Everything.Everything; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything 4 | { 5 | public record struct EverythingSearchOption( 6 | string Keyword, 7 | SortOption SortOption, 8 | bool IsContentSearch = false, 9 | string ContentSearchKeyword = default, 10 | string ParentPath = default, 11 | bool IsRecursive = true, 12 | int Offset = 0, 13 | int MaxCount = 100, 14 | bool IsFullPathSearch = true, 15 | bool IsRunCounterEnabled = true 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/CreateThreadException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything.Exceptions 4 | { 5 | /// 6 | /// 7 | /// 8 | public class CreateThreadException : ApplicationException 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/CreateWindowException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything.Exceptions 4 | { 5 | /// 6 | /// 7 | /// 8 | public class CreateWindowException : ApplicationException 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/IPCErrorException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything.Exceptions 4 | { 5 | /// 6 | /// 7 | /// 8 | public class IPCErrorException : ApplicationException 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/InvalidCallException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything.Exceptions 4 | { 5 | /// 6 | /// 7 | /// 8 | public class InvalidCallException : ApplicationException 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/InvalidIndexException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything.Exceptions 4 | { 5 | /// 6 | /// 7 | /// 8 | public class InvalidIndexException : ApplicationException 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/MemoryErrorException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything.Exceptions 4 | { 5 | /// 6 | /// 7 | /// 8 | public class MemoryErrorException : ApplicationException 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/Exceptions/RegisterClassExException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Flow.Launcher.Plugin.Explorer.Search.Everything.Exceptions 4 | { 5 | /// 6 | /// 7 | /// 8 | public class RegisterClassExException : ApplicationException 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/SortOption.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.Everything.Everything 2 | { 3 | public enum SortOption : uint 4 | { 5 | NAME_ASCENDING = 1u, 6 | NAME_DESCENDING = 2u, 7 | PATH_ASCENDING = 3u, 8 | PATH_DESCENDING = 4u, 9 | SIZE_ASCENDING = 5u, 10 | SIZE_DESCENDING = 6u, 11 | EXTENSION_ASCENDING = 7u, 12 | EXTENSION_DESCENDING = 8u, 13 | TYPE_NAME_ASCENDING = 9u, 14 | TYPE_NAME_DESCENDING = 10u, 15 | DATE_CREATED_ASCENDING = 11u, 16 | DATE_CREATED_DESCENDING = 12u, 17 | DATE_MODIFIED_ASCENDING = 13u, 18 | DATE_MODIFIED_DESCENDING = 14u, 19 | ATTRIBUTES_ASCENDING = 15u, 20 | ATTRIBUTES_DESCENDING = 16u, 21 | FILE_LIST_FILENAME_ASCENDING = 17u, 22 | FILE_LIST_FILENAME_DESCENDING = 18u, 23 | RUN_COUNT_DESCENDING = 20u, 24 | DATE_RECENTLY_CHANGED_ASCENDING = 21u, 25 | DATE_RECENTLY_CHANGED_DESCENDING = 22u, 26 | DATE_ACCESSED_ASCENDING = 23u, 27 | DATE_ACCESSED_DESCENDING = 24u, 28 | DATE_RUN_ASCENDING = 25u, 29 | DATE_RUN_DESCENDING = 26u 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/IProvider/IContentIndexProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | 4 | namespace Flow.Launcher.Plugin.Explorer.Search.IProvider 5 | { 6 | public interface IContentIndexProvider 7 | { 8 | public IAsyncEnumerable ContentSearchAsync(string plainSearch, string contentSearch, CancellationToken token = default); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/IProvider/IIndexProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | 4 | namespace Flow.Launcher.Plugin.Explorer.Search.IProvider 5 | { 6 | public interface IIndexProvider 7 | { 8 | public IAsyncEnumerable SearchAsync(string search, CancellationToken token); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/IProvider/IPathIndexProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | 4 | namespace Flow.Launcher.Plugin.Explorer.Search.IProvider 5 | { 6 | public interface IPathIndexProvider 7 | { 8 | public IAsyncEnumerable EnumerateAsync(string path, string search, bool recursive, CancellationToken token); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/AccessLink.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Text.Json.Serialization; 4 | 5 | namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks 6 | { 7 | public class AccessLink 8 | { 9 | public string Path { get; set; } 10 | 11 | public ResultType Type { get; set; } = ResultType.Folder; 12 | 13 | [JsonIgnore] 14 | public string Name 15 | { 16 | get 17 | { 18 | var path = Path.EndsWith(Constants.DirectorySeparator) ? Path[0..^1] : Path; 19 | 20 | if (path.EndsWith(':')) 21 | return path[0..^1] + " Drive"; 22 | 23 | return path.Split(new[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.None) 24 | .Last(); 25 | } 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchResult.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.Explorer.Search 2 | { 3 | public record struct SearchResult 4 | { 5 | public string FullPath { get; init; } 6 | public ResultType Type { get; init; } 7 | public int Score { get; init; } 8 | 9 | public bool WindowsIndexed { get; init; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/Views/Converters/EverythingEnumNameConverter.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.Everything.Everything; 2 | using Flow.Launcher.Plugin.Explorer.Helper; 3 | using System; 4 | using System.Globalization; 5 | using System.Windows.Data; 6 | 7 | namespace Flow.Launcher.Plugin.Explorer.Views.Converters; 8 | 9 | public class EnumNameConverter : IValueConverter 10 | { 11 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 12 | { 13 | return value is SortOption option ? option.GetTranslatedName() : value; 14 | } 15 | 16 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 17 | { 18 | throw new NotImplementedException(); 19 | } 20 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Explorer/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "572be03c74c642baae319fc283e561a8", 3 | "ActionKeywords": [ 4 | "*", 5 | "doc:", 6 | "*", 7 | "*", 8 | "*" 9 | ], 10 | "HideActionKeywordPanel": true, 11 | "Name": "Explorer", 12 | "Description": "Find and manage files and folders via Windows Search or Everything", 13 | "Author": "Jeremy Wu", 14 | "Version": "1.0.0", 15 | "Language": "csharp", 16 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 17 | "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", 18 | "IcoPath": "Images\\explorer.png" 19 | } 20 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Images/work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.PluginIndicator/Images/work.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ar.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | تفعيل كلمة مفتاحية لإجراء إضافة {0} 5 | 6 | مؤشر الإضافة 7 | يوفر اقتراحات لكلمات الإجراءات الخاصة بالإضافات 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/cs.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Aktivace pluginu {0} pomocí aktivačního příkazu 5 | 6 | Indikátor pluginu 7 | Poskytuje návrhy akcí v pluginech 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/da.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Plugin Indicator 7 | Provides plugins action words suggestions 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/de.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Aktions-Schlüsselwort für Plug-in {0} aktivieren 5 | 6 | Plug-in-Indikator 7 | Bietet Vorschläge für Aktions-Schlüsselwörter für Plug-ins 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/en.xaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | Activate {0} plugin action keyword 6 | 7 | Plugin Indicator 8 | Provides plugins action words suggestions 9 | 10 | 11 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/es-419.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Indicador de Plugins 7 | Sugiere palabras clave de plugins 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/es.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activa {0} palabra clave de acción del complemento 5 | 6 | Indicador de complementos 7 | Proporciona sugerencias de palabras de acción para los complementos 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/fr.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activer le mot-clé d'action du plugin {0} 5 | 6 | Indicateur de Plugin 7 | Fournit des suggestions de mots d'action pour les plugins 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/he.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | הפעל את מילת הפעולה של התוסף {0} 5 | 6 | מחוון תוספים 7 | מספק הצעות למילות פעולה של תוספים 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/it.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Attiva la parola chiave del plugin {0} 5 | 6 | Indicatore Plugin 7 | Fornisce suggerimenti sulle parole d'azione dei plugin 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ja.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Plugin Indicator 7 | Provides plugins action words suggestions 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ko.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {0} 플러그인의 액션 키워드 5 | 6 | 플러그인 키워드 힌트 7 | 사용중인 플러그인들의 전체 액션 키워드 목록을 보여줍니다 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/nb.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Aktiver {0} programtillegg-handlingsnøkkelord 5 | 6 | Indikator for programtillegg 7 | Viser forslag til handlingsord for programtillegg 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/nl.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Plugin Indicator 7 | Provides plugins action words suggestions 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/pl.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Aktywuj słowo kluczowe akcji wtyczki {0} 5 | 6 | Wskaźnik wtyczki 7 | Pokazuje podpowiedzi jakich zainstalowanych wtyczek możesz użyć 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/pt-br.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Plugin Indicator 7 | Provides plugins action words suggestions 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/pt-pt.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Palavra-chave para ativar o plugin {0} 5 | 6 | Plugin Indicador 7 | Disponibiliza sugestões de palavras-chave para os plugins 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ru.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Активировать {0} ключевое слово действия плагина 5 | 6 | Индикатор плагинов 7 | Предоставляет предложения слов действия плагинов 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/sk.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Aktivovať plugin {0} aktivačným príkazom 5 | 6 | Plugin Indicator 7 | Ponúka návrhy pre akcie pluginov 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/sr.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Plugin Indicator 7 | Provides plugins action words suggestions 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/tr.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Eklenti Göstergesi 7 | Eklenti eylemleri hakkında kelime önerileri sunar 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/uk-UA.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Активувати {0} ключове слово дії плагіна 5 | 6 | Індикатор плагіну 7 | Надає плагінам пропозиції щодо слів дії 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | Chỉ báo plugin 7 | Cung cấp plugin gợi ý từ hành động 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/zh-cn.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 激活 {0} 插件的关键字 5 | 6 | 插件关键词提示 7 | 提供插件关键词搜索提示 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/zh-tw.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Activate {0} plugin action keyword 5 | 6 | 套件關鍵字提示 7 | 提供套件關鍵字搜尋提示 8 | 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "6A122269676E40EB86EB543B945932B9", 3 | "ActionKeyword": "?", 4 | "Name": "Plugin Indicator", 5 | "Description": "Provides plugin action keyword suggestions", 6 | "Author": "qianlifeng", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.PluginIndicator.dll", 11 | "IcoPath": "Images\\work.png" 12 | } 13 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/Images/manifestsite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/manifestsite.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/Images/pluginsmanager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/pluginsmanager.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/Images/request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/request.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/Images/sourcecode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/sourcecode.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/Images/zipfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.PluginsManager/Images/zipfolder.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/Settings.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.PluginsManager 2 | { 3 | internal class Settings 4 | { 5 | internal const string InstallCommand = "install"; 6 | 7 | internal const string UninstallCommand = "uninstall"; 8 | 9 | internal const string UpdateCommand = "update"; 10 | 11 | public bool WarnFromUnknownSource { get; set; } = true; 12 | 13 | public bool AutoRestartAfterChanging { get; set; } = false; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/ViewModels/SettingsViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.PluginsManager.ViewModels 2 | { 3 | internal class SettingsViewModel 4 | { 5 | internal Settings Settings { get; set; } 6 | 7 | internal PluginInitContext Context { get; set; } 8 | 9 | public SettingsViewModel(PluginInitContext context, Settings settings) 10 | { 11 | Context = context; 12 | Settings = settings; 13 | } 14 | 15 | public bool WarnFromUnknownSource 16 | { 17 | get => Settings.WarnFromUnknownSource; 18 | set => Settings.WarnFromUnknownSource = value; 19 | } 20 | 21 | public bool AutoRestartAfterChanging 22 | { 23 | get => Settings.AutoRestartAfterChanging; 24 | set => Settings.AutoRestartAfterChanging = value; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml.cs: -------------------------------------------------------------------------------- 1 | using Flow.Launcher.Plugin.PluginsManager.ViewModels; 2 | 3 | namespace Flow.Launcher.Plugin.PluginsManager.Views 4 | { 5 | /// 6 | /// Interaction logic for PluginsManagerSettings.xaml 7 | /// 8 | public partial class PluginsManagerSettings 9 | { 10 | internal PluginsManagerSettings(SettingsViewModel viewModel) 11 | { 12 | InitializeComponent(); 13 | 14 | DataContext = viewModel; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "9f8f9b14-2518-4907-b211-35ab6290dee7", 3 | "ActionKeywords": [ 4 | "pm" 5 | ], 6 | "Name": "Plugins Manager", 7 | "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", 8 | "Author": "Jeremy Wu", 9 | "Version": "1.0.0", 10 | "Language": "csharp", 11 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 12 | "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", 13 | "IcoPath": "Images\\pluginsmanager.png" 14 | } 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Images/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.ProcessKiller/Images/app.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ar.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | قاتل العمليات 5 | اقتل العمليات قيد التشغيل من Flow Launcher 6 | 7 | قتل جميع الأمثلة من "{0}" 8 | قتل عمليات {0} 9 | قتل جميع الأمثلة 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/cs.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Ukončí spuštěné procesy z Flow Launcheru 6 | 7 | ukončit všechny instance "{0}" 8 | ukončit {0} procesů 9 | ukončit všechny instance 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/da.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Kill running processes from Flow Launcher 6 | 7 | kill all instances of "{0}" 8 | kill {0} processes 9 | kill all instances 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/de.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Laufende Prozesse aus Flow Launcher beenden 6 | 7 | Alle Instanzen von "{0}" beenden 8 | {0} Prozesse beenden 9 | Alle Instanzen beenden 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/en.xaml: -------------------------------------------------------------------------------- 1 |  5 | 6 | Process Killer 7 | Kill running processes from Flow Launcher 8 | 9 | kill all instances of "{0}" 10 | kill {0} processes 11 | kill all instances 12 | 13 | Show title for processes with visible windows 14 | Put processes with visible windows on the top 15 | 16 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/he.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | מנהל תהליכים 5 | סגור תהליכים פעילים מתוך Flow Launcher 6 | 7 | סגור את כל המופעים של "{0}" 8 | סגור {0} תהליכים 9 | סגור את כל המופעים 10 | 11 | הצג כותרת עבור תהליכים בעלי חלונות גלויים 12 | הצב תהליכים עם חלונות גלויים בחלק העליון 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/it.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Termina i processi in esecuzione da Flow Launcher 6 | 7 | termina tutte le istanze di "{0}" 8 | termina {0} processi 9 | termina tutte le istanze 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ja.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Kill running processes from Flow Launcher 6 | 7 | kill all instances of "{0}" 8 | kill {0} processes 9 | kill all instances 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ko.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 프로세스 킬러 5 | 실행중인 프로세스를 Flow를 사용하여 종료합니다 6 | 7 | "{0}"의 모든 인스턴스를 종료 8 | {0} 프로세스 종료 9 | 모든 인스턴스 종료 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/nb.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Prosessterminerer 5 | Terminer kjørende prosesser fra Flow Launcher 6 | 7 | terminer alle forekomster av "{0}" 8 | terminer {0} processes 9 | terminer alle forekomstene 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/nl.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Kill running processes from Flow Launcher 6 | 7 | kill all instances of "{0}" 8 | kill {0} processes 9 | kill all instances 10 | 11 | Show title for processes with visible windows 12 | Zet processen met zichtbare vensters bovenaan 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Zamykacz procesów 5 | Zamykaj uruchomione procesy z poziomu Flow Launcher 6 | 7 | zamknij wszystkie instancje "{0}" 8 | zamknij {0} procesów 9 | zamknij wszystkie instancje 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pt-br.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Kill running processes from Flow Launcher 6 | 7 | kill all instances of "{0}" 8 | kill {0} processes 9 | kill all instances 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ru.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Удалятор процессов 5 | Удаление запущенных процессов из Flow Launcher 6 | 7 | удалить все экземпляры «{0}» 8 | удалить {0} процессов 9 | удалить все экземпляры 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/sk.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Ukončuje spustené procesy z Flow Launchera 6 | 7 | ukončiť všetky inštancie "{0}" 8 | ukončiť {0} procesov 9 | ukončiť všetky inštancie 10 | 11 | Zobraziť nadpis pre procesy s viditeľnými oknami 12 | Zobraziť procesy s viditeľným oknom navrchu 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/sr.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Kill running processes from Flow Launcher 6 | 7 | kill all instances of "{0}" 8 | kill {0} processes 9 | kill all instances 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/tr.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Kill running processes from Flow Launcher 6 | 7 | kill all instances of "{0}" 8 | kill {0} processes 9 | kill all instances 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Вбивця процесів 5 | Завершення запущених процесів через Flow Launcher 6 | 7 | вбити всі екземпляри "{0}" 8 | вбити {0} процесів 9 | вбити всі екземпляри 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/zh-cn.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 进程杀手 5 | 使用 Flow Launcher 终止正在运行的进程 6 | 7 | 杀死 {0} 的所有实例 8 | 杀死 {0} 进程 9 | 杀死所有实例 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/zh-tw.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Process Killer 5 | Kill running processes from Flow Launcher 6 | 7 | kill all instances of "{0}" 8 | kill {0} processes 9 | kill all instances 10 | 11 | Show title for processes with visible windows 12 | Put processes with visible windows on the top 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/NativeMethods.txt: -------------------------------------------------------------------------------- 1 | QueryFullProcessImageName 2 | OpenProcess 3 | EnumWindows 4 | GetWindowTextLength 5 | GetWindowText 6 | IsWindowVisible 7 | GetWindowThreadProcessId -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/ProcessResult.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using Flow.Launcher.Plugin.SharedModels; 3 | 4 | namespace Flow.Launcher.Plugin.ProcessKiller 5 | { 6 | internal class ProcessResult 7 | { 8 | public ProcessResult(Process process, int score, string title, MatchResult match, string tooltip) 9 | { 10 | Process = process; 11 | Score = score; 12 | Title = title; 13 | TitleMatch = match; 14 | Tooltip = tooltip; 15 | } 16 | 17 | public Process Process { get; } 18 | 19 | public int Score { get; } 20 | 21 | public string Title { get; } 22 | 23 | public MatchResult TitleMatch { get; } 24 | 25 | public string Tooltip { get; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Readme.md: -------------------------------------------------------------------------------- 1 | Process Killer Plugin 2 | ===================== 3 | 4 | A Flow-Launcher plugin that allows you to kill running processes. 5 | 6 | Based on Wox.Plugin.ProcessKiller, originally created by [cxfksword](https://github.com/cxfksword/Wox.Plugin.ProcessKiller) and improved by [theClueless](https://github.com/theClueless/Wox.Plugins/tree/master/Wox.Plugin.ProcessKiller). 7 | 8 | ![image](https://user-images.githubusercontent.com/697917/86478286-b4697700-bd52-11ea-875a-b3b90fa34bf2.png) 9 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Settings.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.ProcessKiller 2 | { 3 | public class Settings 4 | { 5 | public bool ShowWindowTitle { get; set; } = true; 6 | 7 | public bool PutVisibleWindowProcessesTop { get; set; } = false; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/ViewModels/SettingsViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.ProcessKiller.ViewModels 2 | { 3 | public class SettingsViewModel 4 | { 5 | public Settings Settings { get; set; } 6 | 7 | public SettingsViewModel(Settings settings) 8 | { 9 | Settings = settings; 10 | } 11 | 12 | public bool ShowWindowTitle 13 | { 14 | get => Settings.ShowWindowTitle; 15 | set => Settings.ShowWindowTitle = value; 16 | } 17 | 18 | public bool PutVisibleWindowProcessesTop 19 | { 20 | get => Settings.PutVisibleWindowProcessesTop; 21 | set => Settings.PutVisibleWindowProcessesTop = value; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/Views/SettingsControl.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Flow.Launcher.Plugin.ProcessKiller.ViewModels; 3 | 4 | namespace Flow.Launcher.Plugin.ProcessKiller.Views; 5 | 6 | public partial class SettingsControl : UserControl 7 | { 8 | /// 9 | /// Interaction logic for SettingsControl.xaml 10 | /// 11 | public SettingsControl(SettingsViewModel viewModel) 12 | { 13 | InitializeComponent(); 14 | 15 | DataContext = viewModel; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID":"b64d0a79-329a-48b0-b53f-d658318a1bf6", 3 | "ActionKeyword":"kill", 4 | "Name":"Process Killer", 5 | "Description":"Kill running processes from Flow", 6 | "Author":"Flow-Launcher", 7 | "Version": "1.0.0", 8 | "Language":"csharp", 9 | "Website":"https://github.com/Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller", 10 | "IcoPath":"Images\\app.png", 11 | "ExecuteFileName":"Flow.Launcher.Plugin.ProcessKiller.dll" 12 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/Images/cmd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Program/Images/cmd.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/Images/disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Program/Images/disable.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/Images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Program/Images/folder.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/Images/program.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Program/Images/program.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/Images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Program/Images/user.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/NativeMethods.txt: -------------------------------------------------------------------------------- 1 | SHGetLocalizedName 2 | LoadString 3 | LoadLibraryEx 4 | FreeLibrary 5 | ExpandEnvironmentStrings 6 | S_OK 7 | SLGP_FLAGS 8 | WIN32_FIND_DATAW 9 | SLR_FLAGS 10 | IShellLinkW -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/Programs/IProgram.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Flow.Launcher.Plugin.Program.Programs 4 | { 5 | public interface IProgram 6 | { 7 | List ContextMenus(IPublicAPI api); 8 | Result Result(string query, IPublicAPI api); 9 | string UniqueIdentifier { get; set; } 10 | string Name { get; } 11 | string Location { get; } 12 | bool Enabled { get; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/SuffixesConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using System.Windows.Markup; 5 | 6 | namespace Flow.Launcher.Plugin.Program 7 | { 8 | public class SuffixesConvert : MarkupExtension, IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | var text = value as string[]; 13 | if (text != null) 14 | { 15 | return string.Join(Settings.SuffixSeparator, text); 16 | } 17 | else 18 | { 19 | return string.Empty; 20 | } 21 | } 22 | 23 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 24 | { 25 | throw new NotSupportedException(); 26 | } 27 | 28 | public override object ProvideValue(IServiceProvider serviceProvider) 29 | { 30 | return this; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Program/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "791FC278BA414111B8D1886DFE447410", 3 | "ActionKeyword": "*", 4 | "Name": "Program", 5 | "Description": "Search programs in Flow.Launcher", 6 | "Author": "qianlifeng", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", 11 | "IcoPath": "Images\\program.png" 12 | } 13 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Shell/Images/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Shell/Images/admin.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Shell/Images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Shell/Images/copy.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Shell/Images/shell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Shell/Images/shell.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Shell/Images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Shell/Images/user.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Shell/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "D409510CD0D2481F853690A07E6DC426", 3 | "ActionKeyword": ">", 4 | "Name": "Shell", 5 | "Description": "Provide executing commands from Flow Launcher", 6 | "Author": "qianlifeng", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.Shell.dll", 11 | "IcoPath": "Images\\shell.png" 12 | } -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Command.cs: -------------------------------------------------------------------------------- 1 | using System.Text.Json.Serialization; 2 | 3 | namespace Flow.Launcher.Plugin.Sys 4 | { 5 | public class Command : BaseModel 6 | { 7 | public string Key { get; set; } 8 | 9 | private string name; 10 | [JsonIgnore] 11 | public string Name 12 | { 13 | get => name; 14 | set 15 | { 16 | name = value; 17 | OnPropertyChanged(); 18 | } 19 | } 20 | 21 | private string description; 22 | [JsonIgnore] 23 | public string Description 24 | { 25 | get => description; 26 | set 27 | { 28 | description = value; 29 | OnPropertyChanged(); 30 | } 31 | } 32 | 33 | private string keyword; 34 | public string Keyword 35 | { 36 | get => keyword; 37 | set 38 | { 39 | keyword = value; 40 | OnPropertyChanged(); 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/app.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/checkupdate.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/close.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/hibernate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/hibernate.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/indexoption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/indexoption.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/lock.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/logoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/logoff.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/openrecyclebin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/openrecyclebin.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/recyclebin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/recyclebin.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/restart.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/restart_advanced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/restart_advanced.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/shutdown.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/sleep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/sleep.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/Images/theme_selector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Sys/Images/theme_selector.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/NativeMethods.txt: -------------------------------------------------------------------------------- 1 | ExitWindowsEx 2 | LockWorkStation 3 | SHEmptyRecycleBin 4 | S_OK 5 | E_UNEXPECTED 6 | SetSuspendState 7 | OpenProcessToken 8 | WIN32_ERROR 9 | LookupPrivilegeValue 10 | AdjustTokenPrivileges 11 | TOKEN_PRIVILEGES 12 | SE_SHUTDOWN_NAME -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/SettingsViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.Sys 2 | { 3 | public class SettingsViewModel 4 | { 5 | public SettingsViewModel(Settings settings) 6 | { 7 | Settings = settings; 8 | } 9 | 10 | public Settings Settings { get; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Sys/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "CEA08895D2544B019B2E9C5009600DF4", 3 | "ActionKeyword": "*", 4 | "Name": "System Commands", 5 | "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", 6 | "Author": "qianlifeng", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", 11 | "IcoPath": "Images\\lock.png" 12 | } 13 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Url/Images/url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.Url/Images/url.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Url/Settings.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.Url 2 | { 3 | public class Settings 4 | { 5 | public string BrowserPath { get; set; } 6 | 7 | public bool OpenInNewBrowserWindow { get; set; } = true; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.Url/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "0308FD86DE0A4DEE8D62B9B535370992", 3 | "ActionKeyword": "*", 4 | "Name": "URL", 5 | "Description": "Open the typed URL from Flow Launcher", 6 | "Author": "qianlifeng", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.Url.dll", 11 | "IcoPath": "Images\\url.png" 12 | } 13 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/baidu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/baidu.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/bing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/bing.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/copylink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/copylink.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/duckduckgo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/duckduckgo.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/facebook.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/gist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gist.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/github.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/gmail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gmail.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_drive.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_maps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_maps.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_translate.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/netflix.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/pictures.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/pictures.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/stackoverflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/stackoverflow.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/twitter.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/web_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/web_search.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/wiki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/wiki.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/wolframalpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/wolframalpha.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/yahoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/yahoo.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/youtube.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/Images/youtubemusic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WebSearch/Images/youtubemusic.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/SettingsViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace Flow.Launcher.Plugin.WebSearch 2 | { 3 | public class SettingsViewModel 4 | { 5 | public SettingsViewModel(Settings settings) 6 | { 7 | Settings = settings; 8 | } 9 | 10 | public Settings Settings { get; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/SuggestionSource.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | 5 | namespace Flow.Launcher.Plugin.WebSearch.SuggestionSources 6 | { 7 | public abstract class SuggestionSource 8 | { 9 | public abstract Task> SuggestionsAsync(string query, CancellationToken token); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "565B73353DBF4806919830B9202EE3BF", 3 | "ActionKeywords": [ 4 | "*", 5 | "sc", 6 | "wiki", 7 | "findicon", 8 | "facebook", 9 | "twitter", 10 | "maps", 11 | "translate", 12 | "duckduckgo", 13 | "github", 14 | "gist", 15 | "gmail", 16 | "drive", 17 | "wolframalpha", 18 | "stackoverflow", 19 | "lucky", 20 | "image", 21 | "youtube", 22 | "bing", 23 | "yahoo", 24 | "bd" 25 | ], 26 | "HideActionKeywordPanel": true, 27 | "Name": "Web Searches", 28 | "Description": "Provide the web search ability", 29 | "Author": "qianlifeng", 30 | "Version": "1.0.0", 31 | "Language": "csharp", 32 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 33 | "ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll", 34 | "IcoPath": "Images\\web_search.png", 35 | "SearchDelayTime": 450 36 | } 37 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ContextMenuHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows; 4 | 5 | namespace Flow.Launcher.Plugin.WindowsSettings.Helper 6 | { 7 | /// 8 | /// Helper class to easier work with context menu entries 9 | /// 10 | internal static class ContextMenuHelper 11 | { 12 | /// 13 | /// Return a list with all context menu entries for the given 14 | /// Symbols taken from 15 | /// 16 | /// The result for the context menu entires 17 | /// The name of the this assembly 18 | /// A list with context menu entries 19 | internal static List GetContextMenu(in Result result, in string assemblyName) 20 | { 21 | return new List(0); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WindowsSettings/Images/ControlPanel_Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WindowsSettings/Images/ControlPanel_Small.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WindowsSettings/Images/WindowsSettings.light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/dd2560e729da6dee9f08ae1d43eddb4142f90844/Plugins/Flow.Launcher.Plugin.WindowsSettings/Images/WindowsSettings.light.png -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WindowsSettings/Log.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.CompilerServices; 3 | 4 | namespace Flow.Launcher.Plugin.WindowsSettings 5 | { 6 | public static class Log 7 | { 8 | private static IPublicAPI? _api; 9 | 10 | public static void Init(IPublicAPI api) 11 | { 12 | _api = api; 13 | } 14 | 15 | public static void Exception(string message, Exception exception, Type type, [CallerMemberName] string methodName = "") 16 | { 17 | _api?.LogException(type.FullName, message, exception, methodName); 18 | } 19 | 20 | public static void Warn(string message, Type type, [CallerMemberName] string methodName = "") 21 | { 22 | _api?.LogWarn(type.FullName, message, methodName); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WindowsSettings/README.md: -------------------------------------------------------------------------------- 1 | # Flow.Launcher.Plugin.WindowsSettings 2 | Ported from PowerToys WindowsSettings plugin 3 | -------------------------------------------------------------------------------- /Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "5043CETYU6A748679OPA02D27D99677A", 3 | "ActionKeyword": "s", 4 | "Description": "Search settings inside Control Panel and Settings App", 5 | "Name": "Windows Settings", 6 | "Author": "TobiasSekan", 7 | "Version": "1.0.0", 8 | "Language": "csharp", 9 | "Website": "https://github.com/Flow-Launcher/Flow.Launcher", 10 | "ExecuteFileName": "Flow.Launcher.Plugin.WindowsSettings.dll", 11 | "IcoPath": "Images\\WindowsSettings.light.png" 12 | } 13 | -------------------------------------------------------------------------------- /Scripts/flowlauncher.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FlowLauncher 5 | Flow Launcher 6 | $version$ 7 | Flow-Launcher Team 8 | https://github.com/Flow-Launcher/Flow.Launcher 9 | https://raw.githubusercontent.com/Flow-Launcher/Flow.Launcher/master/Flow.Launcher/Images/app.png 10 | false 11 | Flow Launcher - Quick file search and app launcher for Windows with community-made plugins 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /SolutionAssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | #if DEBUG 5 | 6 | [assembly: AssemblyConfiguration("Debug")] 7 | [assembly: AssemblyDescription("Debug build, https://github.com/Flow-Launcher/Flow.Launcher")] 8 | #else 9 | [assembly: AssemblyConfiguration("Release")] 10 | [assembly: AssemblyDescription("Release build, https://github.com/Flow-Launcher/Flow.Launcher")] 11 | #endif 12 | 13 | [assembly: AssemblyCompany("Flow Launcher")] 14 | [assembly: AssemblyProduct("Flow Launcher")] 15 | [assembly: AssemblyCopyright("The MIT License (MIT)")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | [assembly: ComVisible(false)] 19 | [assembly: AssemblyVersion("1.0.0")] 20 | [assembly: AssemblyFileVersion("1.0.0")] 21 | [assembly: AssemblyInformationalVersion("1.0.0")] 22 | -------------------------------------------------------------------------------- /attribution.md: -------------------------------------------------------------------------------- 1 | Flow's roots came from a rebrand of the [JJW24/Wox fork](https://github.com/jjw24/Wox/issues/156) and [WoX](https://github.com/Wox-launcher/Wox). 2 | 3 | A big thank you and all credits to [Bao](https://github.com/bao-qian), the author of WoX, and its contributors for all the amazing work. 4 | 5 | The JJW24/Wox fork started adding new changes on top of main WoX repo's code base from release v1.3.524. 6 | Flow is a continuation of the work from JJW24/Wox. 7 | -------------------------------------------------------------------------------- /azure-pipelines.yml: -------------------------------------------------------------------------------- 1 | # .NET Desktop 2 | # Build and run tests for .NET Desktop or Windows classic desktop solutions. 3 | # Add steps that publish symbols, save build artifacts, and more: 4 | # https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net 5 | 6 | trigger: 7 | - master 8 | - dev 9 | 10 | pool: 11 | vmImage: 'windows-2019' #'due to windows SDK dependency for building UWP project' 12 | 13 | variables: 14 | solution: '**/*.sln' 15 | buildPlatform: 'Any CPU' 16 | buildConfiguration: 'Release' 17 | 18 | steps: 19 | - task: UseDotNet@2 20 | displayName: 'Install .NET Core sdk' 21 | inputs: 22 | packageType: sdk 23 | version: 3.1.100 24 | installationPath: $(Agent.ToolsDirectory)/dotnet 25 | 26 | - task: NuGetToolInstaller@1 27 | 28 | - task: NuGetCommand@2 29 | inputs: 30 | restoreSolution: '$(solution)' 31 | 32 | - task: VSBuild@1 33 | inputs: 34 | solution: '$(solution)' 35 | platform: '$(buildPlatform)' 36 | configuration: '$(buildConfiguration)' 37 | 38 | - task: VSTest@2 39 | inputs: 40 | platform: '$(buildPlatform)' 41 | configuration: '$(buildConfiguration)' 42 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: Languages/en.xaml 3 | translation: /%original_path%/%two_letters_code%.xaml 4 | - source: Properties/Resources.resx 5 | translation: /%original_path%/Resources.%locale%.resx 6 | commit_message: '[ci skip]' 7 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "7.0.*", 4 | "rollForward": "latestPatch" 5 | } 6 | } 7 | --------------------------------------------------------------------------------