Refactoring.

This commit is contained in:
qianlifeng
2014-12-26 22:51:04 +08:00
parent 50f6044a2f
commit ccc8d7e5cd
27 changed files with 114 additions and 139 deletions

View File

@@ -197,7 +197,7 @@ namespace Wox.Plugin.PluginManagement
private List<Result> ListUnInstalledPlugins(Query query) private List<Result> ListUnInstalledPlugins(Query query)
{ {
List<Result> results = new List<Result>(); List<Result> results = new List<Result>();
List<PluginMetadata> allInstalledPlugins = ParseThirdPartyPlugins(); List<PluginMetadata> allInstalledPlugins = ParseUserPlugins();
if (query.ActionParameters.Count > 1) if (query.ActionParameters.Count > 1)
{ {
string pluginName = query.ActionParameters[1]; string pluginName = query.ActionParameters[1];
@@ -235,7 +235,7 @@ namespace Wox.Plugin.PluginManagement
private List<Result> ListInstalledPlugins() private List<Result> ListInstalledPlugins()
{ {
List<Result> results = new List<Result>(); List<Result> results = new List<Result>();
foreach (PluginMetadata plugin in ParseThirdPartyPlugins()) foreach (PluginMetadata plugin in ParseUserPlugins())
{ {
results.Add(new Result() results.Add(new Result()
{ {
@@ -247,7 +247,7 @@ namespace Wox.Plugin.PluginManagement
return results; return results;
} }
private static List<PluginMetadata> ParseThirdPartyPlugins() private static List<PluginMetadata> ParseUserPlugins()
{ {
List<PluginMetadata> pluginMetadatas = new List<PluginMetadata>(); List<PluginMetadata> pluginMetadatas = new List<PluginMetadata>();
if (!Directory.Exists(PluginPath)) if (!Directory.Exists(PluginPath))
@@ -276,7 +276,7 @@ namespace Wox.Plugin.PluginManagement
try try
{ {
metadata = JsonConvert.DeserializeObject<PluginMetadata>(File.ReadAllText(configPath)); metadata = JsonConvert.DeserializeObject<PluginMetadata>(File.ReadAllText(configPath));
metadata.PluginType = PluginType.ThirdParty; metadata.PluginType = PluginType.User;
metadata.PluginDirectory = pluginDirectory; metadata.PluginDirectory = pluginDirectory;
} }
catch (Exception) catch (Exception)

View File

@@ -4,6 +4,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
using System.Windows.Forms;
using Newtonsoft.Json; using Newtonsoft.Json;
using Wox.Infrastructure.Exceptions; using Wox.Infrastructure.Exceptions;
using Wox.Infrastructure.Logger; using Wox.Infrastructure.Logger;
@@ -74,7 +75,6 @@ namespace Wox.Core.Plugin
} }
catch (Exception e) catch (Exception e)
{ {
ErrorReporting.TryShowErrorMessageBox(e.Message, e);
Log.Error(e.Message); Log.Error(e.Message);
} }
} }
@@ -83,12 +83,12 @@ namespace Wox.Core.Plugin
private void ExecuteWoxAPI(string method, object[] parameters) private void ExecuteWoxAPI(string method, object[] parameters)
{ {
MethodInfo methodInfo = App.Window.GetType().GetMethod(method); MethodInfo methodInfo = PluginManager.API.GetType().GetMethod(method);
if (methodInfo != null) if (methodInfo != null)
{ {
try try
{ {
methodInfo.Invoke(App.Window, parameters); methodInfo.Invoke(PluginManager.API, parameters);
} }
catch (Exception) catch (Exception)
{ {
@@ -132,7 +132,7 @@ namespace Wox.Core.Plugin
string result = reader.ReadToEnd(); string result = reader.ReadToEnd();
if (result.StartsWith("DEBUG:")) if (result.StartsWith("DEBUG:"))
{ {
System.Windows.Forms.MessageBox.Show(new Form { TopMost = true }, result.Substring(6)); MessageBox.Show(new Form { TopMost = true }, result.Substring(6));
return ""; return "";
} }
if (string.IsNullOrEmpty(result)) if (string.IsNullOrEmpty(result))
@@ -142,7 +142,8 @@ namespace Wox.Core.Plugin
string error = errorReader.ReadToEnd(); string error = errorReader.ReadToEnd();
if (!string.IsNullOrEmpty(error)) if (!string.IsNullOrEmpty(error))
{ {
ErrorReporting.TryShowErrorMessageBox(error, new WoxJsonRPCException(error)); //todo:
// ErrorReporting.TryShowErrorMessageBox(error, new WoxJsonRPCException(error));
} }
} }
} }

View File

@@ -28,7 +28,7 @@ namespace Wox.Core.Plugin
ParseSystemPlugins(); ParseSystemPlugins();
foreach (string pluginDirectory in pluginDirectories) foreach (string pluginDirectory in pluginDirectories)
{ {
ParseThirdPartyPlugins(pluginDirectory); ParseUserPlugins(pluginDirectory);
} }
if (PluginManager.DebuggerMode != null) if (PluginManager.DebuggerMode != null)
@@ -56,7 +56,7 @@ namespace Wox.Core.Plugin
}); });
} }
private static void ParseThirdPartyPlugins(string pluginDirectory) private static void ParseUserPlugins(string pluginDirectory)
{ {
string[] directories = Directory.GetDirectories(pluginDirectory); string[] directories = Directory.GetDirectories(pluginDirectory);
@@ -88,7 +88,7 @@ namespace Wox.Core.Plugin
try try
{ {
metadata = JsonConvert.DeserializeObject<PluginMetadata>(File.ReadAllText(configPath)); metadata = JsonConvert.DeserializeObject<PluginMetadata>(File.ReadAllText(configPath));
metadata.PluginType = PluginType.ThirdParty; metadata.PluginType = PluginType.User;
metadata.PluginDirectory = pluginDirectory; metadata.PluginDirectory = pluginDirectory;
} }
catch (Exception) catch (Exception)

View File

@@ -15,8 +15,10 @@ namespace Wox.Core.Plugin
public static class PluginManager public static class PluginManager
{ {
public static String DebuggerMode { get; private set; } public static String DebuggerMode { get; private set; }
public static IPublicAPI API { get; private set; }
private static List<PluginPair> plugins = new List<PluginPair>(); private static List<PluginPair> plugins = new List<PluginPair>();
/// <summary> /// <summary>
/// Directories that will hold Wox plugin directory /// Directories that will hold Wox plugin directory
/// </summary> /// </summary>
@@ -26,10 +28,14 @@ namespace Wox.Core.Plugin
{ {
pluginDirectories.Add( pluginDirectories.Add(
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Plugins")); Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Plugins"));
pluginDirectories.Add(
Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), ".Wox"),"Plugins"));
MakesurePluginDirectoriesExist(); string userProfilePath = Environment.GetEnvironmentVariable("USERPROFILE");
if (userProfilePath != null)
{
pluginDirectories.Add(Path.Combine(Path.Combine(userProfilePath, ".Wox"), "Plugins"));
}
MakesurePluginDirectoriesExist();
} }
private static void MakesurePluginDirectoriesExist() private static void MakesurePluginDirectoriesExist()
@@ -46,8 +52,9 @@ namespace Wox.Core.Plugin
/// <summary> /// <summary>
/// Load and init all Wox plugins /// Load and init all Wox plugins
/// </summary> /// </summary>
public static void Init() public static void Init(IPublicAPI api)
{ {
API = api;
plugins.Clear(); plugins.Clear();
List<PluginMetadata> pluginMetadatas = PluginConfig.Parse(pluginDirectories); List<PluginMetadata> pluginMetadatas = PluginConfig.Parse(pluginDirectories);
@@ -61,11 +68,16 @@ namespace Wox.Core.Plugin
{ {
CurrentPluginMetadata = pair.Metadata, CurrentPluginMetadata = pair.Metadata,
Proxy = HttpProxy.Instance, Proxy = HttpProxy.Instance,
API = App.Window API = API
})); }));
} }
} }
public static void Query(Query query)
{
QueryDispatcher.QueryDispatcher.Dispatch(query);
}
public static List<PluginPair> AllPlugins public static List<PluginPair> AllPlugins
{ {
get get
@@ -74,11 +86,11 @@ namespace Wox.Core.Plugin
} }
} }
public static bool HitThirdpartyKeyword(Query query) public static bool IsUserPluginQuery(Query query)
{ {
if (string.IsNullOrEmpty(query.ActionName)) return false; if (string.IsNullOrEmpty(query.ActionName)) return false;
return plugins.Any(o => o.Metadata.PluginType == PluginType.ThirdParty && o.Metadata.ActionKeyword == query.ActionName); return plugins.Any(o => o.Metadata.PluginType == PluginType.User && o.Metadata.ActionKeyword == query.ActionName);
} }
public static void ActivatePluginDebugger(string path) public static void ActivatePluginDebugger(string path)

View File

@@ -0,0 +1,7 @@
namespace Wox.Core.Plugin.QueryDispatcher
{
internal interface IQueryDispatcher
{
void Dispatch(Wox.Plugin.Query query);
}
}

View File

@@ -0,0 +1,21 @@

namespace Wox.Core.Plugin.QueryDispatcher
{
internal static class QueryDispatcher
{
private static IQueryDispatcher pluginCmd = new UserPluginQueryDispatcher();
private static IQueryDispatcher systemCmd = new SystemPluginQueryDispatcher();
public static void Dispatch(Wox.Plugin.Query query)
{
if (PluginManager.IsUserPluginQuery(query))
{
pluginCmd.Dispatch(query);
}
else
{
systemCmd.Dispatch(query);
}
}
}
}

View File

@@ -1,20 +1,17 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading; using System.Threading;
using Wox.Core.Plugin;
using Wox.Infrastructure.Storage.UserSettings; using Wox.Infrastructure.Storage.UserSettings;
using Wox.Plugin; using Wox.Plugin;
using Wox.Plugin.SystemPlugins; using Wox.Plugin.SystemPlugins;
namespace Wox.Commands namespace Wox.Core.Plugin.QueryDispatcher
{ {
public class SystemCommand : BaseCommand public class SystemPluginQueryDispatcher : IQueryDispatcher
{ {
private IEnumerable<PluginPair> allSytemPlugins = PluginManager.AllPlugins.Where(o => o.Metadata.PluginType == PluginType.System); private IEnumerable<PluginPair> allSytemPlugins = PluginManager.AllPlugins.Where(o => o.Metadata.PluginType == PluginType.System);
public override void Dispatch(Query query) public void Dispatch(Query query)
{ {
var queryPlugins = allSytemPlugins; var queryPlugins = allSytemPlugins;
if (UserSettingStorage.Instance.WebSearches.Exists(o => o.ActionWord == query.ActionName && o.Enabled)) if (UserSettingStorage.Instance.WebSearches.Exists(o => o.ActionWord == query.ActionName && o.Enabled))
@@ -34,7 +31,7 @@ namespace Wox.Commands
List<Result> results = pair1.Plugin.Query(query); List<Result> results = pair1.Plugin.Query(query);
results.ForEach(o => { o.AutoAjustScore = true; }); results.ForEach(o => { o.AutoAjustScore = true; });
App.Window.PushResults(query, pair1.Metadata, results); PluginManager.API.PushResults(query, pair1.Metadata, results);
}); });
} }
} }

View File

@@ -2,26 +2,24 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using Wox.Core.Plugin;
using Wox.Helper;
using Wox.Infrastructure.Logger; using Wox.Infrastructure.Logger;
using Wox.Infrastructure.Storage.UserSettings; using Wox.Infrastructure.Storage.UserSettings;
using Wox.Plugin; using Wox.Plugin;
namespace Wox.Commands namespace Wox.Core.Plugin.QueryDispatcher
{ {
public class PluginCommand : BaseCommand public class UserPluginQueryDispatcher : IQueryDispatcher
{ {
public override void Dispatch(Query query) public void Dispatch(Query query)
{ {
PluginPair thirdPlugin = PluginManager.AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionName); PluginPair userPlugin = PluginManager.AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionName);
if (thirdPlugin != null && !string.IsNullOrEmpty(thirdPlugin.Metadata.ActionKeyword)) if (userPlugin != null && !string.IsNullOrEmpty(userPlugin.Metadata.ActionKeyword))
{ {
var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == thirdPlugin.Metadata.ID); var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == userPlugin.Metadata.ID);
if (customizedPluginConfig != null && customizedPluginConfig.Disabled) if (customizedPluginConfig != null && customizedPluginConfig.Disabled)
{ {
//need to stop the loading animation //need to stop the loading animation
UpdateResultView(null); PluginManager.API.StopLoadingBar();
return; return;
} }
@@ -29,12 +27,12 @@ namespace Wox.Commands
{ {
try try
{ {
List<Result> results = thirdPlugin.Plugin.Query(query) ?? new List<Result>(); List<Result> results = userPlugin.Plugin.Query(query) ?? new List<Result>();
App.Window.PushResults(query,thirdPlugin.Metadata,results); PluginManager.API.PushResults(query,userPlugin.Metadata,results);
} }
catch (Exception queryException) catch (Exception queryException)
{ {
Log.Error(string.Format("Plugin {0} query failed: {1}", thirdPlugin.Metadata.Name, Log.Error(string.Format("Plugin {0} query failed: {1}", userPlugin.Metadata.Name,
queryException.Message)); queryException.Message));
#if (DEBUG) #if (DEBUG)
{ {

View File

@@ -1,4 +1,4 @@
What does Wox.Core do? What does Wox.Core do?
* Handle Query * Handle Query
* Loading Plugins * Loading Plugins (including system plugin and user plugin)

View File

@@ -18,7 +18,7 @@
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>..\Output\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
@@ -38,12 +38,17 @@
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Plugin\QueryDispatcher\IQueryDispatcher.cs" />
<Compile Include="Plugin\QueryDispatcher\QueryDispatcher.cs" />
<Compile Include="Plugin\QueryDispatcher\UserPluginQueryDispatcher.cs" />
<Compile Include="Plugin\QueryDispatcher\SystemPluginQueryDispatcher.cs" />
<Compile Include="Plugin\JsonRPCPlugin.cs" /> <Compile Include="Plugin\JsonRPCPlugin.cs" />
<Compile Include="Plugin\JsonRPCPluginLoader.cs" /> <Compile Include="Plugin\JsonRPCPluginLoader.cs" />
<Compile Include="Plugin\CSharpPluginLoader.cs" /> <Compile Include="Plugin\CSharpPluginLoader.cs" />

View File

@@ -1,15 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Wox.Infrastructure
{
public static class ChineseToPinYin
{
[Obsolete]
public static string ToPinYin(string txt)
{
return txt.Unidecode();
}
}
}

View File

@@ -67,21 +67,18 @@
<Compile Include="Storage\JsonStrorage.cs" /> <Compile Include="Storage\JsonStrorage.cs" />
<Compile Include="Storage\UserSettings\CustomizedPluginConfig.cs" /> <Compile Include="Storage\UserSettings\CustomizedPluginConfig.cs" />
<Compile Include="Storage\UserSettings\FolderLink.cs" /> <Compile Include="Storage\UserSettings\FolderLink.cs" />
<Compile Include="Storage\UserSettings\PluginHotkey.cs" />
<Compile Include="Storage\UserSettings\ProgramSource.cs" />
<Compile Include="Storage\UserSettings\UserSettingStorage.cs" />
<Compile Include="Storage\UserSettings\WebSearch.cs" />
<Compile Include="Timeit.cs" /> <Compile Include="Timeit.cs" />
<Compile Include="Unidecoder.Characters.cs" /> <Compile Include="Unidecoder.Characters.cs" />
<Compile Include="ChineseToPinYin.cs" />
<Compile Include="Http\HttpRequest.cs" /> <Compile Include="Http\HttpRequest.cs" />
<Compile Include="Storage\BaseStorage.cs" /> <Compile Include="Storage\BaseStorage.cs" />
<Compile Include="FuzzyMatcher.cs" /> <Compile Include="FuzzyMatcher.cs" />
<Compile Include="Hotkey\GlobalHotkey.cs" /> <Compile Include="Hotkey\GlobalHotkey.cs" />
<Compile Include="Hotkey\HotkeyModel.cs" /> <Compile Include="Hotkey\HotkeyModel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Storage\UserSelectedRecordStorage.cs" />
<Compile Include="Storage\UserSettings\UserSettingStorage.cs" />
<Compile Include="Storage\UserSettings\PluginHotkey.cs" />
<Compile Include="Storage\UserSettings\ProgramSource.cs" />
<Compile Include="Storage\UserSettings\WebSearch.cs" />
<Compile Include="StringEmptyConverter.cs" />
<Compile Include="Unidecoder.cs" /> <Compile Include="Unidecoder.cs" />
<Compile Include="WindowsShellRun.cs" /> <Compile Include="WindowsShellRun.cs" />
</ItemGroup> </ItemGroup>

View File

@@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:infrastructure="clr-namespace:Wox.Infrastructure;assembly=Wox.Infrastructure" xmlns:infrastructure="clr-namespace:Wox.Infrastructure;assembly=Wox.Infrastructure"
xmlns:program="clr-namespace:Wox.Plugin.SystemPlugins.Program"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="600"> d:DesignHeight="300" d:DesignWidth="600">
@@ -26,7 +27,7 @@
<GridViewColumn Header="Location" Width="400"> <GridViewColumn Header="Location" Width="400">
<GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Location, ConverterParameter=(null), Converter={infrastructure:StringEmptyConverter}}"/> <TextBlock Text="{Binding Location, ConverterParameter=(null), Converter={program:StringEmptyConverter}}"/>
</DataTemplate> </DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>

View File

@@ -1,11 +1,8 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Markup; using System.Windows.Markup;
namespace Wox.Infrastructure namespace Wox.Plugin.SystemPlugins.Program
{ {
public class StringEmptyConverter : MarkupExtension, IValueConverter public class StringEmptyConverter : MarkupExtension, IValueConverter
{ {

View File

@@ -8,7 +8,7 @@ using Wox.Infrastructure.Storage.UserSettings;
namespace Wox.Plugin.SystemPlugins namespace Wox.Plugin.SystemPlugins
{ {
public class ThirdpartyPluginIndicator : BaseSystemPlugin public class UserPluginIndicator : BaseSystemPlugin
{ {
private List<PluginPair> allPlugins = new List<PluginPair>(); private List<PluginPair> allPlugins = new List<PluginPair>();
private PluginInitContext context; private PluginInitContext context;

View File

@@ -86,6 +86,7 @@
<Compile Include="Program\ProgramSuffixes.xaml.cs"> <Compile Include="Program\ProgramSuffixes.xaml.cs">
<DependentUpon>ProgramSuffixes.xaml</DependentUpon> <DependentUpon>ProgramSuffixes.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Program\StringEmptyConverter.cs" />
<Compile Include="SuggestionSources\Baidu.cs" /> <Compile Include="SuggestionSources\Baidu.cs" />
<Compile Include="SuggestionSources\SuggestionSourceFactory.cs" /> <Compile Include="SuggestionSources\SuggestionSourceFactory.cs" />
<Compile Include="Sys\SysSettings.xaml.cs"> <Compile Include="Sys\SysSettings.xaml.cs">
@@ -102,7 +103,7 @@
<Compile Include="Program\Programs.cs" /> <Compile Include="Program\Programs.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Sys\Sys.cs" /> <Compile Include="Sys\Sys.cs" />
<Compile Include="ThirdpartyPluginIndicator.cs" /> <Compile Include="UserPluginIndicator.cs" />
<Compile Include="SuggestionSources\Google.cs" /> <Compile Include="SuggestionSources\Google.cs" />
<Compile Include="SuggestionSources\ISuggestionSource.cs" /> <Compile Include="SuggestionSources\ISuggestionSource.cs" />
<Compile Include="WebSearch\WebSearchSetting.xaml.cs"> <Compile Include="WebSearch\WebSearchSetting.xaml.cs">

View File

@@ -6,7 +6,12 @@ namespace Wox.Plugin
{ {
public interface IPublicAPI public interface IPublicAPI
{ {
/// <summary>
/// Push result to query window
/// </summary>
/// <param name="query"></param>
/// <param name="plugin"></param>
/// <param name="results"></param>
void PushResults(Query query,PluginMetadata plugin, List<Result> results); void PushResults(Query query,PluginMetadata plugin, List<Result> results);
bool ShellRun(string cmd, bool runAsAdministrator = false); bool ShellRun(string cmd, bool runAsAdministrator = false);

View File

@@ -8,6 +8,6 @@ namespace Wox.Plugin
public enum PluginType public enum PluginType
{ {
System, System,
ThirdParty User
} }
} }

View File

@@ -15,7 +15,7 @@ namespace Wox.CommandArgs
public void Execute(IList<string> args) public void Execute(IList<string> args)
{ {
PluginManager.Init(); PluginManager.Init(App.Window);
} }
} }
} }

View File

@@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Wox.Plugin;
namespace Wox.Commands
{
public abstract class BaseCommand
{
public abstract void Dispatch(Query query);
protected void UpdateResultView(List<Result> results)
{
App.Window.OnUpdateResultView(results);
}
}
}

View File

@@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Wox.Core.Plugin;
using Wox.Helper;
using Wox.Plugin;
namespace Wox.Commands
{
internal static class CommandFactory
{
private static PluginCommand pluginCmd = new PluginCommand();
private static SystemCommand systemCmd = new SystemCommand();
public static void DispatchCommand(Query query)
{
if (PluginManager.HitThirdpartyKeyword(query))
{
pluginCmd.Dispatch(query);
}
else
{
systemCmd.Dispatch(query);
}
}
}
}

View File

@@ -116,7 +116,7 @@ namespace Wox.Helper
try try
{ {
metadata = JsonConvert.DeserializeObject<PluginMetadata>(File.ReadAllText(configPath)); metadata = JsonConvert.DeserializeObject<PluginMetadata>(File.ReadAllText(configPath));
metadata.PluginType = PluginType.ThirdParty; metadata.PluginType = PluginType.User;
metadata.PluginDirectory = pluginDirectory; metadata.PluginDirectory = pluginDirectory;
} }
catch (Exception) catch (Exception)

View File

@@ -9,8 +9,8 @@ namespace Wox.ImageLoader
[Serializable] [Serializable]
public class ImageCacheStroage : BinaryStorage<ImageCacheStroage> public class ImageCacheStroage : BinaryStorage<ImageCacheStroage>
{ {
public int counter = 0; private int counter = 0;
public const int maxCached = 200; private const int maxCached = 200;
public Dictionary<string, int> TopUsedImages = new Dictionary<string, int>(); public Dictionary<string, int> TopUsedImages = new Dictionary<string, int>();
protected override string ConfigName protected override string ConfigName

View File

@@ -14,7 +14,6 @@ using WindowsInput;
using WindowsInput.Native; using WindowsInput.Native;
using NHotkey; using NHotkey;
using NHotkey.Wpf; using NHotkey.Wpf;
using Wox.Commands;
using Wox.Core.Plugin; using Wox.Core.Plugin;
using Wox.Helper; using Wox.Helper;
using Wox.Infrastructure; using Wox.Infrastructure;
@@ -22,6 +21,7 @@ using Wox.Infrastructure.Hotkey;
using Wox.Infrastructure.Storage; using Wox.Infrastructure.Storage;
using Wox.Infrastructure.Storage.UserSettings; using Wox.Infrastructure.Storage.UserSettings;
using Wox.Plugin; using Wox.Plugin;
using Wox.Storage;
using Wox.Update; using Wox.Update;
using Application = System.Windows.Application; using Application = System.Windows.Application;
using Brushes = System.Windows.Media.Brushes; using Brushes = System.Windows.Media.Brushes;
@@ -127,7 +127,7 @@ namespace Wox
public void ReloadPlugins() public void ReloadPlugins()
{ {
Dispatcher.Invoke(new Action(PluginManager.Init)); Dispatcher.Invoke(new Action(()=> PluginManager.Init(this)));
} }
public List<PluginPair> GetAllPlugins() public List<PluginPair> GetAllPlugins()
@@ -192,7 +192,7 @@ namespace Wox
ThreadPool.QueueUserWorkItem(o => ThreadPool.QueueUserWorkItem(o =>
{ {
Thread.Sleep(50); Thread.Sleep(50);
PluginManager.Init(); PluginManager.Init(this);
}); });
ThreadPool.QueueUserWorkItem(o => ThreadPool.QueueUserWorkItem(o =>
{ {
@@ -357,9 +357,9 @@ namespace Wox
}, TimeSpan.FromMilliseconds(100), null); }, TimeSpan.FromMilliseconds(100), null);
queryHasReturn = false; queryHasReturn = false;
var q = new Query(lastQuery); var q = new Query(lastQuery);
CommandFactory.DispatchCommand(q); PluginManager.Query(q);
BackToResultMode(); BackToResultMode();
if (PluginManager.HitThirdpartyKeyword(q)) if (PluginManager.IsUserPluginQuery(q))
{ {
Dispatcher.DelayInvoke("ShowProgressbar", originQuery => Dispatcher.DelayInvoke("ShowProgressbar", originQuery =>
{ {

View File

@@ -195,7 +195,7 @@ namespace Wox
new CollectionContainer new CollectionContainer
{ {
Collection = Collection =
PluginManager.AllPlugins.Where(o => o.Metadata.PluginType == PluginType.ThirdParty) PluginManager.AllPlugins.Where(o => o.Metadata.PluginType == PluginType.User)
} }
}; };
lbPlugins.ItemsSource = plugins; lbPlugins.ItemsSource = plugins;

View File

@@ -1,12 +1,9 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json; using Newtonsoft.Json;
using Wox.Infrastructure.Storage; using Wox.Infrastructure.Storage;
using Wox.Plugin; using Wox.Plugin;
namespace Wox.Infrastructure.Storage namespace Wox.Storage
{ {
public class UserSelectedRecordStorage : JsonStrorage<UserSelectedRecordStorage> public class UserSelectedRecordStorage : JsonStrorage<UserSelectedRecordStorage>
{ {

View File

@@ -105,6 +105,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ImageLoader\ImageCacheStroage.cs" /> <Compile Include="ImageLoader\ImageCacheStroage.cs" />
<Compile Include="Storage\UserSelectedRecordStorage.cs" />
<Compile Include="Update\NewVersionWindow.xaml.cs"> <Compile Include="Update\NewVersionWindow.xaml.cs">
<DependentUpon>NewVersionWindow.xaml</DependentUpon> <DependentUpon>NewVersionWindow.xaml</DependentUpon>
</Compile> </Compile>
@@ -124,10 +125,6 @@
<Compile Include="CommandArgs\PluginDebuggerCommandArg.cs" /> <Compile Include="CommandArgs\PluginDebuggerCommandArg.cs" />
<Compile Include="CommandArgs\QueryCommandArg.cs" /> <Compile Include="CommandArgs\QueryCommandArg.cs" />
<Compile Include="CommandArgs\ReloadPluginCommandArg.cs" /> <Compile Include="CommandArgs\ReloadPluginCommandArg.cs" />
<Compile Include="Commands\BaseCommand.cs" />
<Compile Include="Commands\CommandFactory.cs" />
<Compile Include="Commands\PluginCommand.cs" />
<Compile Include="Commands\SystemCommand.cs" />
<Compile Include="Converters\AsyncConverter.cs" /> <Compile Include="Converters\AsyncConverter.cs" />
<Compile Include="Converters\ConvertorBase.cs" /> <Compile Include="Converters\ConvertorBase.cs" />
<Compile Include="Helper\DataWebRequestFactory.cs" /> <Compile Include="Helper\DataWebRequestFactory.cs" />