mirror of
https://github.com/microsoft/PowerToys.git
synced 2024-12-14 19:49:15 +08:00
88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using Wox.Infrastructure;
|
|
|
|
namespace Wox.Plugin.ControlPanel
|
|
{
|
|
public class ControlPanel : IPlugin
|
|
{
|
|
private PluginInitContext context;
|
|
private List<ControlPanelItem> controlPanelItems = new List<ControlPanelItem>();
|
|
private string iconFolder;
|
|
private string fileType;
|
|
|
|
public void Init(PluginInitContext context)
|
|
{
|
|
this.context = context;
|
|
controlPanelItems = ControlPanelList.Create(48);
|
|
iconFolder = Path.Combine(context.CurrentPluginMetadata.PluginDirectory, @"Images\ControlPanelIcons\");
|
|
fileType = ".bmp";
|
|
|
|
if (!Directory.Exists(iconFolder))
|
|
{
|
|
Directory.CreateDirectory(iconFolder);
|
|
}
|
|
|
|
|
|
foreach (ControlPanelItem item in controlPanelItems)
|
|
{
|
|
if (!File.Exists(iconFolder + item.GUID + fileType) && item.Icon != null)
|
|
{
|
|
item.Icon.ToBitmap().Save(iconFolder + item.GUID + fileType);
|
|
}
|
|
}
|
|
}
|
|
|
|
public List<Result> Query(Query query)
|
|
{
|
|
if (query.RawQuery.EndsWith(" ") || query.RawQuery.Length <= 1) return new List<Result>();
|
|
string myQuery = query.RawQuery.Trim();
|
|
|
|
List<Result> results = new List<Result>();
|
|
|
|
foreach (var item in controlPanelItems)
|
|
{
|
|
var fuzzyMather = FuzzyMatcher.Create(myQuery);
|
|
if (MatchProgram(item, fuzzyMather))
|
|
{
|
|
results.Add(new Result()
|
|
{
|
|
Title = item.LocalizedString,
|
|
SubTitle = item.InfoTip,
|
|
Score = item.Score,
|
|
IcoPath = Path.Combine(context.CurrentPluginMetadata.PluginDirectory, @"Images\\ControlPanelIcons\\" + item.GUID + fileType),
|
|
Action = e =>
|
|
{
|
|
try
|
|
{
|
|
Process.Start(item.ExecutablePath);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
//Silently Fail for now..
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
List<Result> panelItems = results.OrderByDescending(o => o.Score).Take(5).ToList();
|
|
return panelItems;
|
|
}
|
|
|
|
private bool MatchProgram(ControlPanelItem item, FuzzyMatcher matcher)
|
|
{
|
|
if (item.LocalizedString != null && (item.Score = matcher.Evaluate(item.LocalizedString).Score) > 0) return true;
|
|
if (item.InfoTip != null && (item.Score = matcher.Evaluate(item.InfoTip).Score) > 0) return true;
|
|
|
|
if (item.LocalizedString != null && (item.Score = matcher.Evaluate(item.LocalizedString.Unidecode()).Score) > 0) return true;
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|