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 controlPanelItems = new List(); 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 Query(Query query) { if (query.RawQuery.EndsWith(" ") || query.RawQuery.Length <= 1) return new List(); string myQuery = query.RawQuery.Trim(); List results = new List(); 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 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; } } }