diff --git a/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs b/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs index 531b6732db..011d3bde0c 100644 --- a/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs +++ b/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs @@ -19,7 +19,7 @@ namespace Wox.Plugin.PluginIndicator Title = keyword, SubTitle = $"Activate {metadata.Name} plugin", Score = 100, - IcoPath = metadata.FullIcoPath, + IcoPath = metadata.IcoPath, Action = c => { context.API.ChangeQuery($"{keyword}{Plugin.Query.TermSeperater}"); diff --git a/Plugins/Wox.Plugin.PluginManagement/Main.cs b/Plugins/Wox.Plugin.PluginManagement/Main.cs index 216157a1c7..93841eb82f 100644 --- a/Plugins/Wox.Plugin.PluginManagement/Main.cs +++ b/Plugins/Wox.Plugin.PluginManagement/Main.cs @@ -189,7 +189,7 @@ namespace Wox.Plugin.PluginManagement { Title = plugin.Name, SubTitle = plugin.Description, - IcoPath = plugin.FullIcoPath, + IcoPath = plugin.IcoPath, Action = e => { UnInstallPlugin(plugin); @@ -229,7 +229,7 @@ namespace Wox.Plugin.PluginManagement { Title = $"{plugin.Name} - Action Keywords: {actionKeywordString}", SubTitle = plugin.Description, - IcoPath = plugin.FullIcoPath + IcoPath = plugin.IcoPath }); } return results; diff --git a/Plugins/Wox.Plugin.WebSearch/Images/baidu.png b/Plugins/Wox.Plugin.WebSearch/Images/baidu.png new file mode 100644 index 0000000000..2d30b504eb Binary files /dev/null and b/Plugins/Wox.Plugin.WebSearch/Images/baidu.png differ diff --git a/Plugins/Wox.Plugin.WebSearch/Settings.cs b/Plugins/Wox.Plugin.WebSearch/Settings.cs index c1fb1dda02..aebec99c2e 100644 --- a/Plugins/Wox.Plugin.WebSearch/Settings.cs +++ b/Plugins/Wox.Plugin.WebSearch/Settings.cs @@ -1,6 +1,4 @@ using System.Collections.Generic; -using Newtonsoft.Json; -using Wox.Infrastructure.Storage; namespace Wox.Plugin.WebSearch { @@ -12,23 +10,31 @@ namespace Wox.Plugin.WebSearch { Title = "Google", ActionKeyword = "g", - IconPath = "google.png", + Icon = "google.png", Url = "https://www.google.com/search?q={q}", Enabled = true }, new WebSearch + { + Title = "Google Scholar", + ActionKeyword = "sc", + Icon = "google.png", + Url = "https://scholar.google.com/scholar?q={q}", + Enabled = true + }, + new WebSearch { Title = "Wikipedia", ActionKeyword = "wiki", - IconPath = "wiki.png", - Url = "http://en.wikipedia.org/wiki/{q}", + Icon = "wiki.png", + Url = "https://en.wikipedia.org/wiki/{q}", Enabled = true }, new WebSearch { Title = "FindIcon", ActionKeyword = "findicon", - IconPath = "pictures.png", + Icon = "pictures.png", Url = "http://findicons.com/search/{q}", Enabled = true }, @@ -36,39 +42,39 @@ namespace Wox.Plugin.WebSearch { Title = "Facebook", ActionKeyword = "facebook", - IconPath = "facebook.png", - Url = "http://www.facebook.com/search/?q={q}", + Icon = "facebook.png", + Url = "https://www.facebook.com/search/?q={q}", Enabled = true }, new WebSearch { Title = "Twitter", ActionKeyword = "twitter", - IconPath = "twitter.png", - Url = "http://twitter.com/search?q={q}", + Icon = "twitter.png", + Url = "https://twitter.com/search?q={q}", Enabled = true }, new WebSearch { Title = "Google Maps", ActionKeyword = "maps", - IconPath = "google_maps.png", - Url = "http://maps.google.com/maps?q={q}", + Icon = "google_maps.png", + Url = "https://maps.google.com/maps?q={q}", Enabled = true }, new WebSearch { Title = "Google Translate", ActionKeyword = "translate", - IconPath = "google_translate.png", - Url = "http://translate.google.com/#auto|en|{q}", + Icon = "google_translate.png", + Url = "https://translate.google.com/#auto|en|{q}", Enabled = true }, new WebSearch { Title = "Duckduckgo", ActionKeyword = "duckduckgo", - IconPath = "duckduckgo.png", + Icon = "duckduckgo.png", Url = "https://duckduckgo.com/?q={q}", Enabled = true }, @@ -76,7 +82,7 @@ namespace Wox.Plugin.WebSearch { Title = "Github", ActionKeyword = "github", - IconPath = "github.png", + Icon = "github.png", Url = "https://github.com/search?q={q}", Enabled = true }, @@ -84,7 +90,7 @@ namespace Wox.Plugin.WebSearch { Title = "Github Gist", ActionKeyword = "gist", - IconPath = "gist.png", + Icon = "gist.png", Url = "https://gist.github.com/search?q={q}", Enabled = true }, @@ -92,7 +98,7 @@ namespace Wox.Plugin.WebSearch { Title = "Gmail", ActionKeyword = "gmail", - IconPath = "gmail.png", + Icon = "gmail.png", Url = "https://mail.google.com/mail/ca/u/0/#apps/{q}", Enabled = true }, @@ -100,39 +106,39 @@ namespace Wox.Plugin.WebSearch { Title = "Google Drive", ActionKeyword = "drive", - IconPath = "google_drive.png", - Url = "http://drive.google.com/?hl=en&tab=bo#search/{q}", + Icon = "google_drive.png", + Url = "https://drive.google.com/?hl=en&tab=bo#search/{q}", Enabled = true }, new WebSearch { Title = "Wolframalpha", ActionKeyword = "wolframalpha", - IconPath = "wolframalpha.png", - Url = "http://www.wolframalpha.com/input/?i={q}", + Icon = "wolframalpha.png", + Url = "https://www.wolframalpha.com/input/?i={q}", Enabled = true }, new WebSearch { Title = "Stackoverflow", ActionKeyword = "stackoverflow", - IconPath = "stackoverflow.png", - Url = "http://stackoverflow.com/search?q={q}", + Icon = "stackoverflow.png", + Url = "https://stackoverflow.com/search?q={q}", Enabled = true }, new WebSearch { Title = "I'm Feeling Lucky", ActionKeyword = "lucky", - IconPath = "google.png", - Url = "http://google.com/search?q={q}&btnI=I", + Icon = "google.png", + Url = "https://google.com/search?q={q}&btnI=I", Enabled = true }, new WebSearch { Title = "Google Image", ActionKeyword = "image", - IconPath = "google.png", + Icon = "google.png", Url = "https://www.google.com/search?q={q}&tbm=isch", Enabled = true }, @@ -140,15 +146,15 @@ namespace Wox.Plugin.WebSearch { Title = "Youtube", ActionKeyword = "youtube", - IconPath = "youtube.png", - Url = "http://www.youtube.com/results?search_query={q}", + Icon = "youtube.png", + Url = "https://www.youtube.com/results?search_query={q}", Enabled = true }, new WebSearch { Title = "Bing", ActionKeyword = "bing", - IconPath = "bing.png", + Icon = "bing.png", Url = "https://www.bing.com/search?q={q}", Enabled = true }, @@ -156,9 +162,17 @@ namespace Wox.Plugin.WebSearch { Title = "Yahoo", ActionKeyword = "yahoo", - IconPath = "yahoo.png", - Url = "http://www.search.yahoo.com/search?p={q}", + Icon = "yahoo.png", + Url = "https://www.search.yahoo.com/search?p={q}", Enabled = true + }, + new WebSearch + { + Title= "Baidu", + ActionKeyword= "bd", + Icon= "baidu.png", + Url="https://www.baidu.com/#ie=UTF-8&wd={q}", + Enabled= true } }; diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearch.cs b/Plugins/Wox.Plugin.WebSearch/WebSearch.cs index 0ce1692bd0..5b4b734a1e 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebSearch.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebSearch.cs @@ -1,12 +1,35 @@ -using System; +using System.IO; +using JetBrains.Annotations; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; namespace Wox.Plugin.WebSearch { public class WebSearch { + public const string DefaultIcon = "web_search.png"; public string Title { get; set; } public string ActionKeyword { get; set; } - public string IconPath { get; set; } + [NotNull] + private string _icon = DefaultIcon; + + [NotNull] + public string Icon + { + get { return _icon; } + set + { + _icon = value; + IconPath = Path.Combine(WebSearchPlugin.PluginDirectory, WebSearchPlugin.ImageDirectory, value); + } + } + /// + /// All icon should be put under Images directory + /// + [NotNull] + [JsonIgnore] + internal string IconPath { get; private set; } + public string Url { get; set; } public bool Enabled { get; set; } } diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs index 2bb2ee877d..8232c7f28e 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Windows.Controls; using JetBrains.Annotations; @@ -13,14 +14,10 @@ namespace Wox.Plugin.WebSearch { public PluginInitContext Context { get; private set; } - private readonly PluginJsonStorage _storage; - private readonly Settings _settings; - - public WebSearchPlugin() - { - _storage = new PluginJsonStorage(); - _settings = _storage.Load(); - } + private PluginJsonStorage _storage; + private Settings _settings; + public const string ImageDirectory = "Images"; + public static string PluginDirectory; public void Save() { @@ -48,7 +45,7 @@ namespace Wox.Plugin.WebSearch Title = title, SubTitle = subtitle, Score = 6, - IcoPath = webSearch.IconPath, + IcoPath = webSearch.IconPath, Action = c => { Process.Start(webSearch.Url.Replace("{q}", Uri.EscapeDataString(keyword ?? string.Empty))); @@ -92,6 +89,9 @@ namespace Wox.Plugin.WebSearch public void Init(PluginInitContext context) { Context = context; + PluginDirectory = Context.CurrentPluginMetadata.PluginDirectory; + _storage = new PluginJsonStorage(); + _settings = _storage.Load(); } #region ISettingProvider Members diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs index a359378e73..e3f3bbfbbd 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs @@ -2,20 +2,14 @@ using System.IO; using System.Linq; using System.Windows; -using System.Windows.Media; -using System.Windows.Media.Imaging; using Microsoft.Win32; -using Wox.Infrastructure; using Wox.Infrastructure.Exception; using Wox.Infrastructure.Image; namespace Wox.Plugin.WebSearch { - public partial class WebSearchSetting : Window + public partial class WebSearchSetting { - private const string ImageDirectory = "Images"; - private const string DefaultIcon = "web_search.png"; - private readonly string _pluginDirectory; private readonly WebSearchesSetting _settingWindow; private bool _isUpdate; private WebSearch _webSearch; @@ -30,7 +24,6 @@ namespace Wox.Plugin.WebSearch _context = settingWidow.Context; _settingWindow = settingWidow; _settings = settings; - _pluginDirectory = _settingWindow.Context.CurrentPluginMetadata.PluginDirectory; } public void UpdateItem(WebSearch webSearch) @@ -47,21 +40,17 @@ namespace Wox.Plugin.WebSearch _isUpdate = true; ConfirmButton.Content = "Update"; - WebSearchIcon.Source = LoadIcon(webSearch.IconPath); + WebSearchIcon.Source = ImageLoader.Load(webSearch.IconPath); EnableCheckBox.IsChecked = webSearch.Enabled; WebSearchName.Text = webSearch.Title; Url.Text = webSearch.Url; Actionword.Text = webSearch.ActionKeyword; } - public void AddItem(WebSearch websearch) + public void AddItem(WebSearch webSearch) { - _webSearch = websearch; - if (string.IsNullOrEmpty(_webSearch.IconPath)) - { - _webSearch.IconPath = DefaultIcon; - WebSearchIcon.Source = LoadIcon(_webSearch.IconPath); - } + _webSearch = webSearch; + WebSearchIcon.Source = ImageLoader.Load(webSearch.IconPath); } private void CancelButtonOnClick(object sender, RoutedEventArgs e) @@ -69,32 +58,6 @@ namespace Wox.Plugin.WebSearch Close(); } - private ImageSource LoadIcon(string path) - { - if (path != null) - { - var releativePath = Path.Combine(_pluginDirectory, ImageDirectory, Path.GetFileName(path)); - if (File.Exists(releativePath)) - { - _webSearch.IconPath = path; - var source = ImageLoader.Load(releativePath); - return source; - } - else - { - _webSearch.IconPath = path; - var source = ImageLoader.Load(path); - return source; - } - } - else - { - var source = ImageLoader.Load(Path.Combine(_pluginDirectory, ImageDirectory, DefaultIcon)); - return source; - } - - } - /// /// Confirm button for both add and update /// @@ -156,9 +119,10 @@ namespace Wox.Plugin.WebSearch private void SelectIconButtonOnClick(object sender, RoutedEventArgs e) { + var directory = Path.Combine(WebSearchPlugin.PluginDirectory, WebSearchPlugin.ImageDirectory); var dlg = new OpenFileDialog { - InitialDirectory = Path.Combine(_pluginDirectory, ImageDirectory), + InitialDirectory = directory, Filter = "Image files (*.jpg, *.jpeg, *.gif, *.png, *.bmp) |*.jpg; *.jpeg; *.gif; *.png; *.bmp" }; @@ -168,7 +132,16 @@ namespace Wox.Plugin.WebSearch string fullpath = dlg.FileName; if (fullpath != null) { - WebSearchIcon.Source = LoadIcon(fullpath); + _webSearch.Icon = Path.GetFileName(fullpath); + if (File.Exists(_webSearch.IconPath)) + { + WebSearchIcon.Source = ImageLoader.Load(_webSearch.IconPath); + } + else + { + _webSearch.Icon = WebSearch.DefaultIcon; + MessageBox.Show($"The file should be put under {directory}"); + } } } } diff --git a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj index c32cf95632..3d52d10179 100644 --- a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj +++ b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj @@ -124,6 +124,9 @@ PreserveNewest + + PreserveNewest + MSBuild:Compile Designer diff --git a/Plugins/Wox.Plugin.WebSearch/plugin.json b/Plugins/Wox.Plugin.WebSearch/plugin.json index 751208bc75..115fb21e61 100644 --- a/Plugins/Wox.Plugin.WebSearch/plugin.json +++ b/Plugins/Wox.Plugin.WebSearch/plugin.json @@ -19,7 +19,8 @@ "image", "youtube", "bing", - "yahoo" + "yahoo", + "bd" ], "Name": "Web Searches", "Description": "Provide the web search ability", diff --git a/Wox.Infrastructure/Image/ImageLoader.cs b/Wox.Infrastructure/Image/ImageLoader.cs index f823452e2c..bbea213101 100644 --- a/Wox.Infrastructure/Image/ImageLoader.cs +++ b/Wox.Infrastructure/Image/ImageLoader.cs @@ -5,6 +5,7 @@ using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; +using System.Threading.Tasks; using System.Windows; using System.Windows.Interop; using System.Windows.Media; @@ -57,7 +58,6 @@ namespace Wox.Infrastructure.Image { try { - if (File.Exists(fileName) == false) return null; Icon icon = GetFileIcon(fileName) ?? Icon.ExtractAssociatedIcon(fileName); if (icon != null) { @@ -65,96 +65,93 @@ namespace Wox.Infrastructure.Image new Int32Rect(0, 0, icon.Width, icon.Height), BitmapSizeOptions.FromEmptyOptions()); } } - catch { } + catch (System.Exception e) + { + Log.Error(e); + } return null; } public static void PreloadImages() { - Stopwatch.Debug("Preload images from cache", () => + var path = Path.Combine(Wox.ProgramPath, "Images", "app.png"); + _imageSources[path] = new BitmapImage(new Uri(path)); + Task.Factory.StartNew(() => { - _cache.TopUsedImages.AsParallel().Where(i => !_imageSources.ContainsKey(i.Key)).ForAll(i => - { - var img = Load(i.Key, false); - if (img != null) - { - // todo happlebao magic - // the image created on other threads can be accessed from main ui thread, - // this line made it possible - // should be changed the Dispatcher.InvokeAsync in the future - img.Freeze(); - _imageSources[i.Key] = img; - } - }); + Stopwatch.Debug("Preload images from cache", () => + { + _cache.TopUsedImages.AsParallel().Where(i => !_imageSources.ContainsKey(i.Key)).ForAll(i => + { + var img = Load(i.Key); + if (img != null) + { + // todo happlebao magic + // the image created on other threads can be accessed from main ui thread, + // this line made it possible + // should be changed the Dispatcher.InvokeAsync in the future + img.Freeze(); + _imageSources[i.Key] = img; + } + }); + }); }); Log.Info($"Preload {_cache.TopUsedImages.Count} images from cache"); } - public static ImageSource Load(string path, bool addToCache = true) - { - ImageSource image = null; + public static ImageSource Load(string path) + { + ImageSource image; if (string.IsNullOrEmpty(path)) { path = Path.Combine(Wox.ProgramPath, "Images", "app.png"); - image = new BitmapImage(new Uri(path)); - return image; + image = _imageSources[path]; } - Stopwatch.Debug($"Loading image path: {path}", () => + else if (_imageSources.ContainsKey(path)) { + image = _imageSources[path]; + } + else + { + string ext = Path.GetExtension(path).ToLower(); - if (addToCache) + if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) { - _cache.Add(path); + image = new BitmapImage(new Uri(path)); + _imageSources[path] = image; } - - - if (_imageSources.ContainsKey(path)) + else if (File.Exists(path) && Path.IsPathRooted(path)) { - image = _imageSources[path]; + if (SelfExts.Contains(ext)) + { + image = GetIcon(path); + _imageSources[path] = image; + } + else if (ImageExts.Contains(ext)) + { + image = new BitmapImage(new Uri(path)); + _imageSources[path] = image; + } + else + { + path = Path.Combine(Wox.ProgramPath, "Images", "app.png"); + image = _imageSources[path]; + } } else { - string ext = Path.GetExtension(path).ToLower(); - - if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) + path = Path.Combine(Wox.ProgramPath, "Images", Path.GetFileName(path)); + if (File.Exists(path)) { image = new BitmapImage(new Uri(path)); } - else if (SelfExts.Contains(ext) && File.Exists(path)) + else { - image = GetIcon(path); - } - else if (!string.IsNullOrEmpty(path) && ImageExts.Contains(ext)) - { - if (File.Exists(path)) - { - image = new BitmapImage(new Uri(path)); - } - else - { - path = Path.Combine(Wox.ProgramPath, "Images", Path.GetFileName(path)); - if (File.Exists(path)) - { - image = new BitmapImage(new Uri(path)); - } - else - { - path = Path.Combine(Wox.ProgramPath, "Images", "app.png"); - image = new BitmapImage(new Uri(path)); - } - } - } - - if (image != null && addToCache) - { - if (!_imageSources.ContainsKey(path)) - { - _imageSources[path] = image; - } + path = Path.Combine(Wox.ProgramPath, "Images", "app.png"); + image = _imageSources[path]; } } - }); + } return image; } diff --git a/Wox.Infrastructure/Image/ImagePathConverter.cs b/Wox.Infrastructure/Image/ImagePathConverter.cs index 77747fbc92..0fd99c3719 100644 --- a/Wox.Infrastructure/Image/ImagePathConverter.cs +++ b/Wox.Infrastructure/Image/ImagePathConverter.cs @@ -2,9 +2,8 @@ using System; using System.Globalization; using System.Windows; using System.Windows.Data; -using Wox.Infrastructure.Image; -namespace Wox.Converters +namespace Wox.Infrastructure.Image { public class ImagePathConverter : IValueConverter { diff --git a/Wox.Infrastructure/Wox.Infrastructure.csproj b/Wox.Infrastructure/Wox.Infrastructure.csproj index 093b682489..55e750155e 100644 --- a/Wox.Infrastructure/Wox.Infrastructure.csproj +++ b/Wox.Infrastructure/Wox.Infrastructure.csproj @@ -77,6 +77,7 @@ + diff --git a/Wox.Plugin/PluginMetadata.cs b/Wox.Plugin/PluginMetadata.cs index 6c6dc5136e..bdf51d4030 100644 --- a/Wox.Plugin/PluginMetadata.cs +++ b/Wox.Plugin/PluginMetadata.cs @@ -6,6 +6,7 @@ namespace Wox.Plugin { public class PluginMetadata { + private string _pluginDirectory; public string ID { get; set; } public string Name { get; set; } public string Author { get; set; } @@ -15,39 +16,34 @@ namespace Wox.Plugin public string Website { get; set; } - public string ExecuteFilePath => Path.Combine(PluginDirectory, ExecuteFileName); + public string ExecuteFilePath { get; private set;} public string ExecuteFileName { get; set; } - public string PluginDirectory { get; set; } + public string PluginDirectory + { + get { return _pluginDirectory; } + internal set + { + _pluginDirectory = value; + ExecuteFilePath = Path.Combine(value, ExecuteFileName); + IcoPath = Path.Combine(value, IcoPath); + } + } [Obsolete("Use ActionKeywords instead, because Wox now support multiple action keywords. This will be remove in v1.3.0")] public string ActionKeyword { get; set; } public List ActionKeywords { get; set; } - public string IcoPath { get; set; } + public string IcoPath { get; set;} public override string ToString() { return Name; } - public string FullIcoPath - { - get - { - // Return the default icon if IcoPath is empty - if (string.IsNullOrEmpty(IcoPath)) - return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images\\work.png"); - - if (IcoPath.StartsWith("data:")) - { - return IcoPath; - } - - return Path.Combine(PluginDirectory, IcoPath); - } - } + [Obsolete("Use IcoPath")] + public string FullIcoPath => IcoPath; } } diff --git a/Wox.Plugin/Result.cs b/Wox.Plugin/Result.cs index 53f0658d91..aba637b01a 100644 --- a/Wox.Plugin/Result.cs +++ b/Wox.Plugin/Result.cs @@ -7,21 +7,24 @@ namespace Wox.Plugin public class Result { + private string _pluginDirectory; + private string _icoPath; public string Title { get; set; } public string SubTitle { get; set; } - public string IcoPath { get; set; } - public string FullIcoPath + public string IcoPath { - get + get { return _icoPath; } + set { - if (string.IsNullOrEmpty(IcoPath)) return string.Empty; - if (IcoPath.StartsWith("data:")) + if (!string.IsNullOrEmpty(PluginDirectory) && !Path.IsPathRooted(value)) { - return IcoPath; + _icoPath = Path.Combine(value, IcoPath); + } + else + { + _icoPath = value; } - - return Path.Combine(PluginDirectory, IcoPath); } } @@ -40,7 +43,18 @@ namespace Wox.Plugin /// /// Plugin directory /// - public string PluginDirectory { get; set; } + public string PluginDirectory + { + get { return _pluginDirectory; } + set + { + _pluginDirectory = value; + if (!string.IsNullOrEmpty(IcoPath) && Path.IsPathRooted(IcoPath)) + { + IcoPath = Path.Combine(value, IcoPath); + } + } + } public override bool Equals(object obj) { diff --git a/Wox/App.xaml.cs b/Wox/App.xaml.cs index caa00246b5..9fc782a359 100644 --- a/Wox/App.xaml.cs +++ b/Wox/App.xaml.cs @@ -39,7 +39,7 @@ namespace Wox base.OnStartup(e); RegisterUnhandledException(); - Task.Factory.StartNew(ImageLoader.PreloadImages); + ImageLoader.PreloadImages(); MainViewModel mainVM = new MainViewModel(); API = new PublicAPIInstance(mainVM, mainVM._settings); diff --git a/Wox/Converters/ConvertorBase.cs b/Wox/Converters/ConvertorBase.cs deleted file mode 100644 index d07965b0b3..0000000000 --- a/Wox/Converters/ConvertorBase.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Globalization; -using System.Windows.Data; -using System.Windows.Markup; - -namespace Wox.Converters -{ - public abstract class ConvertorBase : MarkupExtension, IValueConverter where T : class, new() - { - private static T converter; - - /// - /// Must be implemented in inheritor. - /// - public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture); - - /// - /// Override if needed. - /// - public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - - public override object ProvideValue(IServiceProvider serviceProvider) - { - return converter ?? (converter = new T()); - } - } -} \ No newline at end of file diff --git a/Wox/ResultListBox.xaml b/Wox/ResultListBox.xaml index e39899babb..5d73ee306b 100644 --- a/Wox/ResultListBox.xaml +++ b/Wox/ResultListBox.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:converters="clr-namespace:Wox.Converters" + xmlns:image="clr-namespace:Wox.Infrastructure.Image;assembly=Wox.Infrastructure" xmlns:vm="clr-namespace:Wox.ViewModel" mc:Ignorable="d" d:DesignWidth="100" d:DesignHeight="100" d:DataContext="{d:DesignInstance vm:ResultsViewModel}" @@ -27,7 +27,7 @@ - + @@ -35,7 +35,7 @@ + Source="{Binding IcoPath,Converter={StaticResource ImageConverter},IsAsync=True}" /> diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index 6df47ccd25..b0fc8b93e1 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -4,9 +4,7 @@ xmlns:wox="clr-namespace:Wox" x:Class="Wox.SettingWindow" xmlns:woxPlugin="clr-namespace:Wox.Plugin;assembly=Wox.Plugin" - xmlns:converters="clr-namespace:Wox.Converters" - xmlns:userSettings="clr-namespace:Wox.Core.UserSettings;assembly=Wox.Core" - xmlns:sys="clr-namespace:System;assembly=mscorlib" + xmlns:image="clr-namespace:Wox.Infrastructure.Image;assembly=Wox.Infrastructure" Icon="Images\app.png" Title="{DynamicResource woxsettings}" ResizeMode="NoResize" @@ -18,7 +16,7 @@ IsHitTestVisible="False" x:Key="FeatureBoxSeperator"> - + @@ -70,7 +68,7 @@ + Source="{Binding Metadata.IcoPath,Converter={StaticResource ImageConverter},IsAsync=True}" /> diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index c1cbd59d07..02f8f0d5c9 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -551,7 +551,7 @@ namespace Wox pluginAuthor.Text = InternationalizationManager.Instance.GetTranslation("author") + ": " + pair.Metadata.Author; pluginSubTitle.Text = pair.Metadata.Description; pluginId = pair.Metadata.ID; - pluginIcon.Source = ImageLoader.Load(pair.Metadata.FullIcoPath); + pluginIcon.Source = ImageLoader.Load(pair.Metadata.IcoPath); var customizedPluginConfig = _settings.PluginSettings[pluginId]; cbDisablePlugin.IsChecked = customizedPluginConfig != null && customizedPluginConfig.Disabled; diff --git a/Wox/ViewModel/ResultViewModel.cs b/Wox/ViewModel/ResultViewModel.cs index 35fb206ff8..d23af16d90 100644 --- a/Wox/ViewModel/ResultViewModel.cs +++ b/Wox/ViewModel/ResultViewModel.cs @@ -35,9 +35,10 @@ namespace Wox.ViewModel public string SubTitle => RawResult.SubTitle; - public string FullIcoPath => RawResult.FullIcoPath; - public string PluginID => RawResult.PluginID; + + public string IcoPath => RawResult.IcoPath; + public int Score { get { return RawResult.Score; } diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 4c1098898e..c9f4be0224 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -122,8 +122,6 @@ Properties\SolutionAssemblyInfo.cs - - @@ -378,9 +376,7 @@ PreserveNewest - - - + xcopy /Y $(ProjectDir)Themes\* $(TargetDir)Themes\