From dacd13ee30aaa9bc2cc989732ed073db54c69166 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Kommuru Date: Mon, 16 Mar 2020 14:30:38 -0700 Subject: [PATCH 01/20] Added a SearchResult Helper class --- .../Plugins/Wox.Plugin.Indexer/Class1.cs | 12 +++++ .../Properties/AssemblyInfo.cs | 36 +++++++++++++ .../SearchHelper/SearchResult.cs | 14 +++++ .../Wox.Plugin.Indexer.csproj | 54 +++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/Properties/AssemblyInfo.cs create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/SearchResult.cs create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs new file mode 100644 index 0000000000..5955ce0204 --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Wox.Plugin.Indexer +{ + public class Class1 + { + } +} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Properties/AssemblyInfo.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..a6f591220c --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Wox.Plugin.Indexer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Wox.Plugin.Indexer")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("63c3cea8-51fe-472e-b97c-b58f8b17dd51")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/SearchResult.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/SearchResult.cs new file mode 100644 index 0000000000..fc4c0ed770 --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/SearchResult.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Wox.Plugin.Indexer.SearchHelper +{ + public class SearchResult + { + // Contains the Path of the file or folder + public string Path { get; set; } + } +} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj new file mode 100644 index 0000000000..d6cd5b2a32 --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj @@ -0,0 +1,54 @@ + + + + + Debug + AnyCPU + 63c3cea8-51fe-472e-b97c-b58f8b17dd51 + Library + Properties + Wox.Plugin.Indexer + Wox.Plugin.Indexer + v4.7.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + From 8e45c41f209af77a9c94c8f242bbcc74a6d3d402 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Kommuru Date: Mon, 16 Mar 2020 14:37:28 -0700 Subject: [PATCH 02/20] Created a helper class to use indexer and return search results --- PowerToys.sln | 11 +++ .../SearchHelper/WindowsSearchAPI.cs | 81 +++++++++++++++++++ .../Wox.Plugin.Indexer.csproj | 37 +++++---- .../Wox.Plugin.Indexer/packages.config | 4 + 4 files changed, 116 insertions(+), 17 deletions(-) create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/packages.config diff --git a/PowerToys.sln b/PowerToys.sln index 6b4e70c89a..396ff8efa7 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -154,6 +154,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Folder", "src\mo EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Wox.Launcher", "src\modules\launcher\Wox.Launcher\Wox.Launcher.vcxproj", "{E364F67B-BB12-4E91-B639-355866EBCD8B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Indexer", "src\modules\launcher\Plugins\Wox.Plugin.Indexer\Wox.Plugin.Indexer.csproj", "{63C3CEA8-51FE-472E-B97C-B58F8B17DD51}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -378,6 +380,14 @@ Global {E364F67B-BB12-4E91-B639-355866EBCD8B}.Release|Any CPU.ActiveCfg = Release|x64 {E364F67B-BB12-4E91-B639-355866EBCD8B}.Release|x64.ActiveCfg = Release|x64 {E364F67B-BB12-4E91-B639-355866EBCD8B}.Release|x64.Build.0 = Release|x64 + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Debug|x64.ActiveCfg = Debug|Any CPU + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Debug|x64.Build.0 = Debug|Any CPU + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Release|Any CPU.Build.0 = Release|Any CPU + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Release|x64.ActiveCfg = Release|Any CPU + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -419,6 +429,7 @@ Global {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0} = {4AFC9975-2456-4C70-94A4-84073C1CED93} {787B8AA6-CA93-4C84-96FE-DF31110AD1C4} = {4AFC9975-2456-4C70-94A4-84073C1CED93} {E364F67B-BB12-4E91-B639-355866EBCD8B} = {C140A3EF-6DBF-4084-9D4C-4EB5A99FEE68} + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51} = {4AFC9975-2456-4C70-94A4-84073C1CED93} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs new file mode 100644 index 0000000000..a340b99d64 --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Data.OleDb; +using Microsoft.Search.Interop; + +namespace Wox.Plugin.Indexer.SearchHelper +{ + public class WindowsSearchAPI + { + public IEnumerable Search(string keyword, string pattern = "*", int offset = 0, int maxCount = 100) + { + // This uses the Microsoft.Search.Interop assembly + CSearchManager manager = new CSearchManager(); + + // SystemIndex catalog is the default catalog in Windows + ISearchCatalogManager catalogManager = manager.GetCatalog("SystemIndex"); + + // Get the ISearchQueryHelper which will help us to translate AQS --> SQL necessary to query the indexer + ISearchQueryHelper queryHelper = catalogManager.GetQueryHelper(); + + // Set the number of results we want. Don't set this property if all results are needed. + queryHelper.QueryMaxResults = maxCount; + + // Set list of columns we want to display, getting the path presently + queryHelper.QuerySelectColumns = "System.ItemPathDisplay"; + + // Set additional query restriction + queryHelper.QueryWhereRestrictions = "AND scope='file:'"; + + // convert file pattern if it is not '*'. Don't create restriction for '*' as it includes all files. + if (pattern != "*") + { + pattern = pattern.Replace("*", "%"); + pattern = pattern.Replace("?", "_"); + + if (pattern.Contains("%") || pattern.Contains("_")) + { + queryHelper.QueryWhereRestrictions += " AND System.FileName LIKE '" + pattern + "' "; + } + else + { + // if there are no wildcards we can use a contains which is much faster as it uses the index + queryHelper.QueryWhereRestrictions += " AND Contains(System.FileName, '" + pattern + "') "; + } + } + + // Set sorting order + queryHelper.QuerySorting = "System.DateModified DESC"; + + // Generate SQL from our parameters, converting the userQuery from AQS->WHERE clause + string sqlQuery = queryHelper.GenerateSQLFromUserQuery(keyword); + + // --- Perform the query --- + // create an OleDbConnection object which connects to the indexer provider with the windows application + using (System.Data.OleDb.OleDbConnection conn = new OleDbConnection(queryHelper.ConnectionString)) + { + // open the connection + conn.Open(); + + // now create an OleDB command object with the query we built above and the connection we just opened. + using (OleDbCommand command = new OleDbCommand(sqlQuery, conn)) + { + // execute the command, which returns the results as an OleDbDataReader. + using (OleDbDataReader WDSResults = command.ExecuteReader()) + { + while (WDSResults.Read()) + { + // col 0 is our path in display format + Console.WriteLine("{0}", WDSResults.GetString(0)); + var result = new SearchResult { Path = WDSResults.GetString(0) }; + + yield return result; + } + } + + } + } + + } + } +} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj index d6cd5b2a32..b164c50f57 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj @@ -1,10 +1,10 @@ - + Debug AnyCPU - 63c3cea8-51fe-472e-b97c-b58f8b17dd51 + {63C3CEA8-51FE-472E-B97C-B58F8B17DD51} Library Properties Wox.Plugin.Indexer @@ -31,24 +31,27 @@ 4 - - - - - - - - - - - - - - + + ..\..\..\..\..\packages\tlbimp-Microsoft.Search.Interop.1.0.0\lib\net45\Microsoft.Search.Interop.dll + True + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/packages.config b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/packages.config new file mode 100644 index 0000000000..6b77ac3b21 --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From ea75a56d3338f20fab0cbb9630795b608fcfcee9 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Kommuru Date: Mon, 16 Mar 2020 14:42:40 -0700 Subject: [PATCH 03/20] Added the main and settings file which declare most of the plugin interfaces --- .../Plugins/Wox.Plugin.Indexer/Class1.cs | 12 -- .../Plugins/Wox.Plugin.Indexer/Main.cs | 128 ++++++++++++++++++ .../Plugins/Wox.Plugin.Indexer/Settings.cs | 23 ++++ 3 files changed, 151 insertions(+), 12 deletions(-) delete mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/Settings.cs diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs deleted file mode 100644 index 5955ce0204..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Class1.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Wox.Plugin.Indexer -{ - public class Class1 - { - } -} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs new file mode 100644 index 0000000000..652af40c40 --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Diagnostics; +using System.Text; +using System.Threading.Tasks; +using Wox.Plugin; +using System.IO; +using System.ComponentModel; +using Wox.Infrastructure.Storage; +using Wox.Plugin.Indexer.SearchHelper; +using Microsoft.Search.Interop; + +namespace Wox.Plugin.Indexer +{ + class Main : IPlugin, ISavable, IPluginI18n + { + + // This variable contains metadata about the Plugin + private PluginInitContext _context; + + // This variable contains information about the context menus + private Settings _settings; + + // Contains information about the plugin stored in json format + private PluginJsonStorage _storage; + + // To access Windows Search functionalities + private readonly WindowsSearchAPI _api = new WindowsSearchAPI(); + + // To save the configurations of plugins + public void Save() + { + _storage.Save(); + } + + // This function uses the Windows indexer and returns the list of results obtained + public List Query(Query query) + { + var results = new List(); + if (!string.IsNullOrEmpty(query.Search)) + { + var searchQuery = query.Search; + if (_settings.MaxSearchCount <= 0) + { + _settings.MaxSearchCount = 50; + } + + try + { + var searchResultsList = _api.Search(searchQuery, maxCount: _settings.MaxSearchCount).ToList(); + foreach (var searchResult in searchResultsList) + { + var path = searchResult.Path; + + string workingDir = null; + if (_settings.UseLocationAsWorkingDir) + workingDir = Path.GetDirectoryName(path); + + Result r = new Result(); + r.Title = Path.GetFileName(path); + r.SubTitle = path; + r.IcoPath = path; + r.Action = c => + { + bool hide; + try + { + Process.Start(new ProcessStartInfo + { + FileName = path, + UseShellExecute = true, + WorkingDirectory = workingDir + }); + hide = true; + } + catch (Win32Exception) + { + var name = $"Plugin: {_context.CurrentPluginMetadata.Name}"; + var msg = "Can't Open this file"; + _context.API.ShowMsg(name, msg, string.Empty); + hide = false; + } + return hide; + }; + r.ContextData = searchResult; + results.Add(r); + } + } + catch (Exception ex) + { + results.Add(new Result + { + // TODO: Localize the string + Title = "Windows indexer plugin is not running", + IcoPath = "Images\\WindowsIndexerImg.bmp" + }); + } + } + + return results; + } + + public void Init(PluginInitContext context) + { + // initialize the context of the plugin + _context = context; + _storage = new PluginJsonStorage(); + _settings = _storage.Load(); + } + + // TODO: Localize the strings + // Set the Plugin Title + public string GetTranslatedPluginTitle() + { + return "Windows Indexer Plugin"; + } + + // TODO: Localize the string + // Set the plugin Description + public string GetTranslatedPluginDescription() + { + return "Returns files and folders"; + } + + + } +} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Settings.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Settings.cs new file mode 100644 index 0000000000..6fc9bbbf94 --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Settings.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Wox.Plugin.Indexer +{ + public class Settings + { + public List ContextMenus = new List(); + public int MaxSearchCount { get; set; } = 100; + public bool UseLocationAsWorkingDir { get; set; } = false; + } + + public class ContextMenu + { + public string Name { get; set; } + public string Command { get; set; } + public string Argument { get; set; } + public string ImagePath { get; set; } + } +} From 415b7bf4d1fc006797f1007d9985db608371895e Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Kommuru Date: Mon, 16 Mar 2020 14:45:37 -0700 Subject: [PATCH 04/20] Added references and renamed a class --- .../Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj index b164c50f57..9f5741bec6 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj @@ -45,13 +45,24 @@ - + + + + + {4fd29318-a8ab-4d8f-aa47-60bc241b8da3} + Wox.Infrastructure + + + {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} + Wox.Plugin + + \ No newline at end of file From 657a1aaed5d0910ebd088e3dab3a14ebb626d93f Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Kommuru Date: Mon, 16 Mar 2020 14:58:25 -0700 Subject: [PATCH 05/20] Added the images folder which contains the windows indexer icon --- .../Images/WindowsIndexerImg.bmp | Bin 0 -> 3772 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/Images/WindowsIndexerImg.bmp diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Images/WindowsIndexerImg.bmp b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Images/WindowsIndexerImg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..78a015715ed228d84d4a2066a2f42d7e827efbd3 GIT binary patch literal 3772 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 mc0wd{3wPp9e6wQFqW=N1$a(d|v)2s(0000 Date: Mon, 16 Mar 2020 17:25:04 -0700 Subject: [PATCH 06/20] Added the image --- .../Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj index 9f5741bec6..7f738755c1 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj @@ -64,5 +64,11 @@ Wox.Plugin + + + + PreserveNewest + + \ No newline at end of file From 248a689de2aa163d733dcb31b868fe5115d18d72 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Tue, 17 Mar 2020 06:01:05 +0530 Subject: [PATCH 07/20] Added the plugin.json file --- .../launcher/Plugins/Wox.Plugin.Indexer/plugin.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/modules/launcher/Plugins/Wox.Plugin.Indexer/plugin.json diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/plugin.json b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/plugin.json new file mode 100644 index 0000000000..741c57ddcc --- /dev/null +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/plugin.json @@ -0,0 +1,12 @@ +{ + "ID": "2140FC9819AD43A3A616E2735815C27C", + "ActionKeyword": "*", + "Name": "Windows Indexer", + "Description": "Search for files and folders", + "Author": "??", + "Version": "1.0.0", + "Language": "csharp", + "Website": "http://www.wox.one/plugin", + "ExecuteFileName": "Wox.Plugin.Indexer.dll", + "IcoPath": "Images\\WindowsIndexerImg.bmp" +} From 9a84fc5b470e0dd5d6381aa26cdfb1d9f4e6a409 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Tue, 17 Mar 2020 06:01:34 +0530 Subject: [PATCH 08/20] Minor changes in project files --- .../msi_to_msix_upgrade_lib/msi_to_msix_upgrade_lib.vcxproj | 4 ++-- .../launcher/Wox.Infrastructure/Wox.Infrastructure.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/msi_to_msix_upgrade_lib/msi_to_msix_upgrade_lib.vcxproj b/src/common/msi_to_msix_upgrade_lib/msi_to_msix_upgrade_lib.vcxproj index baa4a66427..767a9d12c0 100644 --- a/src/common/msi_to_msix_upgrade_lib/msi_to_msix_upgrade_lib.vcxproj +++ b/src/common/msi_to_msix_upgrade_lib/msi_to_msix_upgrade_lib.vcxproj @@ -87,7 +87,7 @@ Use - Level4 + Level3 true true true @@ -129,7 +129,7 @@ Use - Level4 + Level3 true _DEBUG;_LIB;%(PreprocessorDefinitions) true diff --git a/src/modules/launcher/Wox.Infrastructure/Wox.Infrastructure.csproj b/src/modules/launcher/Wox.Infrastructure/Wox.Infrastructure.csproj index 158a6848a4..0b0a7db25c 100644 --- a/src/modules/launcher/Wox.Infrastructure/Wox.Infrastructure.csproj +++ b/src/modules/launcher/Wox.Infrastructure/Wox.Infrastructure.csproj @@ -107,8 +107,8 @@ - xcopy /Y $(PkgPinyin4DotNet)\pinyindb\unicode_to_hanyu_pinyin.txt $(TargetDir)pinyindb\ - xcopy /Y $(PkgNLog_Schema)\content\NLog.xsd $(TargetDir) + xcopy /Y "$(PkgPinyin4DotNet)\pinyindb\unicode_to_hanyu_pinyin.txt" "$(TargetDir)pinyindb\" + xcopy /Y "$(PkgNLog_Schema)\content\NLog.xsd" "$(TargetDir)" SQL necessary to query the indexer - ISearchQueryHelper queryHelper = catalogManager.GetQueryHelper(); + queryHelper = catalogManager.GetQueryHelper(); // Set the number of results we want. Don't set this property if all results are needed. queryHelper.QueryMaxResults = maxCount; @@ -85,9 +86,13 @@ namespace Wox.Plugin.Indexer.SearchHelper // Set sorting order queryHelper.QuerySorting = "System.DateModified DESC"; + } - setQueryHelper(ref queryHelper, pattern); - + public IEnumerable Search(string keyword, string pattern = "*", int maxCount = 100) + { + ISearchQueryHelper queryHelper; + InitQueryHelper(out queryHelper, maxCount); + ModifyQueryHelper(ref queryHelper, pattern); return ExecuteQuery(queryHelper, keyword); } } diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj index c4c78bf4d4..1a7bdbe8c7 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Wox.Plugin.Indexer.csproj @@ -9,9 +9,10 @@ Properties Wox.Plugin.Indexer Wox.Plugin.Indexer - v4.7.2 + v4.5.2 512 true + true diff --git a/src/modules/launcher/Wox.Test/Plugins/WindowsIndexerTest.cs b/src/modules/launcher/Wox.Test/Plugins/WindowsIndexerTest.cs new file mode 100644 index 0000000000..9df2aa5892 --- /dev/null +++ b/src/modules/launcher/Wox.Test/Plugins/WindowsIndexerTest.cs @@ -0,0 +1,145 @@ +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Data.OleDb; +using Microsoft.Search.Interop; +using Wox.Plugin.Indexer.SearchHelper; + +namespace Wox.Test.Plugins +{ + + [TestFixture] + public class WindowsIndexerTest + { + private WindowsSearchAPI _api = new WindowsSearchAPI(); + + [Test] + public void InitQueryHelper_ShouldInitialize_WhenFunctionIsCalled() + { + // Arrange + int maxCount = 10; + ISearchQueryHelper queryHelper = null; + + // Act + _api.InitQueryHelper(out queryHelper, maxCount); + + // Assert + Assert.IsNotNull(queryHelper); + Assert.AreEqual(queryHelper.QueryMaxResults, maxCount); + } + + [Test] + public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternIsAsterisk() + { + // Arrange + ISearchQueryHelper queryHelper; + String pattern = "*"; + _api.InitQueryHelper(out queryHelper, 10); + + // Act + _api.ModifyQueryHelper(ref queryHelper, pattern); + + // Assert + Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("LIKE")); + Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); + } + + [Test] + public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsAsterisk() + { + // Arrange + ISearchQueryHelper queryHelper; + String pattern = "tt*^&)"; + _api.InitQueryHelper(out queryHelper, 10); + + // Act + _api.ModifyQueryHelper(ref queryHelper, pattern); + + // Assert + Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); + Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); + } + + [Test] + public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsPercent() + { + // Arrange + ISearchQueryHelper queryHelper; + String pattern = "tt%^&)"; + _api.InitQueryHelper(out queryHelper, 10); + + // Act + _api.ModifyQueryHelper(ref queryHelper, pattern); + + // Assert + Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); + Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); + } + + [Test] + public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsUnderScore() + { + // Arrange + ISearchQueryHelper queryHelper; + String pattern = "tt_^&)"; + _api.InitQueryHelper(out queryHelper, 10); + + // Act + _api.ModifyQueryHelper(ref queryHelper, pattern); + + // Assert + Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); + Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); + } + + [Test] + public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternContainsQuestionMark() + { + // Arrange + ISearchQueryHelper queryHelper; + String pattern = "tt?^&)"; + _api.InitQueryHelper(out queryHelper, 10); + + // Act + _api.ModifyQueryHelper(ref queryHelper, pattern); + + // Assert + Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("LIKE")); + Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("Contains")); + } + + [Test] + public void ModifyQueryHelper_ShouldSetQueryHelper_WhenPatternDoesNotContainSplSymbols() + { + // Arrange + ISearchQueryHelper queryHelper; + String pattern = "tt^&)bc"; + _api.InitQueryHelper(out queryHelper, 10); + + // Act + _api.ModifyQueryHelper(ref queryHelper, pattern); + + // Assert + Assert.IsFalse(queryHelper.QueryWhereRestrictions.Contains("LIKE")); + Assert.IsTrue(queryHelper.QueryWhereRestrictions.Contains("Contains")); + } + + [Test] + public void ExecuteQuery_ShouldDisposeAllConnections_AfterFunctionCall() + { + // Arrange + ISearchQueryHelper queryHelper; + _api.InitQueryHelper(out queryHelper, 10); + _api.ModifyQueryHelper(ref queryHelper, "*"); + string keyword = "test"; + + // Act + _api.ExecuteQuery(queryHelper, keyword); + + // Assert + Assert.IsNull(_api.conn); + Assert.IsNull(_api.command); + Assert.IsNull(_api.WDSResults); + } + } +} diff --git a/src/modules/launcher/Wox.Test/Wox.Test.csproj b/src/modules/launcher/Wox.Test/Wox.Test.csproj index 1de1a7880b..e656fca226 100644 --- a/src/modules/launcher/Wox.Test/Wox.Test.csproj +++ b/src/modules/launcher/Wox.Test/Wox.Test.csproj @@ -38,6 +38,7 @@ + @@ -45,10 +46,15 @@ + + + {63c3cea8-51fe-472e-b97c-b58f8b17dd51} + Wox.Plugin.Indexer + {B749F0DB-8E75-47DB-9E5E-265D16D0C0D2} Wox.Core @@ -72,6 +78,9 @@ 3.15.1 + + 1.0.0 + - \ No newline at end of file diff --git a/src/modules/launcher/Plugins/HelloWorldCSharp/Images/app.png b/src/modules/launcher/Plugins/HelloWorldCSharp/Images/app.png deleted file mode 100644 index 8c9ca7971a62d99905b25ef3fb3e435e1d1ceaca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11524 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 diff --git a/src/modules/launcher/Plugins/HelloWorldCSharp/Main.cs b/src/modules/launcher/Plugins/HelloWorldCSharp/Main.cs deleted file mode 100644 index 4f17cd43d7..0000000000 --- a/src/modules/launcher/Plugins/HelloWorldCSharp/Main.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Wox.Plugin; - -namespace HelloWorldCSharp -{ - class Main : IPlugin - { - public List Query(Query query) - { - var result = new Result - { - Title = "Hello World from CSharp", - SubTitle = $"Query: {query.Search}", - IcoPath = "app.png" - }; - return new List {result}; - } - - public void Init(PluginInitContext context) - { - - } - } -} diff --git a/src/modules/launcher/Plugins/HelloWorldCSharp/Properties/AssemblyInfo.cs b/src/modules/launcher/Plugins/HelloWorldCSharp/Properties/AssemblyInfo.cs deleted file mode 100644 index 39677ff22d..0000000000 --- a/src/modules/launcher/Plugins/HelloWorldCSharp/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("HelloWorldCSharp")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("HelloWorldCSharp")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("03ffa443-5f50-48d5-8869-f3df316803aa")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/modules/launcher/Plugins/HelloWorldCSharp/plugin.json b/src/modules/launcher/Plugins/HelloWorldCSharp/plugin.json deleted file mode 100644 index b7edbd6a9a..0000000000 --- a/src/modules/launcher/Plugins/HelloWorldCSharp/plugin.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "ID":"CEA0FDFC6D3B4085823D60DC76F28844", - "ActionKeyword":"hc", - "Name":"Hello World CSharp", - "Description":"Hello World CSharp", - "Author":"happlebao", - "Version":"1.0.0", - "Language":"csharp", - "Website":"https://github.com/Wox-launcher/Wox", - "ExecuteFileName":"HelloWorldCSharp.dll", - "IcoPath":"app.png", - "Disabled": true -} \ No newline at end of file diff --git a/src/modules/launcher/Plugins/HelloWorldPython/Images/app.png b/src/modules/launcher/Plugins/HelloWorldPython/Images/app.png deleted file mode 100644 index 8c9ca7971a62d99905b25ef3fb3e435e1d1ceaca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11524 zcmch7RZt#HwC&&)+#$FJclQw7?Ze&O-3jjQ?iL^fcPBUm3GVI$KAg*cpYOx1^KhoB zYftyQ%$Dj}d#xR*q#%imNPq|c0J5~yR}}z&_;`f?;9)iBD5sHC=?AtWaxVYq6QW=dXAL(VDJK>RBpsh0d1>=XjFuDw7M?O z1<6|ZFF)_g^YiDW=gz~N!Tn3AOXh(CQ6Kv?e~y&C2CE8G!fV$$2dfSNKgSrnbbzH zfKfc4UiGIbB9H)qusgvolbL?2HsWSu~H&yf|U~l`t{LuFD-%!z;&6NYW5ZU$STW1U;G=QcseYs+=zrP6OI08}c z)?-tt1FUEOmYa`y?5hX`+K4mWkI`N{FCxTwg-W9WM4u6nkj|-$3%gi$qlMntw;i^k z{qH}%zO8y+0Zv&WnYF#eA+JtG_U?5mafjp3VyyPyLyEVN?*XrIbhA4g4Y~~2QP-fz zRwZ)z5wA9t#IIyysXG|Q0c_VKX|D*$9>_pVm}0L&Gu*Fn+g|?*2*_v@(40FU;(yB+ zLx7YBpjmLRd4T~Sx#uxngdPHzOfT65fX*X4-HH@kxnXz!_*xM3rCt>7Qy*4MFG@}y zQD-kMq!H{_kx!Jp0%&5edx4)33-QuK@zr|ymZ5*uLlG39XKkZ3^|A6GA8ujj2Aw+M z!W!b`_2YGhAwY|c!ebhd@kO8;$1Rgj!Q*DeL6aLvaU=znkRC^1DU%P4I+s9JidiS> zNm1M|I%Dz1>WVxitd5ehMZH9IO0uQ|H7Y~>fpimTs~{nW8ZK~|b>%?S3rs7rnI&i< z77T1IDxZ}-a&razqT);fXIW9qWBwZH#)L~4MuG^aM{rE`L7W=#oF+sdZg*_L-aMmA zcuL6VK+H3E{ZO=i+u(!*Nst^!yn^bCq6woNUK1fCl(nCRJh?)#iOL(}anRG4uOR{S zt%mx7jF>EsN}mP=(;!)j5@jrDPXUpPDuGQJN!mtgRf@4hwM1wR%_>KZ`ZU3AY-10; zF|dX-J+UPLH9;}yd2C>>1&ePeVn+_4h*G5_1w)3@On4uGMiuZ4h%oN!a@{|uF6r(U>!=iPqd98mf_loyQ_lohk z^EuA>>B^;>W3EUpL+%})9Us^Yp`EK;x&3?ls@wF5(7eg1*D=D~?>m&^^;yX~yMM)Z zxF?s3m$M|?EFAD$3HY|GJSJBY2_{E28CI>cSE1V#=;M~{iG!BKv(m*ht<)Fc7Q39D zxI*SN4xf!{I5y1IYy^yqt=Lve21|zay6GlUY_iPTXPf3-CniQ2)@qh(#?In+7jkU! zjJp4JuD-;6FO|p{l8NSu9!XnC^BsptlTQQJWM~L!cxl{eEY(Oa>Yg&3+AV6@DiLaC zf6C^|9&fIw&8{7E&$ipd+QEvao1?o^wO?U9dpScq%Q}NS=e;+&r@FVhpC+34j6t-> z@5=A%?CLh*ZtK{2TC&YCP&rsRaI9%TXi?~rd&`MiCYvyhk?x+3t7=ysRc@c}J)XKx zaM3>ZYyPe{yCZw8_OIQa^$Ectzv^dsrfkA7y#c{X(SKK9(2mo@Zf<#YdH-#~A+x@_ zzLx%T7qQ~c9O}G97Q4~aL7lCxaUVlIAwjdJsbeUiVIjzT@BHxYvTpKC!EOrwMgL5H zxR<gFp+@$L2Iu+^%BVewUjqZc?dJLcx(^uAukS!PD_d${&w<6 zffS76+m%qS)LQ>@xz$tadW*bAq63E_S{2uWiB(Uf-PF_SYR+%ma=bC^RcQyLqJCrT zwRRJy5;9j>Do!7)$&p%_GB$2s_fNac1luUpRQ=LAeL+Vf;0tc5L5*WgMcqUFx7LFl zO$CDm-#ah6m6Z*dmfz>6Ql}-S_BCLwo*yz@)}jkDVOPktgx9hAga&pp8?J@k)^~A} zO_RSTp*W2=&vho6YgTUxxr*<-a|86oHC}70Te|;JuPpYgd-&X#?>X>aZxEp40eI|o<1k+Ds?+fwIoNoWsztU|uuf3Y-|=-@>W7ZQsTp|u zTvMRV^`HDH|Lo;_z>{_Fg3Hpw5|duOSJ&n68DWb(_4?;ls`k4F_xp2P55x<(H9hZm z&mS+{E3YSTPpBsWO>Yfmy>?p?mWv*gI<=ekRGF_d+NL@Z=ElzD}V5fP>hgt zPI(Dlm%Y?Zt@>TIUbb(JbdhAzzKFaj-OfIljFitPf`tx!-(Hx(p|{UebNTEaXp_`L zN<|(3yr}>nFa!V|-#_dz0JyOLz=h$aR>8ma`qlVJg3|9{)iFB-+dq|z!P;K`MTuX#kY35HsLbau69 zR5Ga+l_f^__nhhq46KSQ#Sk?*s}l|Bfrf+OMZfaySCIhH9*d^DaMK4kS9p=x)qsd3 z@~(8*gzidFeZvN=c}guv4uC;UY#1X6S_%UzUNVT9Xp!=cXe_?xtnH<4;4lZkdfo2e z+QZ!-wYgbu)XSrgX5)|uDy#5CAI-pp95W6wO)d2H%dM*FK3MWaz3e%=xN#8!qBi`T z%ZA8=$+c?6DW!u?Ze3;&@GY6f*eE-&t$SM3)tkbbR2Mm^TGkJcbRaT1j3#4os?VLG z*Yj$;J3kwVeLYB#fHlRh+I$b2KJD;(k6K_fq5&ib^B;nS%mYA4l+_2CJXN7bU*qb< zkHKe)TWy68M zWhEg4$|=%}AqdGvi=~v#c?r!3J-O~D z*l+D!oqsPl-Z5T8mG`+5>Y)5foP55BRriR%ssrttV7C~M-Ew_AF0KNQ?gmzL$*D0h8@tDc_8X~MG*L9?T z)ZAm1*a!(3g)zkP8IIJPIvE*&{-sRo^SvqcJsO*ec_1Rv9ulxC#6196@OuvCGrHKf z8F(diOA-I=@SaHo2$Dd7XmPPoDa1fn=_D1iAB;Z#U_|DOK@%YfiFZ&^?$wmyk$7$p z38Xqa!{`3+FnMO(|vr;rr2(Nk9qzZsJAENGZPR6_or?U$b_nh96q? ziVaWFyU47XJ0t=#L`1{#RR=FUE0urFl^~AvaL%6Xg!I&KU73t;kLy4N$%Ow_6RDS`&O60} zD_m}bVUiZD+g(@f^BZUN%%8(mN-Yq;#qs$tTdrRR01W*m3ll6QMb!j$h?Lte9%U|U zDKkO6CSmO8I93na$G6Y*u@EBv9%&NJ14{0fgtlgS&u$L+XW(D!H+o%}CLo z&cF+LncuL#Te9cE5P~5c2Ny=QaDpcy6^0ofZP zQ6eNACrWE7rO(|>6(H3-VOBOAuZFSW4b;E02*!|G_B*ynrOZ{7+d*`=+nL{&jQp)H zaBp;t&(K?ao=QFKwtGUqB7hSZ5bo{QmDj;vwa!Ob3n}lDQaTfkLSiaB3r}VE=zzk( z7Iq6`uf=~x$@7gxm<{F^RmzG+NYW6?`_}NI0$Ic+FXMu&)MkI){mX47tp8le669AE zj4h35;fhhN4CRjO=3ci7@TNmLa@qN#T6e65G}{w918&~$A)-O-qO@Iq&-eFGIgM@6 z+v^mG_Cs{Vn!j9ibG;_owarF`=#IvGp!P|5EHJ>>|~it&)E1%~nT%8m20;PSaW0q13le3Fy= z3gv`A@r$l(0JnSdl5val)E}N)NR|}|U2zSdx%FiB6ihBN;sxLk8Kv zV{hZID?#^YY)oaCO6vl@UZA35^-J*7&Tp6O!M5-gQtQ z#^clmtD@+RQn-O??z))%RU*O|&fp3JGOzJKDRfeX@B@vMMpX#R&P4@)8rTD-_VOpu ztY`O;wQd$G)zNMa0ef6rkvDcsQ$fmq6(A?SNe#o}Di66(jNKrMtjSFpb)LyA5Wku(wwWIp}55=0Go& z9CMeY8!J7ojqYjWUwbDnM5#wUZa$N5t)lvs*rX_8uTqM8i`e|}oNOGt9DrD~lSpFo zvOmsh3BhAlov{0J9W#fq*TGb7=*NM6;cB)W>?{`?ah^}96*-HrlW*_oL#g!BcayPJ z>HZ~qD_Y5rmUKuKto108TEF%73uy#LgnCk=PC7eeELugFZk5k?FbXhtdZ`72*_X{m{Z1YzP%{X;Hk=RnB%FE(X# z=bQx68BCUa95Ai(tXLj$AUurKf{%al7xXCIRjN@wh$1BmVQRTL>Y8!+*4jQJ z5<}#Ry;hP|!8mfcV>*E?d(+(e5zWl->JBv49sDyZo3+myoy(?c{7#95hwp{HaDM>A zGE<&ibh;yW-NYmsUD2x6Hbgj|61? z{pd$F4?C0HvQ2k7H|lXPdWlaKeZ!BARLFvK;{0xw*-u1y53+8y>k(|~TSNGt64S@_ zk2x7(4L@pvNh;s+Wb=Kg$}c4B{^HzzsJ3HM#4o-zaDSL`yAa<1#nV9y>MD5->~@)> zo5+itMi$DtiXL0-VuAFUR%P|@8mULd-O?`x=<|i|oX;%eo^}d8*k5N?oM5~YFv*OM*!}$pWv|)Qf?F-S z5jIZo##G9`+rZ{^RXQ8h6j_h(gy7DR%aLQrVGbkWu+ed(v8BFC4L5Xcmdx175@;q; zXb8ytlqT!Nq%d(ZYWKoPD5~^)TE_W@1fpT=_FvO}!Krf1v3mIRLSBM5Dp7Idv0FHh z?fN|}H$REJl@K1-;F_Z>>_D*0TrxS^WLRRKtk-&c`&BVa%g&y?+ALzw}Mp zu9fdRT4RpUOF|4idA-~JrLK|3^e~O{GjxG;`52*Hv`E@OWER=ZzGf*de2y5;JyBj&dOG>AP0tQ&kEAh)w_OsFl0wJ{~li?6L@H`HA$p z)G`9(oK0!s6t=uH{iCYY4}AKNH+4?0l~m8eE2)_+0aGwlfJ!>PJ*Yy|r}!F$+9Oa8 z!HwM$^j<57g=Mj*!&%zDq@QFgU~c61>w(o(b!Ws+V?bD?d8?W35NX|`q!>ame+75$ z|K^W3u%^;VJOgYXolU9xa+@5sOMB{O)Y2gh-Y$)Hg|3&2i@}`g+_S-W?>J- zA5=ReBnZo^e@AhogjL<|`@sgn>htyYpJ0UlmNJLBxT};oGCWtgHuMvIxHHKIRos1) zkG5I(P*S+o6r3rpt(_Hy3ZuxY;4zHvpErIfkr`*Q(4A!vYM`hSb9#G-sQ11%tEgnx zuM!Ih^cGk0l-+*nL~x>mQs|aWbfT3)qhC{+b4E0?P}^W!XuEJ-`3z!cC3I{k5U*=n zT3!+sCjXXx>k=Lm!`IcRri%DuhvdE;K3bkfA%M1-`}C(Z(_{uY7H50yHS~sc9ej8t zHZdds5V{iM;utk-cP=w`AAuFRK+BI{?Yl$z<})Ym<0)AX)0J5drBSCN?+srFFEFk` zb8=IZ4sMQL#?$m^Z|K&Zz-5`Te*w~42;v8RWa*@>7C&77iOk(*tL>KrHmvGI(lzss z`A-=nx2jTnx6j*l>!^Lts-D+++~|ZjPIUutOZPqzj`;g0wf?N%C;%qp(3o`=PQh^x zZ+A4c>S9Y~nT`am*_$DA_u8tf?zFYCm)JDXmD(%^VhkhYef> zlui$w(s@+04}Zo7&R|VXXtlli4cW$^iOi;DR!_e9=6JYs6{(U=kxiCh=GeS=QfD5A3%ygt*K5v`V0ehp12lz$=yB?#I_JI~w`I)=B3^+(JkDbNq8R7S~xwI31>d zG^k*gcKm9j@UPeD?PpQ)cg&=JOu|#&6xZIn7qgW4o5V_TBdHMp;HC1SzOegT(-)-L z4Ye%=LJ;|gvwiL_h>M&Xsu#xtjP3LQlk-`l5N>yvdQPr@gsK6UU<47s)!{pV_Vj&> z{)u(WB=OR6BQrTCHU>ifOsvmN8kwNE<3zF~o)hr-<|LSnwf*_pg80NrGIOfY zsH$vxY_d=0zxS$dsg`(n zik-xUSjg`2n+T5#0!)4x^8FlO^EM-I{6t)fbJaL-BBBt}ogC3< zjKRtdPeY&zgl&Nw!Y}+h(c|1Xj+`M=!EQyZr7~a_>cLWD`EA6SJnux5`9I;cMARU_ zKVIpvHf0pAMsAES^*R@Q@Qb|o^=)N3spw&YJqG0(mk|VvA?3AA)^<#55YJ5EW?ypy zS$%EsaU_2K9XzllqQfXa9hqmToE$Kg$^PZ^9XoSg@}-U2Om3hbK>e1Po)ztzT!cXf z1arWWiJHl-(yfDiXS@-+D7F|@(F03a@fd?6za;O@*R!~YR1CX|wVWr8LEJ3n(A=J-{ zEM!j-aay7lSXR=KaOSbxf$xtTskJHbxy>g(C$hdO_en%FMdi+V&aDT_!+J<`=kh|O zo651)zK*k(Q_P+e05Q<&)Wos1)&xSw@N1At9LTE#A<3MF$}gZz;|m8|56;sn`%cQ@ z-WjLEqGTt1nYydH9>M0JnOi1lym%etnrAp&1(01U?PZF>76#$ zGe7Z)DA&s5gu3RNjxPY90}bX~^YH}mbh2XtjAYxj<(y=4C)?X8M2~xr`Cv|~A0=8@ zga-b(Q)&^lIxL#?E3_hdAYJg^JM~V>)~{U8oMA`cI4)Oag$ebbX2l($l}{Qy9I+t= zlCHzbn&cDjwGfWWTTM@yyPO^@fm`dTq{f8#`3PrADALILjR!(p>UtYXKC9Ba&r4LZ zDAeQ0_{AfE&jK`$wq}FsWiW`d+CEt+4@eT+(+j=$Zf-h`NltIS`CT5boakk8Qq=fD zY|{hOp2P8N1hadm?4^R{p(lA`&1G9@yDK&95o1OTI~L!^9pz8H4ov4^V8;tjb-=a- z|3W+Q(QWm)cRWzPhjIUg(;H8;pBh| zQk|r^Yw*=x&ree#1$^4p>)4n|5Lx}ukt+7f&DOUw9(rtVRUhQ4jv*JNx-q&>*{uNm zFiSZ9B)#|cjnC}vZLbx({acr#G53o6+A~Q6tOGOGB5_|T?@!lti$v3!Jb#4lJcH19 zg5THnyH1~p_G)@RctS7q20YyDuL^1c8fMcNLhoA>V+JI>vySCji8;}$NK9Dm_tyg? zJH?{S(%`0?k5)_h?;t!)UVZ>$TpNM%>ZzF94zeWa6b_)UlDVQ zFekEM&8d=;jWg-`d&pH7D&N*C-}5103LX`PlkrH9$8kV7D}C2mM**Up3-|U_FF=h*?82c@ZnG5c0>hl7O2X z^TAk&C->Bq4}1iiMF>im5o`5=|G;`soFA zKy*5P@uX?B1~zJhXgzDggg>uZ)AlpswPKU_JNeT4H+l$aKTW)9d#MZSS1pH}x_8D{ zAS=Agzj!}k6w>z0`@LlkWPe|Jg}Uz9?{M9R&v`tvP(0(P?Oe^k4kWS*I=pnK;*Yvx zOck};d|x0M#*`Ei3orK=H5;WU&AxIr(HgzK4JZ25YII2N`QspgZt*|5y8Gv@dQBxm z*mQ}s(nm>rx7tY!ee-r^=4!&P-f5~Ug;XSZ1Zn150(pEl4cmOM=9p46k?+hf6p=0@_P(sO_wT=0!y|j zKC~~2aLRE&Y2W@nH9QcefJmiNNLV5;0UbNA5tF;tJ-!_P?Q}kKN(g?@X)6>N9i;^d zsyqi$7D8u9mc8D3z|vXG`i&qSmQZM)3msG1*A1M7&1Wa6kGa2xn%~j>@k@+jy0B;% zY7q6>h1Q-no4-l&5b+_FdtC3()s+p>&$;5z$V7FXWtF-1zV?Gd#gcp8jk6Ko}c5^9+)pQ7b8vdWatFmg%7@ZGfjtT2JaM9>6`N`Ykpyem;VJ@&gZVuQnJRqOFqqEfzm2y z$SA$AD*p|l>Zy`g32QVX;~e8-uE6wh{*eMAYFZOcUFQFQxsD^k@XFw*X+copRvBBU%jjc%&s1zSfBu2LB(F!ORT+ diff --git a/src/modules/launcher/Plugins/HelloWorldPython/main.py b/src/modules/launcher/Plugins/HelloWorldPython/main.py deleted file mode 100644 index e7b7edfc24..0000000000 --- a/src/modules/launcher/Plugins/HelloWorldPython/main.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from wox import Wox - -class HelloWorld(Wox): - - def query(self, query): - results = [] - results.append({ - "Title": "Hello World", - "SubTitle": "Query: {}".format(query), - "IcoPath":"Images/app.ico", - "ContextData": "ctxData" - }) - return results - - def context_menu(self, data): - results = [] - results.append({ - "Title": "Context menu entry", - "SubTitle": "Data: {}".format(data), - "IcoPath":"Images/app.ico" - }) - return results - -if __name__ == "__main__": - HelloWorld() \ No newline at end of file diff --git a/src/modules/launcher/Plugins/HelloWorldPython/plugin.json b/src/modules/launcher/Plugins/HelloWorldPython/plugin.json deleted file mode 100644 index a928a5ae5b..0000000000 --- a/src/modules/launcher/Plugins/HelloWorldPython/plugin.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ID":"2f4e384e-76ce-45c3-aea2-b16f5e5c328f", - "ActionKeyword":"h", - "Name":"Hello World Python", - "Description":"Hello World", - "Author":"happlebao", - "Version":"1.0", - "Language":"python", - "Website":"https://github.com/Wox-launcher/Wox", - "IcoPath":"Images\\app.png", - "ExecuteFileName":"main.py" -} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Bookmark.cs b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Bookmark.cs deleted file mode 100644 index 700f253e8f..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Bookmark.cs +++ /dev/null @@ -1,58 +0,0 @@ -using BinaryAnalysis.UnidecodeSharp; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -namespace Wox.Plugin.BrowserBookmark -{ - public class Bookmark : IEquatable, IEqualityComparer - { - private string m_Name; - public string Name - { - get - { - return m_Name; - } - set - { - m_Name = value; - PinyinName = m_Name.Unidecode(); - } - } - public string PinyinName { get; private set; } - public string Url { get; set; } - public string Source { get; set; } - public int Score { get; set; } - - /* TODO: since Source maybe unimportant, we just need to compare Name and Url */ - public bool Equals(Bookmark other) - { - return Equals(this, other); - } - - public bool Equals(Bookmark x, Bookmark y) - { - if (Object.ReferenceEquals(x, y)) return true; - if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null)) - return false; - - return x.Name == y.Name && x.Url == y.Url; - } - - public int GetHashCode(Bookmark bookmark) - { - if (Object.ReferenceEquals(bookmark, null)) return 0; - int hashName = bookmark.Name == null ? 0 : bookmark.Name.GetHashCode(); - int hashUrl = bookmark.Url == null ? 0 : bookmark.Url.GetHashCode(); - return hashName ^ hashUrl; - } - - public override int GetHashCode() - { - return GetHashCode(this); - } - } -} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/ChromeBookmarks.cs b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/ChromeBookmarks.cs deleted file mode 100644 index 16e5c328cb..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/ChromeBookmarks.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -namespace Wox.Plugin.BrowserBookmark -{ - public class ChromeBookmarks - { - private List bookmarks = new List(); - - public List GetBookmarks() - { - bookmarks.Clear(); - LoadChromeBookmarks(); - - return bookmarks; - } - - private void ParseChromeBookmarks(String path, string source) - { - if (!File.Exists(path)) return; - - string all = File.ReadAllText(path); - Regex nameRegex = new Regex("\"name\": \"(?.*?)\""); - MatchCollection nameCollection = nameRegex.Matches(all); - Regex typeRegex = new Regex("\"type\": \"(?.*?)\""); - MatchCollection typeCollection = typeRegex.Matches(all); - Regex urlRegex = new Regex("\"url\": \"(?.*?)\""); - MatchCollection urlCollection = urlRegex.Matches(all); - - List names = (from Match match in nameCollection select match.Groups["name"].Value).ToList(); - List types = (from Match match in typeCollection select match.Groups["type"].Value).ToList(); - List urls = (from Match match in urlCollection select match.Groups["url"].Value).ToList(); - - int urlIndex = 0; - for (int i = 0; i < names.Count; i++) - { - string name = DecodeUnicode(names[i]); - string type = types[i]; - if (type == "url") - { - string url = urls[urlIndex]; - urlIndex++; - - if (url == null) continue; - if (url.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) continue; - if (url.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) continue; - - bookmarks.Add(new Bookmark() - { - Name = name, - Url = url, - Source = source - }); - } - } - } - - private void LoadChromeBookmarks(string path, string name) - { - if (!Directory.Exists(path)) return; - var paths = Directory.GetDirectories(path); - - foreach (var profile in paths) - { - if (File.Exists(Path.Combine(profile, "Bookmarks"))) - ParseChromeBookmarks(Path.Combine(profile, "Bookmarks"), name + (Path.GetFileName(profile) == "Default" ? "" : (" (" + Path.GetFileName(profile) + ")"))); - } - } - - private void LoadChromeBookmarks() - { - String platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - LoadChromeBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome"); - LoadChromeBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary"); - LoadChromeBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium"); - } - - private String DecodeUnicode(String dataStr) - { - Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})"); - return reg.Replace(dataStr, m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); - } - } -} \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Commands/Bookmarks.cs b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Commands/Bookmarks.cs deleted file mode 100644 index 049b8f1668..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Commands/Bookmarks.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Wox.Infrastructure; - -namespace Wox.Plugin.BrowserBookmark.Commands -{ - internal static class Bookmarks - { - internal static bool MatchProgram(Bookmark bookmark, string queryString) - { - if (StringMatcher.FuzzySearch(queryString, bookmark.Name).IsSearchPrecisionScoreMet()) return true; - if (StringMatcher.FuzzySearch(queryString, bookmark.PinyinName).IsSearchPrecisionScoreMet()) return true; - if (StringMatcher.FuzzySearch(queryString, bookmark.Url).IsSearchPrecisionScoreMet()) return true; - - return false; - } - - internal static List LoadAllBookmarks() - { - var allbookmarks = new List(); - - var chromeBookmarks = new ChromeBookmarks(); - var mozBookmarks = new FirefoxBookmarks(); - - //TODO: Let the user select which browser's bookmarks are displayed - // Add Firefox bookmarks - mozBookmarks.GetBookmarks().ForEach(x => allbookmarks.Add(x)); - - // Add Chrome bookmarks - chromeBookmarks.GetBookmarks().ForEach(x => allbookmarks.Add(x)); - - return allbookmarks.Distinct().ToList(); - } - } -} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/FirefoxBookmarks.cs b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/FirefoxBookmarks.cs deleted file mode 100644 index 7686501cd7..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/FirefoxBookmarks.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data.SQLite; -using System.IO; -using System.Linq; - -namespace Wox.Plugin.BrowserBookmark -{ - public class FirefoxBookmarks - { - private const string queryAllBookmarks = @"SELECT moz_places.url, moz_bookmarks.title - FROM moz_places - INNER JOIN moz_bookmarks ON ( - moz_bookmarks.fk NOT NULL AND moz_bookmarks.fk = moz_places.id - ) - ORDER BY moz_places.visit_count DESC - "; - - private const string dbPathFormat = "Data Source ={0};Version=3;New=False;Compress=True;"; - - /// - /// Searches the places.sqlite db and returns all bookmarks - /// - public List GetBookmarks() - { - // Return empty list if the places.sqlite file cannot be found - if (string.IsNullOrEmpty(PlacesPath) || !File.Exists(PlacesPath)) - return new List(); - - var bookmarList = new List(); - - // create the connection string and init the connection - string dbPath = string.Format(dbPathFormat, PlacesPath); - using (var dbConnection = new SQLiteConnection(dbPath)) - { - // Open connection to the database file and execute the query - dbConnection.Open(); - var reader = new SQLiteCommand(queryAllBookmarks, dbConnection).ExecuteReader(); - - // return results in List format - bookmarList = reader.Select(x => new Bookmark() - { - Name = (x["title"] is DBNull) ? string.Empty : x["title"].ToString(), - Url = x["url"].ToString() - }).ToList(); - } - - return bookmarList; - } - - /// - /// Path to places.sqlite - /// - private string PlacesPath - { - get - { - var profileFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Mozilla\Firefox"); - var profileIni = Path.Combine(profileFolderPath, @"profiles.ini"); - - if (!File.Exists(profileIni)) - return string.Empty; - - // get firefox default profile directory from profiles.ini - string ini; - using (var sReader = new StreamReader(profileIni)) { - ini = sReader.ReadToEnd(); - } - - /* - Current profiles.ini structure example as of Firefox version 69.0.1 - - [Install736426B0AF4A39CB] - Default=Profiles/7789f565.default-release <== this is the default profile this plugin will get the bookmarks from. When opened Firefox will load the default profile - Locked=1 - - [Profile2] - Name=newblahprofile - IsRelative=0 - Path=C:\t6h2yuq8.newblahprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code. - - [Profile1] - Name=default - IsRelative=1 - Path=Profiles/cydum7q4.default - Default=1 - - [Profile0] - Name=default-release - IsRelative=1 - Path=Profiles/7789f565.default-release - - [General] - StartWithLastProfile=1 - Version=2 - */ - - var lines = ini.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList(); - - var defaultProfileFolderNameRaw = lines.Where(x => x.Contains("Default=") && x != "Default=1").FirstOrDefault() ?? string.Empty; - - if (string.IsNullOrEmpty(defaultProfileFolderNameRaw)) - return string.Empty; - - var defaultProfileFolderName = defaultProfileFolderNameRaw.Split('=').Last(); - - var indexOfDefaultProfileAtttributePath = lines.IndexOf("Path="+ defaultProfileFolderName); - - // Seen in the example above, the IsRelative attribute is always above the Path attribute - var relativeAttribute = lines[indexOfDefaultProfileAtttributePath - 1]; - - return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 - ? defaultProfileFolderName + @"\places.sqlite" - : Path.Combine(profileFolderPath, defaultProfileFolderName) + @"\places.sqlite"; - } - } - } - - public static class Extensions - { - public static IEnumerable Select(this SQLiteDataReader reader, Func projection) - { - while (reader.Read()) - { - yield return projection(reader); - } - } - } -} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Images/bookmark.png b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Images/bookmark.png deleted file mode 100644 index b8aee3564e3860b72df623641a9274bbf876ac66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4497 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 diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Languages/en.xaml b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Languages/en.xaml deleted file mode 100644 index 7db78333be..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Languages/en.xaml +++ /dev/null @@ -1,9 +0,0 @@ - - - - Browser Bookmarks - Search your browser bookmarks - - \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Languages/tr.xaml b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Languages/tr.xaml deleted file mode 100644 index 847d28c7bb..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Languages/tr.xaml +++ /dev/null @@ -1,9 +0,0 @@ - - - - Yer İşaretleri - Tarayıcılarınızdaki yer işaretlerini arayın. - - \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Main.cs b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Main.cs deleted file mode 100644 index a616edce08..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Main.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Windows.Controls; -using Wox.Infrastructure.Storage; -using Wox.Plugin.BrowserBookmark.Commands; -using Wox.Plugin.BrowserBookmark.Models; -using Wox.Plugin.BrowserBookmark.Views; -using Wox.Plugin.SharedCommands; - -namespace Wox.Plugin.BrowserBookmark -{ - public class Main : ISettingProvider, IPlugin, IReloadable, IPluginI18n, ISavable - { - private PluginInitContext context; - - private List cachedBookmarks = new List(); - - private readonly Settings _settings; - private readonly PluginJsonStorage _storage; - - public Main() - { - _storage = new PluginJsonStorage(); - _settings = _storage.Load(); - - cachedBookmarks = Bookmarks.LoadAllBookmarks(); - } - - public void Init(PluginInitContext context) - { - this.context = context; - } - - public List Query(Query query) - { - string param = query.GetAllRemainingParameter().TrimStart(); - - // Should top results be returned? (true if no search parameters have been passed) - var topResults = string.IsNullOrEmpty(param); - - var returnList = cachedBookmarks; - - if (!topResults) - { - // Since we mixed chrome and firefox bookmarks, we should order them again - returnList = cachedBookmarks.Where(o => Bookmarks.MatchProgram(o, param)).ToList(); - returnList = returnList.OrderByDescending(o => o.Score).ToList(); - } - - return returnList.Select(c => new Result() - { - Title = c.Name, - SubTitle = c.Url, - IcoPath = @"Images\bookmark.png", - Score = 5, - Action = (e) => - { - if (_settings.OpenInNewBrowserWindow) - { - c.Url.NewBrowserWindow(_settings.BrowserPath); - } - else - { - c.Url.NewTabInBrowser(_settings.BrowserPath); - } - - return true; - } - }).ToList(); - } - - public void ReloadData() - { - cachedBookmarks.Clear(); - - cachedBookmarks = Bookmarks.LoadAllBookmarks(); - } - - public string GetTranslatedPluginTitle() - { - return context.API.GetTranslation("wox_plugin_browserbookmark_plugin_name"); - } - - public string GetTranslatedPluginDescription() - { - return context.API.GetTranslation("wox_plugin_browserbookmark_plugin_description"); - } - - public Control CreateSettingPanel() - { - return new SettingsControl(_settings); - } - - public void Save() - { - _storage.Save(); - } - } -} diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Models/Settings.cs b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Models/Settings.cs deleted file mode 100644 index 41d742fe6b..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Models/Settings.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Wox.Plugin.BrowserBookmark.Models -{ - public class Settings : BaseModel - { - public bool OpenInNewBrowserWindow { get; set; } = true; - - public string BrowserPath { get; set; } - } -} \ No newline at end of file diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Properties/AssemblyInfo.cs b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Properties/AssemblyInfo.cs deleted file mode 100644 index 982c549994..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Wox.Plugin.BrowserBookmark")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Oracle Corporation")] -[assembly: AssemblyProduct("Wox.Plugin.BrowserBookmark")] -[assembly: AssemblyCopyright("Copyright © Oracle Corporation 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7dd2e33e-d029-4661-8f1d-594e82cef077")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Views/SettingsControl.xaml b/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Views/SettingsControl.xaml deleted file mode 100644 index 93b272fcad..0000000000 --- a/src/modules/launcher/Plugins/Wox.Plugin.BrowserBookmark/Views/SettingsControl.xaml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - -