diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
new file mode 100644
index 000000000..2bc95d086
--- /dev/null
+++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
@@ -0,0 +1,16 @@
+using NUnit.Framework;
+
+namespace Flow.Launcher.Test.Plugins
+{
+ [TestFixture]
+ public class ExplorerTest
+ {
+ public void GivenWindowsIndexSearch_WhenProvidedFolderPath_ThenQueryWhereRestrictionsShouldUseDirectoryString(string expectedString){}
+
+ public void GivenWindowsIndexSearch_WhenSearchAllFoldersAndFiles_ThenQueryWhereRestrictionsShouldUseScopeString() { }
+
+ public void GivenWindowsIndexSearch_WhenReturnedNilAndIsNotIndexed_ThenSearchMethodShouldContinueDirectoryInfoClassSearch() { }
+
+ public void GivenWindowsIndexSearch_WhenSearchPatternHotKeyIsSearchAll_ThenQueryWhereRestrictionsShouldUseScopeString() { }
+ }
+}
diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln
index 2827cf585..c242932ea 100644
--- a/Flow.Launcher.sln
+++ b/Flow.Launcher.sln
@@ -1,4 +1,4 @@
-
+
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29806.167
@@ -18,6 +18,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher", "Flow.Launc
{1EE20B48-82FB-48A2-8086-675D6DDAB4F0} = {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}
{0B9DE348-9361-4940-ADB6-F5953BFFCCEC} = {0B9DE348-9361-4940-ADB6-F5953BFFCCEC}
{FDB3555B-58EF-4AE6-B5F1-904719637AB4} = {FDB3555B-58EF-4AE6-B5F1-904719637AB4}
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F} = {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}
{59BD9891-3837-438A-958D-ADC7F91F6F7E} = {59BD9891-3837-438A-958D-ADC7F91F6F7E}
{C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} = {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}
{787B8AA6-CA93-4C84-96FE-DF31110AD1C4} = {787B8AA6-CA93-4C84-96FE-DF31110AD1C4}
@@ -76,6 +77,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.Calcul
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "HelloWorldFSharp", "Plugins\HelloWorldFSharp\HelloWorldFSharp.fsproj", "{30DDA7D9-3712-44F4-BD18-DC1C05B2DD9E}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Plugin.Explorer", "Plugins\Flow.Launcher.Plugin.Explorer\Flow.Launcher.Plugin.Explorer.csproj", "{F9C4C081-4CC3-4146-95F1-E102B4E10A5F}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -327,6 +330,18 @@ Global
{30DDA7D9-3712-44F4-BD18-DC1C05B2DD9E}.Release|x64.Build.0 = Release|Any CPU
{30DDA7D9-3712-44F4-BD18-DC1C05B2DD9E}.Release|x86.ActiveCfg = Release|Any CPU
{30DDA7D9-3712-44F4-BD18-DC1C05B2DD9E}.Release|x86.Build.0 = Release|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Debug|x64.Build.0 = Debug|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Debug|x86.Build.0 = Debug|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Release|x64.ActiveCfg = Release|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Release|x64.Build.0 = Release|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Release|x86.ActiveCfg = Release|Any CPU
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -347,6 +362,7 @@ Global
{9B130CC5-14FB-41FF-B310-0A95B6894C37} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87}
{59BD9891-3837-438A-958D-ADC7F91F6F7E} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87}
{30DDA7D9-3712-44F4-BD18-DC1C05B2DD9E} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87}
+ {F9C4C081-4CC3-4146-95F1-E102B4E10A5F} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {F26ACB50-3F6C-4907-B0C9-1ADACC1D0DED}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj
new file mode 100644
index 000000000..5f1ec0544
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj
@@ -0,0 +1,24 @@
+
+
+
+ Library
+ netcoreapp3.1
+ true
+
+
+
+
+
+ ..\..\Output\Debug\Plugins\Flow.Launcher.Explorer
+
+
+
+ ..\..\Output\Release\Plugins\Flow.Launcher.Explorer
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png b/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png
new file mode 100644
index 000000000..552b2c5bd
Binary files /dev/null and b/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png differ
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs
new file mode 100644
index 000000000..206911b6c
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs
@@ -0,0 +1,57 @@
+using Flow.Launcher.Infrastructure.Storage;
+using Flow.Launcher.Plugin.Explorer.ViewModels;
+using Flow.Launcher.Plugin.Explorer.Views;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Controls;
+
+namespace Flow.Launcher.Plugin.Explorer
+{
+ class Main : ISettingProvider, IPlugin, ISavable, IPluginI18n, IContextMenu
+ {
+ private PluginInitContext Context { get; set; }
+
+ private Settings _settings;
+
+ private SettingsViewModel _viewModel;
+
+ public Control CreateSettingPanel()
+ {
+ return new ExplorerSettings();
+ }
+
+ public string GetTranslatedPluginDescription()
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetTranslatedPluginTitle()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Init(PluginInitContext context)
+ {
+ Context = context;
+
+ _viewModel = new SettingsViewModel();
+ _settings = _viewModel.Settings;
+ }
+
+ public List LoadContextMenus(Result selectedResult)
+ {
+ throw new NotImplementedException();
+ }
+
+ public List Query(Query query)
+ {
+ return new List();
+ }
+
+ public void Save()
+ {
+ _viewModel.Save();
+ }
+ }
+}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs
new file mode 100644
index 000000000..dcdb8f06e
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Flow.Launcher.Plugin.Explorer
+{
+ public class Settings
+ {
+ }
+}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs
new file mode 100644
index 000000000..298476abd
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs
@@ -0,0 +1,25 @@
+using Flow.Launcher.Infrastructure.Storage;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Flow.Launcher.Plugin.Explorer.ViewModels
+{
+ public class SettingsViewModel
+ {
+ private readonly PluginJsonStorage _storage;
+
+ public Settings Settings { get; set; }
+
+ public SettingsViewModel()
+ {
+ _storage = new PluginJsonStorage();
+ Settings = _storage.Load();
+ }
+
+ public void Save()
+ {
+ _storage.Save();
+ }
+ }
+}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml
new file mode 100644
index 000000000..93defd985
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs
new file mode 100644
index 000000000..f87c29412
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs
@@ -0,0 +1,27 @@
+using Flow.Launcher.Plugin.Explorer.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Flow.Launcher.Plugin.Explorer.Views
+{
+ ///
+ /// Interaction logic for ExplorerSettings.xaml
+ ///
+ public partial class ExplorerSettings : UserControl
+ {
+ public ExplorerSettings()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json
new file mode 100644
index 000000000..4a6c8785c
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json
@@ -0,0 +1,12 @@
+{
+ "ID": "572be03c74c642baae319fc283e561a8",
+ "ActionKeyword": "*",
+ "Name": "Explorer",
+ "Description": "Search and manage files, folders and subfolders. Explorer utilises Windows Index Search",
+ "Author": "Jeremy Wu",
+ "Version": "1.0.0",
+ "Language": "csharp",
+ "Website": "https://github.com/Flow-Launcher/Flow.Launcher",
+ "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll",
+ "IcoPath": "Images\\explorer.png"
+}