diff --git a/Plugins/Wox.Plugin.WebSearch/Languages/de.xaml b/Plugins/Wox.Plugin.WebSearch/Languages/de.xaml
index 1ff21cba4a..9cc70038b5 100644
--- a/Plugins/Wox.Plugin.WebSearch/Languages/de.xaml
+++ b/Plugins/Wox.Plugin.WebSearch/Languages/de.xaml
@@ -5,6 +5,7 @@
Löschen
Bearbeiten
Hinzufügen
+ Confirm
Aktionsschlüsselwort
URL
Suche
@@ -12,7 +13,7 @@
Bitte wähle einen Suchdienst
Willst du wirklich {0} löschen?
-
+
Titel
Aktivieren
diff --git a/Plugins/Wox.Plugin.WebSearch/Languages/en.xaml b/Plugins/Wox.Plugin.WebSearch/Languages/en.xaml
index cdfc44cb39..f3d8135ca3 100644
--- a/Plugins/Wox.Plugin.WebSearch/Languages/en.xaml
+++ b/Plugins/Wox.Plugin.WebSearch/Languages/en.xaml
@@ -5,13 +5,14 @@
Delete
Edit
Add
+ Confirm
Action Keyword
URL
Search
Enable search suggestions
Please select a web search
Are you sure you want to delete {0}?
-
+
Title
Enable
diff --git a/Plugins/Wox.Plugin.WebSearch/Languages/pl.xaml b/Plugins/Wox.Plugin.WebSearch/Languages/pl.xaml
index f3bb831aca..fb6acf9410 100644
--- a/Plugins/Wox.Plugin.WebSearch/Languages/pl.xaml
+++ b/Plugins/Wox.Plugin.WebSearch/Languages/pl.xaml
@@ -5,13 +5,14 @@
Usuń
Edytuj
Dodaj
+ Confirm
Wyzwalacz
Adres URL
Szukaj
Pokazuj podpowiedzi wyszukiwania
Musisz wybrać coś z listy
Czy jesteś pewnie że chcesz usunąć {0}?
-
+
Tytuł
Aktywne
diff --git a/Plugins/Wox.Plugin.WebSearch/Languages/zh-cn.xaml b/Plugins/Wox.Plugin.WebSearch/Languages/zh-cn.xaml
index 8800481360..d580fb0f51 100644
--- a/Plugins/Wox.Plugin.WebSearch/Languages/zh-cn.xaml
+++ b/Plugins/Wox.Plugin.WebSearch/Languages/zh-cn.xaml
@@ -5,6 +5,7 @@
删除
编辑
添加
+ 确认
触发关键字
URL
搜索
diff --git a/Plugins/Wox.Plugin.WebSearch/Languages/zh-tw.xaml b/Plugins/Wox.Plugin.WebSearch/Languages/zh-tw.xaml
index 9e665167c0..b0882d487c 100644
--- a/Plugins/Wox.Plugin.WebSearch/Languages/zh-tw.xaml
+++ b/Plugins/Wox.Plugin.WebSearch/Languages/zh-tw.xaml
@@ -5,6 +5,7 @@
刪除
編輯
添加
+ 确认
觸發關鍵字
URL
搜索
@@ -28,5 +29,5 @@
網頁搜索
提供網頁搜索能力
-
+
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/Main.cs b/Plugins/Wox.Plugin.WebSearch/Main.cs
index 43f92fad15..ca3bedef0c 100644
--- a/Plugins/Wox.Plugin.WebSearch/Main.cs
+++ b/Plugins/Wox.Plugin.WebSearch/Main.cs
@@ -6,28 +6,26 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Controls;
-using JetBrains.Annotations;
using Wox.Infrastructure;
using Wox.Infrastructure.Storage;
-using Wox.Plugin.WebSearch.SuggestionSources;
namespace Wox.Plugin.WebSearch
{
- public class Main : IPlugin, ISettingProvider, IPluginI18n, IMultipleActionKeywords, ISavable, IResultUpdated
+ public class Main : IPlugin, ISettingProvider, IPluginI18n, ISavable, IResultUpdated
{
- public PluginInitContext Context { get; private set; }
+ private PluginInitContext _context;
- private PluginJsonStorage _storage;
- private Settings _settings;
+ private readonly Settings _settings;
+ private readonly SettingsViewModel _viewModel;
private CancellationTokenSource _updateSource;
private CancellationToken _updateToken;
public const string Images = "Images";
- public static string ImagesDirectory;
+ public static readonly string ImagesDirectory;
public void Save()
{
- _storage.Save();
+ _viewModel.Save();
}
public List Query(Query query)
@@ -36,21 +34,21 @@ namespace Wox.Plugin.WebSearch
_updateSource = new CancellationTokenSource();
_updateToken = _updateSource.Token;
- WebSearch webSearch =
- _settings.WebSearches.FirstOrDefault(o => o.ActionKeyword == query.ActionKeyword && o.Enabled);
+ SearchSource searchSource =
+ _settings.SearchSources.FirstOrDefault(o => o.ActionKeyword == query.ActionKeyword && o.Enabled);
- if (webSearch != null)
+ if (searchSource != null)
{
string keyword = query.Search;
string title = keyword;
- string subtitle = Context.API.GetTranslation("wox_plugin_websearch_search") + " " + webSearch.Title;
+ string subtitle = _context.API.GetTranslation("wox_plugin_websearch_search") + " " + searchSource.Title;
if (string.IsNullOrEmpty(keyword))
{
var result = new Result
{
Title = subtitle,
SubTitle = string.Empty,
- IcoPath = webSearch.IconPath
+ IcoPath = searchSource.IconPath
};
return new List { result };
}
@@ -62,15 +60,15 @@ namespace Wox.Plugin.WebSearch
Title = title,
SubTitle = subtitle,
Score = 6,
- IcoPath = webSearch.IconPath,
+ IcoPath = searchSource.IconPath,
Action = c =>
{
- Process.Start(webSearch.Url.Replace("{q}", Uri.EscapeDataString(keyword)));
+ Process.Start(searchSource.Url.Replace("{q}", Uri.EscapeDataString(keyword)));
return true;
}
};
results.Add(result);
- UpdateResultsFromSuggestion(results, keyword, subtitle, webSearch, query);
+ UpdateResultsFromSuggestion(results, keyword, subtitle, searchSource, query);
return results;
}
}
@@ -80,14 +78,15 @@ namespace Wox.Plugin.WebSearch
}
}
- private void UpdateResultsFromSuggestion(List results, string keyword, string subtitle, WebSearch webSearch, Query query)
+ private void UpdateResultsFromSuggestion(List results, string keyword, string subtitle,
+ SearchSource searchSource, Query query)
{
- if (_settings.EnableWebSearchSuggestion)
+ if (_settings.EnableSuggestion)
{
const int waittime = 300;
var task = Task.Run(async () =>
{
- var suggestions = await Suggestions(keyword, subtitle, webSearch);
+ var suggestions = await Suggestions(keyword, subtitle, searchSource);
results.AddRange(suggestions);
}, _updateToken);
@@ -102,21 +101,21 @@ namespace Wox.Plugin.WebSearch
}
}
- private async Task> Suggestions(string keyword, string subtitle, WebSearch webSearch)
+ private async Task> Suggestions(string keyword, string subtitle, SearchSource searchSource)
{
- var source = SuggestionSource.GetSuggestionSource(_settings.WebSearchSuggestionSource);
+ var source = _settings.SelectedSuggestion;
if (source != null)
{
- var suggestions = await source.GetSuggestions(keyword);
+ var suggestions = await source.Suggestions(keyword);
var resultsFromSuggestion = suggestions.Select(o => new Result
{
Title = o,
SubTitle = subtitle,
Score = 5,
- IcoPath = webSearch.IconPath,
+ IcoPath = searchSource.IconPath,
Action = c =>
{
- Process.Start(webSearch.Url.Replace("{q}", Uri.EscapeDataString(o)));
+ Process.Start(searchSource.Url.Replace("{q}", Uri.EscapeDataString(o)));
return true;
}
});
@@ -127,18 +126,21 @@ namespace Wox.Plugin.WebSearch
static Main()
{
- var plugins = Infrastructure.Constant.Plugins;
+ var plugins = Constant.Plugins;
var assemblyName = typeof(Main).Assembly.GetName().Name;
- var pluginDirectory = Path.Combine(Infrastructure.Constant.SettingsPath, plugins, assemblyName);
+ var pluginDirectory = Path.Combine(Constant.SettingsPath, plugins, assemblyName);
ImagesDirectory = Path.Combine(pluginDirectory, Images);
}
+ public Main()
+ {
+ _viewModel = new SettingsViewModel();
+ _settings = _viewModel.Settings;
+ }
+
public void Init(PluginInitContext context)
{
- Context = context;
-
- _storage = new PluginJsonStorage();
- _settings = _storage.Load();
+ _context = context;
var pluginDirectory = context.CurrentPluginMetadata.PluginDirectory;
var bundledImagesDirectory = Path.Combine(pluginDirectory, Images);
@@ -149,43 +151,21 @@ namespace Wox.Plugin.WebSearch
public Control CreateSettingPanel()
{
- return new WebSearchesSetting(this, _settings);
+ return new SettingsControl(_context, _viewModel);
}
#endregion
public string GetTranslatedPluginTitle()
{
- return Context.API.GetTranslation("wox_plugin_websearch_plugin_name");
+ return _context.API.GetTranslation("wox_plugin_websearch_plugin_name");
}
public string GetTranslatedPluginDescription()
{
- return Context.API.GetTranslation("wox_plugin_websearch_plugin_description");
+ return _context.API.GetTranslation("wox_plugin_websearch_plugin_description");
}
- public bool IsInstantQuery(string query) => false;
-
- [NotifyPropertyChangedInvocator]
- public void NotifyActionKeywordsUpdated(string oldActionKeywords, string newActionKeywords)
- {
- ActionKeywordsChanged?.Invoke(this, new ActionKeywordsChangedEventArgs
- {
- OldActionKeyword = oldActionKeywords,
- NewActionKeyword = newActionKeywords
- });
- }
-
- [NotifyPropertyChangedInvocator]
- public void NotifyActionKeywordsAdded(string newActionKeywords)
- {
- ActionKeywordsChanged?.Invoke(this, new ActionKeywordsChangedEventArgs
- {
- NewActionKeyword = newActionKeywords
- });
- }
-
- public event ActionKeywordsChangedEventHandler ActionKeywordsChanged;
public event ResultUpdatedEventHandler ResultsUpdated;
}
-}
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SearchSourceViewModel.cs b/Plugins/Wox.Plugin.WebSearch/SearchSourceViewModel.cs
new file mode 100644
index 0000000000..6b343ae8fd
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SearchSourceViewModel.cs
@@ -0,0 +1,7 @@
+namespace Wox.Plugin.WebSearch
+{
+ public class SearchSourceViewModel
+ {
+ public SearchSource SearchSource { get; set; }
+ }
+}
diff --git a/Plugins/Wox.Plugin.WebSearch/Settings.cs b/Plugins/Wox.Plugin.WebSearch/Settings.cs
index aebec99c2e..ef5de0aed9 100644
--- a/Plugins/Wox.Plugin.WebSearch/Settings.cs
+++ b/Plugins/Wox.Plugin.WebSearch/Settings.cs
@@ -1,12 +1,23 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.ObjectModel;
+using Newtonsoft.Json;
+using Wox.Plugin.WebSearch.SuggestionSources;
namespace Wox.Plugin.WebSearch
{
- public class Settings
+ public class Settings : BaseModel
{
- public List WebSearches { get; set; } = new List
+ public Settings()
+ {
+ SelectedSuggestion = Suggestions[0];
+ if (SearchSources.Count > 0)
{
- new WebSearch
+ SelectedSearchSource = SearchSources[0];
+ }
+ }
+ public ObservableCollection SearchSources { get; set; } = new ObservableCollection
+ {
+ new SearchSource
{
Title = "Google",
ActionKeyword = "g",
@@ -14,7 +25,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://www.google.com/search?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Google Scholar",
ActionKeyword = "sc",
@@ -22,7 +33,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://scholar.google.com/scholar?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Wikipedia",
ActionKeyword = "wiki",
@@ -30,7 +41,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://en.wikipedia.org/wiki/{q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "FindIcon",
ActionKeyword = "findicon",
@@ -38,7 +49,7 @@ namespace Wox.Plugin.WebSearch
Url = "http://findicons.com/search/{q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Facebook",
ActionKeyword = "facebook",
@@ -46,7 +57,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://www.facebook.com/search/?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Twitter",
ActionKeyword = "twitter",
@@ -54,7 +65,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://twitter.com/search?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Google Maps",
ActionKeyword = "maps",
@@ -62,7 +73,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://maps.google.com/maps?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Google Translate",
ActionKeyword = "translate",
@@ -70,7 +81,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://translate.google.com/#auto|en|{q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Duckduckgo",
ActionKeyword = "duckduckgo",
@@ -78,7 +89,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://duckduckgo.com/?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Github",
ActionKeyword = "github",
@@ -86,7 +97,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://github.com/search?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Github Gist",
ActionKeyword = "gist",
@@ -94,7 +105,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://gist.github.com/search?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Gmail",
ActionKeyword = "gmail",
@@ -102,7 +113,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://mail.google.com/mail/ca/u/0/#apps/{q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Google Drive",
ActionKeyword = "drive",
@@ -110,7 +121,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://drive.google.com/?hl=en&tab=bo#search/{q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Wolframalpha",
ActionKeyword = "wolframalpha",
@@ -118,7 +129,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://www.wolframalpha.com/input/?i={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Stackoverflow",
ActionKeyword = "stackoverflow",
@@ -126,7 +137,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://stackoverflow.com/search?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "I'm Feeling Lucky",
ActionKeyword = "lucky",
@@ -134,7 +145,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://google.com/search?q={q}&btnI=I",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Google Image",
ActionKeyword = "image",
@@ -142,7 +153,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://www.google.com/search?q={q}&tbm=isch",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Youtube",
ActionKeyword = "youtube",
@@ -150,7 +161,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://www.youtube.com/results?search_query={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Bing",
ActionKeyword = "bing",
@@ -158,7 +169,7 @@ namespace Wox.Plugin.WebSearch
Url = "https://www.bing.com/search?q={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
Title = "Yahoo",
ActionKeyword = "yahoo",
@@ -166,18 +177,50 @@ namespace Wox.Plugin.WebSearch
Url = "https://www.search.yahoo.com/search?p={q}",
Enabled = true
},
- new WebSearch
+ new SearchSource
{
- Title= "Baidu",
- ActionKeyword= "bd",
- Icon= "baidu.png",
- Url="https://www.baidu.com/#ie=UTF-8&wd={q}",
- Enabled= true
+ Title = "Baidu",
+ ActionKeyword = "bd",
+ Icon = "baidu.png",
+ Url = "https://www.baidu.com/#ie=UTF-8&wd={q}",
+ Enabled = true
}
};
- public bool EnableWebSearchSuggestion { get; set; }
+ [JsonIgnore]
+ public SearchSource SelectedSearchSource { get; set; }
+
+ public bool EnableSuggestion { get; set; }
+
+ [JsonIgnore]
+ public SuggestionSource[] Suggestions { get; set; } = {
+ new Google(),
+ new Baidu()
+ };
+
+ [JsonIgnore]
+ public SuggestionSource SelectedSuggestion { get; set; }
+
+ ///
+ /// used to store Settings.json only
+ ///
+ public string Suggestion
+ {
+ get
+ {
+ return SelectedSuggestion.ToString();
+ }
+ set
+ {
+ foreach (var s in Suggestions)
+ {
+ if (string.Equals(s.ToString(), value, StringComparison.OrdinalIgnoreCase))
+ {
+ SelectedSuggestion = s;
+ }
+ }
+ }
+ }
- public string WebSearchSuggestionSource { get; set; }
}
}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SettingsViewModel.cs b/Plugins/Wox.Plugin.WebSearch/SettingsViewModel.cs
new file mode 100644
index 0000000000..6a727a5ddb
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SettingsViewModel.cs
@@ -0,0 +1,22 @@
+using Wox.Infrastructure.Storage;
+
+namespace Wox.Plugin.WebSearch
+{
+ public class SettingsViewModel
+ {
+ private readonly JsonStrorage _storage;
+
+ public SettingsViewModel()
+ {
+ _storage = new PluginJsonStorage();
+ Settings = _storage.Load();
+ }
+
+ public Settings Settings { get; set; }
+
+ public void Save()
+ {
+ _storage.Save();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Baidu.cs b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Baidu.cs
index a2a5b62fe2..0c71d7a2b4 100644
--- a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Baidu.cs
+++ b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Baidu.cs
@@ -13,11 +13,9 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
{
public class Baidu : SuggestionSource
{
- public override string Domain { get; set; } = "www.baidu.com";
+ private readonly Regex _reg = new Regex("window.baidu.sug\\((.*)\\)");
- Regex reg = new Regex("window.baidu.sug\\((.*)\\)");
-
- public override async Task> GetSuggestions(string query)
+ public override async Task> Suggestions(string query)
{
string result;
@@ -30,12 +28,12 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
{
Log.Warn("Can't get suggestion from baidu");
Log.Exception(e);
- return new List(); ;
+ return new List();
+ ;
}
if (string.IsNullOrEmpty(result)) return new List();
-
- Match match = reg.Match(result);
+ Match match = _reg.Match(result);
if (match.Success)
{
JContainer json;
@@ -61,5 +59,10 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
return new List();
}
+
+ public override string ToString()
+ {
+ return "Baidu";
+ }
}
-}
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Google.cs b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Google.cs
index 95097f9a65..6d1f9eaa94 100644
--- a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Google.cs
+++ b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Google.cs
@@ -12,8 +12,7 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
{
public class Google : SuggestionSource
{
- public override string Domain { get; set; } = "www.google.com";
- public override async Task> GetSuggestions(string query)
+ public override async Task> Suggestions(string query)
{
string result;
try
@@ -25,7 +24,8 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
{
Log.Warn("Can't get suggestion from google");
Log.Exception(e);
- return new List(); ;
+ return new List();
+ ;
}
if (string.IsNullOrEmpty(result)) return new List();
JContainer json;
@@ -48,5 +48,10 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
}
return new List();
}
+
+ public override string ToString()
+ {
+ return "Google";
+ }
}
-}
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/ISuggestionSource.cs b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/ISuggestionSource.cs
index f7317b8b04..c56c892418 100644
--- a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/ISuggestionSource.cs
+++ b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/ISuggestionSource.cs
@@ -3,25 +3,9 @@ using System.Threading.Tasks;
namespace Wox.Plugin.WebSearch.SuggestionSources
{
+ //todo rename file
public abstract class SuggestionSource
{
- public virtual string Domain { get; set; }
-
- public abstract Task> GetSuggestions(string query);
-
- public static SuggestionSource GetSuggestionSource(string name)
- {
- switch (name.ToLower())
- {
- case "google":
- return new Google();
-
- case "baidu":
- return new Baidu();
-
- default:
- return null;
- }
- }
+ public abstract Task> Suggestions(string query);
}
-}
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearch.cs b/Plugins/Wox.Plugin.WebSearch/WebSearch.cs
index 0b645a990e..46cbc47970 100644
--- a/Plugins/Wox.Plugin.WebSearch/WebSearch.cs
+++ b/Plugins/Wox.Plugin.WebSearch/WebSearch.cs
@@ -1,40 +1,43 @@
using System.IO;
+using System.Windows.Media;
using JetBrains.Annotations;
using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
+using Wox.Infrastructure.Image;
namespace Wox.Plugin.WebSearch
{
- public class WebSearch
+ public class SearchSource : BaseModel
{
public const string DefaultIcon = "web_search.png";
public string Title { get; set; }
public string ActionKeyword { get; set; }
- [NotNull]
- private string _icon = DefaultIcon;
[NotNull]
- public string Icon
- {
- get { return _icon; }
- set
- {
- _icon = value;
- IconPath = Path.Combine(Main.ImagesDirectory, value);
- }
- }
+ public string Icon { private get; set; } = DefaultIcon;
///
/// All icon should be put under Images directory
///
[NotNull]
[JsonIgnore]
- internal string IconPath { get; private set; } = Path.Combine
- (
- Main.ImagesDirectory, DefaultIcon
- );
+ internal string IconPath => Path.Combine(Main.ImagesDirectory, Icon);
+ [JsonIgnore]
+ public ImageSource Image => ImageLoader.Load(IconPath);
public string Url { get; set; }
public bool Enabled { get; set; }
+
+ public SearchSource DeepCopy()
+ {
+ var webSearch = new SearchSource
+ {
+ Title = string.Copy(Title),
+ ActionKeyword = string.Copy(ActionKeyword),
+ Url = string.Copy(Url),
+ Icon = string.Copy(Icon),
+ Enabled = Enabled
+ };
+ return webSearch;
+ }
}
}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml
index c83f9ae08a..00c2d13dc9 100644
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml
+++ b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml
@@ -1,42 +1,60 @@
-
+ Title="Search Source Setting" Height="300" Width="500"
+ d:DataContext="{d:DesignInstance vm:SearchSourceViewModel}">
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs
index 45e5335659..5464bcef47 100644
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs
+++ b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs
@@ -1,150 +1,150 @@
-using System;
+using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Windows;
using Microsoft.Win32;
-using Wox.Infrastructure.Exception;
-using Wox.Infrastructure.Image;
+using Wox.Core.Plugin;
namespace Wox.Plugin.WebSearch
{
- public partial class WebSearchSetting
+ public partial class SearchSourceSettingWindow
{
- private readonly WebSearchesSetting _settingWindow;
- private bool _isUpdate;
- private WebSearch _webSearch;
- private readonly PluginInitContext _context;
- private readonly Main _plugin;
- private readonly Settings _settings;
+ private readonly SearchSource _oldSearchSource;
+ private SearchSource _searchSource;
+ private IList _searchSources;
+ private Action _action;
+ private PluginInitContext _context;
+ private IPublicAPI _api;
+ private SearchSourceViewModel _viewModel;
- public WebSearchSetting(WebSearchesSetting settingWidow, Settings settings)
+
+ public SearchSourceSettingWindow(IList sources, PluginInitContext context, SearchSource old)
+ {
+ _oldSearchSource = old;
+ _viewModel = new SearchSourceViewModel { SearchSource = old.DeepCopy() };
+ Initilize(sources, context, Action.Edit);
+ }
+
+ public SearchSourceSettingWindow(IList sources, PluginInitContext context)
+ {
+ _viewModel = new SearchSourceViewModel { SearchSource = new SearchSource() };
+ Initilize(sources, context, Action.Add);
+ }
+
+ private void Initilize(IList sources, PluginInitContext context, Action action)
{
InitializeComponent();
- WebSearchName.Focus();
- _plugin = settingWidow.Plugin;
- _context = settingWidow.Context;
- _settingWindow = settingWidow;
- _settings = settings;
+ DataContext = _viewModel;
+ _searchSource = _viewModel.SearchSource;
+ _searchSources = sources;
+ _action = action;
+ _context = context;
+ _api = _context.API;
}
- public void UpdateItem(WebSearch webSearch)
- {
- _webSearch = _settings.WebSearches.FirstOrDefault(o => o == webSearch);
- if (_webSearch == null || string.IsNullOrEmpty(_webSearch.Url))
- {
-
- string warning = _context.API.GetTranslation("wox_plugin_websearch_invalid_web_search");
- MessageBox.Show(warning);
- Close();
- return;
- }
-
- _isUpdate = true;
- ConfirmButton.Content = "Update";
- 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)
- {
- _webSearch = webSearch;
- WebSearchIcon.Source = ImageLoader.Load(webSearch.IconPath);
- }
-
- private void CancelButtonOnClick(object sender, RoutedEventArgs e)
+ private void OnCancelButtonClick(object sender, RoutedEventArgs e)
{
Close();
}
- ///
- /// Confirm button for both add and update
- ///
- private void ConfirmButtonOnClick(object sender, RoutedEventArgs e)
+ private void OnConfirmButtonClick(object sender, RoutedEventArgs e)
{
- string title = WebSearchName.Text;
- if (string.IsNullOrEmpty(title))
- {
- string warning = _context.API.GetTranslation("wox_plugin_websearch_input_title");
- MessageBox.Show(warning);
- return;
- }
- string url = Url.Text;
- if (string.IsNullOrEmpty(url))
+ if (string.IsNullOrEmpty(_searchSource.Title))
{
- string warning = _context.API.GetTranslation("wox_plugin_websearch_input_url");
+ var warning = _api.GetTranslation("wox_plugin_websearch_input_title");
MessageBox.Show(warning);
- return;
}
-
- string newActionKeyword = Actionword.Text.Trim();
-
- if (_isUpdate)
+ else if (string.IsNullOrEmpty(_searchSource.Url))
{
- try
- {
- _plugin.NotifyActionKeywordsUpdated(_webSearch.ActionKeyword, newActionKeyword);
- }
- catch (WoxPluginException exception)
- {
- MessageBox.Show(exception.Message);
- return;
- }
+ var warning = _api.GetTranslation("wox_plugin_websearch_input_url");
+ MessageBox.Show(warning);
+ }
+ else if (string.IsNullOrEmpty(_searchSource.ActionKeyword))
+ {
+ var warning = _api.GetTranslation("wox_plugin_websearch_input_action_keyword");
+ MessageBox.Show(warning);
+ }
+ else if (_action == Action.Add)
+ {
+ AddSearchSource();
+ }
+ else if (_action == Action.Edit)
+ {
+ EditSearchSource();
+ }
+ }
+
+ private void AddSearchSource()
+ {
+ var keyword = _searchSource.ActionKeyword;
+ if (!PluginManager.ActionKeywordRegistered(keyword))
+ {
+ var id = _context.CurrentPluginMetadata.ID;
+ PluginManager.AddActionKeyword(id, keyword);
+
+ _searchSources.Add(_searchSource);
+
+ var info = _api.GetTranslation("succeed");
+ MessageBox.Show(info);
+ Close();
}
else
{
- try
- {
- _plugin.NotifyActionKeywordsAdded(newActionKeyword);
- }
- catch (WoxPluginException exception)
- {
- MessageBox.Show(exception.Message);
- return;
- }
-
- _settings.WebSearches.Add(_webSearch);
+ var warning = _api.GetTranslation("newActionKeywordsHasBeenAssigned");
+ MessageBox.Show(warning);
}
-
- _webSearch.ActionKeyword = newActionKeyword;
- _webSearch.Enabled = EnableCheckBox.IsChecked ?? false;
- _webSearch.Url = url;
- _webSearch.Title = title;
-
- _settingWindow.ReloadWebSearchView();
- Close();
}
- private void SelectIconButtonOnClick(object sender, RoutedEventArgs e)
+ private void EditSearchSource()
+ {
+ var keyword = _searchSource.ActionKeyword;
+ if (!PluginManager.ActionKeywordRegistered(keyword))
+ {
+ var newKeyword = keyword;
+ var oldKeyword = _oldSearchSource.ActionKeyword;
+ var id = _context.CurrentPluginMetadata.ID;
+ PluginManager.ReplaceActionKeyword(id, oldKeyword, newKeyword);
+
+ var index = _searchSources.IndexOf(_oldSearchSource);
+ _searchSources[index] = _searchSource;
+
+ var info = _api.GetTranslation("succeed");
+ MessageBox.Show(info);
+ Close();
+ }
+ else
+ {
+ var warning = _api.GetTranslation("newActionKeywordsHasBeenAssigned");
+ MessageBox.Show(warning);
+ }
+ }
+
+ private void OnSelectIconClick(object sender, RoutedEventArgs e)
{
var directory = Path.Combine(Main.ImagesDirectory, Main.Images);
- var dlg = new OpenFileDialog
- {
- InitialDirectory = directory,
- Filter = "Image files (*.jpg, *.jpeg, *.gif, *.png, *.bmp) |*.jpg; *.jpeg; *.gif; *.png; *.bmp"
- };
+ const string filter = "Image files (*.jpg, *.jpeg, *.gif, *.png, *.bmp) |*.jpg; *.jpeg; *.gif; *.png; *.bmp";
+ var dialog = new OpenFileDialog { InitialDirectory = directory, Filter = filter };
- bool? result = dlg.ShowDialog();
- if (result != null && result == true)
+ var result = dialog.ShowDialog();
+ if (result == true)
{
- string fullpath = dlg.FileName;
- if (fullpath != null)
+ var fullpath = dialog.FileName;
+ if (!string.IsNullOrEmpty(fullpath))
{
- _webSearch.Icon = Path.GetFileName(fullpath);
- if (File.Exists(_webSearch.IconPath))
+ _searchSource.Icon = Path.GetFileName(fullpath);
+ if (!File.Exists(_searchSource.IconPath))
{
- WebSearchIcon.Source = ImageLoader.Load(_webSearch.IconPath);
- }
- else
- {
- _webSearch.Icon = WebSearch.DefaultIcon;
+ _searchSource.Icon = SearchSource.DefaultIcon;
MessageBox.Show($"The file should be put under {directory}");
}
}
}
}
}
-}
+
+ public enum Action
+ {
+ Add,
+ Edit
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml b/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml
index 8b3de73c8a..01b2d25c66 100644
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml
+++ b/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml
@@ -1,35 +1,45 @@
-
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
@@ -37,9 +47,12 @@
-
-
-
+
+
+
-
+
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml.cs
index 44fd714c8c..8d32ecd1ce 100644
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml.cs
+++ b/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml.cs
@@ -1,120 +1,54 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
+using System.Windows;
using System.Windows.Controls;
+using Wox.Core.Plugin;
namespace Wox.Plugin.WebSearch
{
///
/// Interaction logic for WebSearchesSetting.xaml
///
- public partial class WebSearchesSetting : UserControl
+ public partial class SettingsControl : UserControl
{
- private Settings _settings;
- public PluginInitContext Context { get; }
- public Main Plugin { get; }
+ private readonly Settings _settings;
+ private readonly PluginInitContext _context;
- public WebSearchesSetting(Main plugin, Settings settings)
+ public SettingsControl(PluginInitContext context, SettingsViewModel viewModel)
{
- Context = plugin.Context;
- Plugin = plugin;
InitializeComponent();
- Loaded += Setting_Loaded;
- _settings = settings;
+ _context = context;
+ _settings = viewModel.Settings;
+ DataContext = viewModel;
}
- private void Setting_Loaded(object sender, RoutedEventArgs e)
+ private void OnAddSearchSearchClick(object sender, RoutedEventArgs e)
{
- webSearchView.ItemsSource = _settings.WebSearches;
- cbEnableWebSearchSuggestion.IsChecked = _settings.EnableWebSearchSuggestion;
- comboBoxSuggestionSource.Visibility = _settings.EnableWebSearchSuggestion
- ? Visibility.Visible
- : Visibility.Collapsed;
-
- List items = new List
- {
- new ComboBoxItem {Content = "Google"},
- new ComboBoxItem {Content = "Baidu"}
- };
- ComboBoxItem selected = items.FirstOrDefault(o => o.Content.ToString() == _settings.WebSearchSuggestionSource);
- if (selected == null)
- {
- selected = items[0];
- }
- comboBoxSuggestionSource.ItemsSource = items;
- comboBoxSuggestionSource.SelectedItem = selected;
- }
-
- public void ReloadWebSearchView()
- {
- webSearchView.Items.Refresh();
- }
-
-
- private void btnAddWebSearch_OnClick(object sender, RoutedEventArgs e)
- {
- var setting = new WebSearchSetting(this, _settings);
- var webSearch = new WebSearch();
-
-
- setting.AddItem(webSearch);
+ var setting = new SearchSourceSettingWindow(_settings.SearchSources, _context);
setting.ShowDialog();
}
- private void btnDeleteWebSearch_OnClick(object sender, RoutedEventArgs e)
+ private void OnDeleteSearchSearchClick(object sender, RoutedEventArgs e)
{
- WebSearch selectedWebSearch = webSearchView.SelectedItem as WebSearch;
- if (selectedWebSearch != null)
- {
- string msg = string.Format(Context.API.GetTranslation("wox_plugin_websearch_delete_warning"), selectedWebSearch.Title);
+ var selected = _settings.SelectedSearchSource;
+ var warning = _context.API.GetTranslation("wox_plugin_websearch_delete_warning");
+ var formated = string.Format(warning, selected.Title);
- if (MessageBox.Show(msg, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.Yes)
- {
- _settings.WebSearches.Remove(selectedWebSearch);
- webSearchView.Items.Refresh();
- }
- }
- else
+ var result = MessageBox.Show(formated, string.Empty, MessageBoxButton.YesNo);
+ if (result == MessageBoxResult.Yes)
{
- string warning = Context.API.GetTranslation("wox_plugin_websearch_pls_select_web_search");
- MessageBox.Show(warning);
+ var id = _context.CurrentPluginMetadata.ID;
+ PluginManager.RemoveActionKeyword(id, selected.ActionKeyword);
+ _settings.SearchSources.Remove(selected);
}
}
- private void btnEditWebSearch_OnClick(object sender, RoutedEventArgs e)
+ private void OnEditSearchSourceClick(object sender, RoutedEventArgs e)
{
- WebSearch selectedWebSearch = webSearchView.SelectedItem as WebSearch;
- if (selectedWebSearch != null)
- {
- WebSearchSetting webSearch = new WebSearchSetting(this, _settings);
- webSearch.UpdateItem(selectedWebSearch);
- webSearch.ShowDialog();
- }
- else
- {
- string warning = Context.API.GetTranslation("wox_plugin_websearch_pls_select_web_search");
- MessageBox.Show(warning);
- }
- }
-
- private void CbEnableWebSearchSuggestion_OnChecked(object sender, RoutedEventArgs e)
- {
- comboBoxSuggestionSource.Visibility = Visibility.Visible;
- _settings.EnableWebSearchSuggestion = true;
- }
-
- private void CbEnableWebSearchSuggestion_OnUnchecked(object sender, RoutedEventArgs e)
- {
- comboBoxSuggestionSource.Visibility = Visibility.Collapsed;
- _settings.EnableWebSearchSuggestion = false;
- }
-
- private void ComboBoxSuggestionSource_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (e.AddedItems.Count > 0)
- {
- _settings.WebSearchSuggestionSource = ((ComboBoxItem)e.AddedItems[0]).Content.ToString();
- }
+ var selected = _settings.SelectedSearchSource;
+ var webSearch = new SearchSourceSettingWindow
+ (
+ _settings.SearchSources, _context, selected
+ );
+ webSearch.ShowDialog();
}
}
-}
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj
index 8826164da9..f18715843c 100644
--- a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj
+++ b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj
@@ -59,6 +59,8 @@
Properties\SolutionAssemblyInfo.cs
+
+
@@ -162,6 +164,10 @@
+
+ {B749F0DB-8E75-47DB-9E5E-265D16D0C0D2}
+ Wox.Core
+
{4fd29318-a8ab-4d8f-aa47-60bc241b8da3}
Wox.Infrastructure
diff --git a/Plugins/Wox.Plugin.WebSearch/packages.config b/Plugins/Wox.Plugin.WebSearch/packages.config
index c624079be1..86d89a0830 100644
--- a/Plugins/Wox.Plugin.WebSearch/packages.config
+++ b/Plugins/Wox.Plugin.WebSearch/packages.config
@@ -1,4 +1,5 @@
+
diff --git a/SolutionAssemblyInfo.cs b/SolutionAssemblyInfo.cs
index dccf0426c3..17bc04fb3a 100644
--- a/SolutionAssemblyInfo.cs
+++ b/SolutionAssemblyInfo.cs
@@ -2,6 +2,7 @@ using System.Reflection;
using System.Runtime.InteropServices;
#if DEBUG
+
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Debug build, https://github.com/Wox-launcher/Wox")]
#else
diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs
index d2f768bb63..3685efa612 100644
--- a/Wox.Core/Plugin/PluginManager.cs
+++ b/Wox.Core/Plugin/PluginManager.cs
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using System.Threading;
using System.Threading.Tasks;
using Wox.Core.Resource;
using Wox.Infrastructure;
@@ -30,16 +29,17 @@ namespace Wox.Core.Plugin
public static readonly Dictionary NonGlobalPlugins = new Dictionary();
public static IPublicAPI API { private set; get; }
+
// todo happlebao, this should not be public, the indicator function should be embeded
public static PluginsSettings Settings;
private static List _metadatas;
- private static readonly string[] Directories = { Infrastructure.Constant.PreinstalledDirectory, Infrastructure.Constant.UserDirectory };
+ private static readonly string[] Directories = { Constant.PreinstalledDirectory, Constant.UserDirectory };
private static void ValidateUserDirectory()
{
- if (!Directory.Exists(Infrastructure.Constant.UserDirectory))
+ if (!Directory.Exists(Constant.UserDirectory))
{
- Directory.CreateDirectory(Infrastructure.Constant.UserDirectory);
+ Directory.CreateDirectory(Constant.UserDirectory);
}
}
@@ -238,59 +238,58 @@ namespace Wox.Core.Plugin
}
- public static void UpdateActionKeywordForPlugin(PluginPair plugin, string oldActionKeyword, string newActionKeyword)
+ public static bool ActionKeywordRegistered(string actionKeyword)
{
- var actionKeywords = plugin.Metadata.ActionKeywords;
- if (string.IsNullOrEmpty(newActionKeyword))
+ if (actionKeyword != Query.GlobalPluginWildcardSign &&
+ NonGlobalPlugins.ContainsKey(actionKeyword))
{
- string msg = InternationalizationManager.Instance.GetTranslation("newActionKeywordsCannotBeEmpty");
- throw new WoxPluginException(plugin.Metadata.Name, msg);
+ return true;
}
- // do nothing if they are same
- if (oldActionKeyword == newActionKeyword) return;
- if (NonGlobalPlugins.ContainsKey(newActionKeyword))
- {
- string msg = InternationalizationManager.Instance.GetTranslation("newActionKeywordsHasBeenAssigned");
- throw new WoxPluginException(plugin.Metadata.Name, msg);
- }
-
- // add new action keyword
- if (string.IsNullOrEmpty(oldActionKeyword))
- {
- actionKeywords.Add(newActionKeyword);
- if (newActionKeyword == Query.GlobalPluginWildcardSign)
- {
- GlobalPlugins.Add(plugin);
- }
- else
- {
- NonGlobalPlugins[newActionKeyword] = plugin;
- }
- }
- // update existing action keyword
else
{
- int index = actionKeywords.IndexOf(oldActionKeyword);
- actionKeywords[index] = newActionKeyword;
- if (oldActionKeyword == Query.GlobalPluginWildcardSign)
- {
- GlobalPlugins.Remove(plugin);
- }
- else
- {
- NonGlobalPlugins.Remove(oldActionKeyword);
- }
- if (newActionKeyword == Query.GlobalPluginWildcardSign)
- {
- GlobalPlugins.Add(plugin);
- }
- else
- {
- NonGlobalPlugins[newActionKeyword] = plugin;
- }
+ return false;
}
-
}
+ public static void AddActionKeyword(string id, string newActionKeyword)
+ {
+ var plugin = GetPluginForId(id);
+ if (newActionKeyword == Query.GlobalPluginWildcardSign)
+ {
+ GlobalPlugins.Add(plugin);
+ }
+ else
+ {
+ NonGlobalPlugins[newActionKeyword] = plugin;
+ }
+ AllPlugins.Add(plugin);
+
+ plugin.Metadata.ActionKeywords.Add(newActionKeyword);
+ }
+
+ public static void RemoveActionKeyword(string id, string oldActionkeyword)
+ {
+ var plugin = GetPluginForId(id);
+ if (oldActionkeyword == Query.GlobalPluginWildcardSign)
+ {
+ GlobalPlugins.Remove(plugin);
+ }
+ else
+ {
+ NonGlobalPlugins.Remove(oldActionkeyword);
+ }
+ AllPlugins.Remove(plugin);
+
+ plugin.Metadata.ActionKeywords.Remove(oldActionkeyword);
+ }
+
+ public static void ReplaceActionKeyword(string id, string oldActionKeyword, string newActionKeyword)
+ {
+ if (oldActionKeyword != newActionKeyword)
+ {
+ AddActionKeyword(id, newActionKeyword);
+ RemoveActionKeyword(id, oldActionKeyword);
+ }
+ }
}
}
diff --git a/Wox.Infrastructure/Exception/WoxPluginException.cs b/Wox.Infrastructure/Exception/WoxPluginException.cs
index d94788b4db..b68af28ab0 100644
--- a/Wox.Infrastructure/Exception/WoxPluginException.cs
+++ b/Wox.Infrastructure/Exception/WoxPluginException.cs
@@ -14,9 +14,5 @@
{
PluginName = pluginName;
}
-
- public WoxPluginException(string msg) : base(msg)
- {
- }
}
}
diff --git a/Wox.Infrastructure/UserSettings/PluginSettings.cs b/Wox.Infrastructure/UserSettings/PluginSettings.cs
index cc84d609e1..c80ee7e722 100644
--- a/Wox.Infrastructure/UserSettings/PluginSettings.cs
+++ b/Wox.Infrastructure/UserSettings/PluginSettings.cs
@@ -34,12 +34,6 @@ namespace Wox.Infrastructure.UserSettings
}
}
}
-
- public void UpdateActionKeyword(PluginMetadata metadata)
- {
- var settings = Plugins[metadata.ID];
- settings.ActionKeywords = metadata.ActionKeywords;
- }
}
public class Plugin
{
diff --git a/Wox.Plugin/Feature.cs b/Wox.Plugin/Feature.cs
index 4da04e5ba4..6d1aa37fd3 100644
--- a/Wox.Plugin/Feature.cs
+++ b/Wox.Plugin/Feature.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Collections.Specialized;
namespace Wox.Plugin
{
@@ -37,19 +38,6 @@ namespace Wox.Plugin
string GetTranslatedPluginDescription();
}
- public interface IMultipleActionKeywords : IFeatures
- {
- event ActionKeywordsChangedEventHandler ActionKeywordsChanged;
- }
-
- public class ActionKeywordsChangedEventArgs : EventArgs
- {
- public string OldActionKeyword { get; set; }
- public string NewActionKeyword { get; set; }
- }
-
- public delegate void ActionKeywordsChangedEventHandler(IMultipleActionKeywords sender, ActionKeywordsChangedEventArgs e);
-
public interface IResultUpdated : IFeatures
{
event ResultUpdatedEventHandler ResultsUpdated;
diff --git a/Wox/ActionKeywords.xaml.cs b/Wox/ActionKeywords.xaml.cs
index 676eade660..2dc0e02bd1 100644
--- a/Wox/ActionKeywords.xaml.cs
+++ b/Wox/ActionKeywords.xaml.cs
@@ -11,6 +11,7 @@ namespace Wox
{
private PluginPair _plugin;
private Settings _settings;
+ private readonly Internationalization _translater = InternationalizationManager.Instance;
public ActionKeywords(string pluginId, Settings settings)
{
@@ -19,7 +20,7 @@ namespace Wox
_settings = settings;
if (_plugin == null)
{
- MessageBox.Show(InternationalizationManager.Instance.GetTranslation("cannotFindSpecifiedPlugin"));
+ MessageBox.Show(_translater.GetTranslation("cannotFindSpecifiedPlugin"));
Close();
}
}
@@ -39,21 +40,18 @@ namespace Wox
{
var oldActionKeyword = _plugin.Metadata.ActionKeywords[0];
var newActionKeyword = tbAction.Text.Trim();
- try
+ if (!PluginManager.ActionKeywordRegistered(newActionKeyword))
{
- // update in-memory data
- PluginManager.UpdateActionKeywordForPlugin(_plugin, oldActionKeyword, newActionKeyword);
+ var id = _plugin.Metadata.ID;
+ PluginManager.ReplaceActionKeyword(id, oldActionKeyword, newActionKeyword);
+ MessageBox.Show(_translater.GetTranslation("succeed"));
+ Close();
}
- catch (WoxPluginException e)
+ else
{
- MessageBox.Show(e.Message);
- return;
+ string msg = _translater.GetTranslation("newActionKeywordsHasBeenAssigned");
+ MessageBox.Show(msg);
}
- // update persistant data
- _settings.PluginSettings.UpdateActionKeyword(_plugin.Metadata);
-
- MessageBox.Show(InternationalizationManager.Instance.GetTranslation("succeed"));
- Close();
}
}
}
diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml
index 1f85073ff5..b7ebd1de43 100644
--- a/Wox/SettingWindow.xaml
+++ b/Wox/SettingWindow.xaml
@@ -83,10 +83,10 @@
-
-
+
@@ -119,8 +119,8 @@
-
@@ -128,14 +128,14 @@
VerticalAlignment="Bottom" Opacity="0.5">
-
+
-
-
diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs
index 060b399eb4..4b92841013 100644
--- a/Wox/SettingWindow.xaml.cs
+++ b/Wox/SettingWindow.xaml.cs
@@ -214,15 +214,15 @@ namespace Wox
private void OnPluginToggled(object sender, RoutedEventArgs e)
{
- var id = _viewModel.SelectedPlugin.Metadata.ID;
- _settings.PluginSettings.Plugins[id].Disabled = _viewModel.SelectedPlugin.Metadata.Disabled;
+ var id = _viewModel.SelectedPlugin.PluginPair.Metadata.ID;
+ _settings.PluginSettings.Plugins[id].Disabled = _viewModel.SelectedPlugin.PluginPair.Metadata.Disabled;
}
private void OnPluginActionKeywordsClick(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
- var id = _viewModel.SelectedPlugin.Metadata.ID;
+ var id = _viewModel.SelectedPlugin.PluginPair.Metadata.ID;
ActionKeywords changeKeywordsWindow = new ActionKeywords(id, _settings);
changeKeywordsWindow.ShowDialog();
}
@@ -234,7 +234,7 @@ namespace Wox
{
if (e.ChangedButton == MouseButton.Left)
{
- var website = _viewModel.SelectedPlugin.Metadata.Website;
+ var website = _viewModel.SelectedPlugin.PluginPair.Metadata.Website;
if (!string.IsNullOrEmpty(website))
{
var uri = new Uri(website);
@@ -251,7 +251,7 @@ namespace Wox
{
if (e.ChangedButton == MouseButton.Left)
{
- var directory = _viewModel.SelectedPlugin.Metadata.PluginDirectory;
+ var directory = _viewModel.SelectedPlugin.PluginPair.Metadata.PluginDirectory;
if (!string.IsNullOrEmpty(directory) && Directory.Exists(directory))
{
Process.Start(directory);
diff --git a/Wox/ViewModel/PluginViewModel.cs b/Wox/ViewModel/PluginViewModel.cs
index ec682835b7..b1ae890938 100644
--- a/Wox/ViewModel/PluginViewModel.cs
+++ b/Wox/ViewModel/PluginViewModel.cs
@@ -9,15 +9,13 @@ namespace Wox.ViewModel
public class PluginViewModel : BaseModel
{
public PluginPair PluginPair { get; set; }
- public PluginMetadata Metadata { get; set; }
- public IPlugin Plugin { get; set; }
private readonly Internationalization _translator = InternationalizationManager.Instance;
- public ImageSource Image => ImageLoader.Load(Metadata.IcoPath);
- public Visibility ActionKeywordsVisibility => Metadata.ActionKeywords.Count > 1 ? Visibility.Collapsed : Visibility.Visible;
- public string InitilizaTime => string.Format(_translator.GetTranslation("plugin_init_time"), Metadata.InitTime);
- public string QueryTime => string.Format(_translator.GetTranslation("plugin_query_time"), Metadata.AvgQueryTime);
- public string ActionKeywordsText => string.Join(Query.ActionKeywordSeperater, Metadata.ActionKeywords);
+ public ImageSource Image => ImageLoader.Load(PluginPair.Metadata.IcoPath);
+ public Visibility ActionKeywordsVisibility => PluginPair.Metadata.ActionKeywords.Count > 1 ? Visibility.Collapsed : Visibility.Visible;
+ public string InitilizaTime => string.Format(_translator.GetTranslation("plugin_init_time"), PluginPair.Metadata.InitTime);
+ public string QueryTime => string.Format(_translator.GetTranslation("plugin_query_time"), PluginPair.Metadata.AvgQueryTime);
+ public string ActionKeywordsText => string.Join(Query.ActionKeywordSeperater, PluginPair.Metadata.ActionKeywords);
}
}
diff --git a/Wox/ViewModel/ResultViewModel.cs b/Wox/ViewModel/ResultViewModel.cs
index d7fd9365c1..bebbf5aa7b 100644
--- a/Wox/ViewModel/ResultViewModel.cs
+++ b/Wox/ViewModel/ResultViewModel.cs
@@ -36,14 +36,7 @@ namespace Wox.ViewModel
public string PluginID => RawResult.PluginID;
- public ImageSource Image
- {
- get
- {
- var image = ImageLoader.Load(RawResult.IcoPath);
- return image;
- }
- }
+ public ImageSource Image => ImageLoader.Load(RawResult.IcoPath);
public int Score
{
diff --git a/Wox/ViewModel/SettingWindowViewModel.cs b/Wox/ViewModel/SettingWindowViewModel.cs
index ad9cc8921b..016f38a513 100644
--- a/Wox/ViewModel/SettingWindowViewModel.cs
+++ b/Wox/ViewModel/SettingWindowViewModel.cs
@@ -84,8 +84,6 @@ namespace Wox.ViewModel
var metadatas = plugins.Select(p => new PluginViewModel
{
PluginPair = p,
- Metadata = p.Metadata,
- Plugin = p.Plugin
}).ToList();
return metadatas;
}
@@ -95,23 +93,9 @@ namespace Wox.ViewModel
{
get
{
- var settingProvider = SelectedPlugin.Plugin as ISettingProvider;
+ var settingProvider = SelectedPlugin.PluginPair.Plugin as ISettingProvider;
if (settingProvider != null)
{
- var multipleActionKeywordsProvider = settingProvider as IMultipleActionKeywords;
- if (multipleActionKeywordsProvider != null)
- {
- multipleActionKeywordsProvider.ActionKeywordsChanged += (o, e) =>
- {
- // update in-memory data
- PluginManager.UpdateActionKeywordForPlugin(SelectedPlugin.PluginPair, e.OldActionKeyword,
- e.NewActionKeyword);
- // update persistant data
- Settings.PluginSettings.UpdateActionKeyword(SelectedPlugin.Metadata);
-
- MessageBox.Show(_translater.GetTranslation("succeed"));
- };
- }
var control = settingProvider.CreateSettingPanel();
control.HorizontalAlignment = HorizontalAlignment.Stretch;
control.VerticalAlignment = VerticalAlignment.Stretch;
@@ -124,6 +108,8 @@ namespace Wox.ViewModel
}
}
+
+
#endregion
#region theme