diff --git a/Plugins/Wox.Plugin.PluginManagement/Main.cs b/Plugins/Wox.Plugin.PluginManagement/Main.cs
index 7af6db925..eba761825 100644
--- a/Plugins/Wox.Plugin.PluginManagement/Main.cs
+++ b/Plugins/Wox.Plugin.PluginManagement/Main.cs
@@ -113,7 +113,7 @@ namespace Wox.Plugin.PluginManagement
string json;
try
{
- json = Http.Get(pluginSearchUrl + pluginName, context.Proxy).Result;
+ json = Http.Get(pluginSearchUrl + pluginName).Result;
}
catch (WebException e)
{
@@ -156,7 +156,7 @@ namespace Wox.Plugin.PluginManagement
try
{
- Http.Download(pluginUrl, filePath, context.Proxy);
+ Http.Download(pluginUrl, filePath);
}
catch (WebException e)
{
diff --git a/Plugins/Wox.Plugin.WebSearch/Languages/de.xaml b/Plugins/Wox.Plugin.WebSearch/Languages/de.xaml
index 1ff21cba4..9cc70038b 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 cdfc44cb3..f3d8135ca 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 f3bb831ac..fb6acf941 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 880048136..d580fb0f5 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 9e665167c..b0882d487 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 e06b28dfd..a34f0a455 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,23 +34,23 @@ 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 };
+ return new List {result};
}
else
{
@@ -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, Context);
+ 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 assemblyName = typeof(Main).Assembly.GetName().Name;
- var pluginDirectory = Path.Combine(Infrastructure.Constant.SettingsPath, plugins, assemblyName);
+ var plugins = Constant.Plugins;
+ var assemblyName = typeof (Main).Assembly.GetName().Name;
+ 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/SearchSource.cs b/Plugins/Wox.Plugin.WebSearch/SearchSource.cs
new file mode 100644
index 000000000..7857c487d
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SearchSource.cs
@@ -0,0 +1,44 @@
+using System.IO;
+using System.Windows.Media;
+using JetBrains.Annotations;
+using Newtonsoft.Json;
+using Wox.Infrastructure.Image;
+
+namespace Wox.Plugin.WebSearch
+{
+ public class SearchSource : BaseModel
+ {
+ public const string DefaultIcon = "web_search.png";
+ public string Title { get; set; }
+ public string ActionKeyword { get; set; }
+
+ [NotNull]
+ public string Icon { private get; set; } = DefaultIcon;
+
+ ///
+ /// All icon should be put under Images directory
+ ///
+ [NotNull]
+ [JsonIgnore]
+ 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/SearchSourceSetting.xaml b/Plugins/Wox.Plugin.WebSearch/SearchSourceSetting.xaml
new file mode 100644
index 000000000..5a1e5bce5
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SearchSourceSetting.xaml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SearchSourceSetting.xaml.cs b/Plugins/Wox.Plugin.WebSearch/SearchSourceSetting.xaml.cs
new file mode 100644
index 000000000..55eab81e1
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SearchSourceSetting.xaml.cs
@@ -0,0 +1,149 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Windows;
+using Microsoft.Win32;
+using Wox.Core.Plugin;
+
+namespace Wox.Plugin.WebSearch
+{
+ public partial class SearchSourceSettingWindow
+ {
+ private readonly SearchSource _oldSearchSource;
+ private SearchSource _searchSource;
+ private IList _searchSources;
+ private Action _action;
+ private PluginInitContext _context;
+ private IPublicAPI _api;
+ private SearchSourceViewModel _viewModel;
+
+
+ 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();
+ DataContext = _viewModel;
+ _searchSource = _viewModel.SearchSource;
+ _searchSources = sources;
+ _action = action;
+ _context = context;
+ _api = _context.API;
+ }
+
+ private void OnCancelButtonClick(object sender, RoutedEventArgs e)
+ {
+ Close();
+ }
+
+ private void OnConfirmButtonClick(object sender, RoutedEventArgs e)
+ {
+ if (string.IsNullOrEmpty(_searchSource.Title))
+ {
+ var warning = _api.GetTranslation("wox_plugin_websearch_input_title");
+ MessageBox.Show(warning);
+ }
+ else if (string.IsNullOrEmpty(_searchSource.Url))
+ {
+ 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
+ {
+ var warning = _api.GetTranslation("newActionKeywordsHasBeenAssigned");
+ MessageBox.Show(warning);
+ }
+ }
+
+ 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);
+ const string filter = "Image files (*.jpg, *.jpeg, *.gif, *.png, *.bmp) |*.jpg; *.jpeg; *.gif; *.png; *.bmp";
+ var dialog = new OpenFileDialog {InitialDirectory = directory, Filter = filter};
+
+ var result = dialog.ShowDialog();
+ if (result == true)
+ {
+ var fullpath = dialog.FileName;
+ if (!string.IsNullOrEmpty(fullpath))
+ {
+ _searchSource.Icon = Path.GetFileName(fullpath);
+ if (!File.Exists(_searchSource.IconPath))
+ {
+ _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/SearchSourceViewModel.cs b/Plugins/Wox.Plugin.WebSearch/SearchSourceViewModel.cs
new file mode 100644
index 000000000..d57225c81
--- /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; }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/Settings.cs b/Plugins/Wox.Plugin.WebSearch/Settings.cs
index aebec99c2..6277ab753 100644
--- a/Plugins/Wox.Plugin.WebSearch/Settings.cs
+++ b/Plugins/Wox.Plugin.WebSearch/Settings.cs
@@ -1,183 +1,223 @@
-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",
+ Icon = "google.png",
+ Url = "https://www.google.com/search?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Google Scholar",
+ ActionKeyword = "sc",
+ Icon = "google.png",
+ Url = "https://scholar.google.com/scholar?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Wikipedia",
+ ActionKeyword = "wiki",
+ Icon = "wiki.png",
+ Url = "https://en.wikipedia.org/wiki/{q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "FindIcon",
+ ActionKeyword = "findicon",
+ Icon = "pictures.png",
+ Url = "http://findicons.com/search/{q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Facebook",
+ ActionKeyword = "facebook",
+ Icon = "facebook.png",
+ Url = "https://www.facebook.com/search/?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Twitter",
+ ActionKeyword = "twitter",
+ Icon = "twitter.png",
+ Url = "https://twitter.com/search?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Google Maps",
+ ActionKeyword = "maps",
+ Icon = "google_maps.png",
+ Url = "https://maps.google.com/maps?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Google Translate",
+ ActionKeyword = "translate",
+ Icon = "google_translate.png",
+ Url = "https://translate.google.com/#auto|en|{q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Duckduckgo",
+ ActionKeyword = "duckduckgo",
+ Icon = "duckduckgo.png",
+ Url = "https://duckduckgo.com/?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Github",
+ ActionKeyword = "github",
+ Icon = "github.png",
+ Url = "https://github.com/search?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Github Gist",
+ ActionKeyword = "gist",
+ Icon = "gist.png",
+ Url = "https://gist.github.com/search?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Gmail",
+ ActionKeyword = "gmail",
+ Icon = "gmail.png",
+ Url = "https://mail.google.com/mail/ca/u/0/#apps/{q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Google Drive",
+ ActionKeyword = "drive",
+ Icon = "google_drive.png",
+ Url = "https://drive.google.com/?hl=en&tab=bo#search/{q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Wolframalpha",
+ ActionKeyword = "wolframalpha",
+ Icon = "wolframalpha.png",
+ Url = "https://www.wolframalpha.com/input/?i={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Stackoverflow",
+ ActionKeyword = "stackoverflow",
+ Icon = "stackoverflow.png",
+ Url = "https://stackoverflow.com/search?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "I'm Feeling Lucky",
+ ActionKeyword = "lucky",
+ Icon = "google.png",
+ Url = "https://google.com/search?q={q}&btnI=I",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Google Image",
+ ActionKeyword = "image",
+ Icon = "google.png",
+ Url = "https://www.google.com/search?q={q}&tbm=isch",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Youtube",
+ ActionKeyword = "youtube",
+ Icon = "youtube.png",
+ Url = "https://www.youtube.com/results?search_query={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Bing",
+ ActionKeyword = "bing",
+ Icon = "bing.png",
+ Url = "https://www.bing.com/search?q={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Yahoo",
+ ActionKeyword = "yahoo",
+ Icon = "yahoo.png",
+ Url = "https://www.search.yahoo.com/search?p={q}",
+ Enabled = true
+ },
+ new SearchSource
+ {
+ Title = "Baidu",
+ ActionKeyword = "bd",
+ Icon = "baidu.png",
+ Url = "https://www.baidu.com/#ie=UTF-8&wd={q}",
+ Enabled = true
+ }
+ };
+
+ [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)
{
- Title = "Google",
- ActionKeyword = "g",
- 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",
- Icon = "wiki.png",
- Url = "https://en.wikipedia.org/wiki/{q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "FindIcon",
- ActionKeyword = "findicon",
- Icon = "pictures.png",
- Url = "http://findicons.com/search/{q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Facebook",
- ActionKeyword = "facebook",
- Icon = "facebook.png",
- Url = "https://www.facebook.com/search/?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Twitter",
- ActionKeyword = "twitter",
- Icon = "twitter.png",
- Url = "https://twitter.com/search?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Google Maps",
- ActionKeyword = "maps",
- Icon = "google_maps.png",
- Url = "https://maps.google.com/maps?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Google Translate",
- ActionKeyword = "translate",
- Icon = "google_translate.png",
- Url = "https://translate.google.com/#auto|en|{q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Duckduckgo",
- ActionKeyword = "duckduckgo",
- Icon = "duckduckgo.png",
- Url = "https://duckduckgo.com/?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Github",
- ActionKeyword = "github",
- Icon = "github.png",
- Url = "https://github.com/search?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Github Gist",
- ActionKeyword = "gist",
- Icon = "gist.png",
- Url = "https://gist.github.com/search?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Gmail",
- ActionKeyword = "gmail",
- Icon = "gmail.png",
- Url = "https://mail.google.com/mail/ca/u/0/#apps/{q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Google Drive",
- ActionKeyword = "drive",
- Icon = "google_drive.png",
- Url = "https://drive.google.com/?hl=en&tab=bo#search/{q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Wolframalpha",
- ActionKeyword = "wolframalpha",
- Icon = "wolframalpha.png",
- Url = "https://www.wolframalpha.com/input/?i={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Stackoverflow",
- ActionKeyword = "stackoverflow",
- Icon = "stackoverflow.png",
- Url = "https://stackoverflow.com/search?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "I'm Feeling Lucky",
- ActionKeyword = "lucky",
- Icon = "google.png",
- Url = "https://google.com/search?q={q}&btnI=I",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Google Image",
- ActionKeyword = "image",
- Icon = "google.png",
- Url = "https://www.google.com/search?q={q}&tbm=isch",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Youtube",
- ActionKeyword = "youtube",
- Icon = "youtube.png",
- Url = "https://www.youtube.com/results?search_query={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Bing",
- ActionKeyword = "bing",
- Icon = "bing.png",
- Url = "https://www.bing.com/search?q={q}",
- Enabled = true
- },
- new WebSearch
- {
- Title = "Yahoo",
- ActionKeyword = "yahoo",
- 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
+ if (string.Equals(s.ToString(), value, StringComparison.OrdinalIgnoreCase))
+ {
+ SelectedSuggestion = s;
+ }
}
- };
-
- public bool EnableWebSearchSuggestion { get; set; }
-
- public string WebSearchSuggestionSource { get; set; }
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SettingsControl.xaml b/Plugins/Wox.Plugin.WebSearch/SettingsControl.xaml
new file mode 100644
index 000000000..01b2d25c6
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SettingsControl.xaml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/SettingsControl.xaml.cs b/Plugins/Wox.Plugin.WebSearch/SettingsControl.xaml.cs
new file mode 100644
index 000000000..d50e595a8
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SettingsControl.xaml.cs
@@ -0,0 +1,54 @@
+using System.Windows;
+using System.Windows.Controls;
+using Wox.Core.Plugin;
+
+namespace Wox.Plugin.WebSearch
+{
+ ///
+ /// Interaction logic for WebSearchesSetting.xaml
+ ///
+ public partial class SettingsControl : UserControl
+ {
+ private readonly Settings _settings;
+ private readonly PluginInitContext _context;
+
+ public SettingsControl(PluginInitContext context, SettingsViewModel viewModel)
+ {
+ InitializeComponent();
+ _context = context;
+ _settings = viewModel.Settings;
+ DataContext = viewModel;
+ }
+
+ private void OnAddSearchSearchClick(object sender, RoutedEventArgs e)
+ {
+ var setting = new SearchSourceSettingWindow(_settings.SearchSources, _context);
+ setting.ShowDialog();
+ }
+
+ private void OnDeleteSearchSearchClick(object sender, RoutedEventArgs e)
+ {
+ var selected = _settings.SelectedSearchSource;
+ var warning = _context.API.GetTranslation("wox_plugin_websearch_delete_warning");
+ var formated = string.Format(warning, selected.Title);
+
+ var result = MessageBox.Show(formated, string.Empty, MessageBoxButton.YesNo);
+ if (result == MessageBoxResult.Yes)
+ {
+ var id = _context.CurrentPluginMetadata.ID;
+ PluginManager.RemoveActionKeyword(id, selected.ActionKeyword);
+ _settings.SearchSources.Remove(selected);
+ }
+ }
+
+ private void OnEditSearchSourceClick(object sender, RoutedEventArgs e)
+ {
+ 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/SettingsViewModel.cs b/Plugins/Wox.Plugin.WebSearch/SettingsViewModel.cs
new file mode 100644
index 000000000..6a727a5dd
--- /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 2b889cb78..0c71d7a2b 100644
--- a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Baidu.cs
+++ b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Baidu.cs
@@ -13,29 +13,27 @@ 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;
try
{
const string api = "http://suggestion.baidu.com/su?json=1&wd=";
- result = await Http.Get(api + Uri.EscapeUriString(query), Proxy, "GB2312");
+ result = await Http.Get(api + Uri.EscapeUriString(query), "GB2312");
}
catch (WebException e)
{
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;
@@ -62,8 +60,9 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
return new List();
}
- public Baidu(IHttpProxy httpProxy) : base(httpProxy)
+ 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 5cea59a8e..6d1f9eaa9 100644
--- a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Google.cs
+++ b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/Google.cs
@@ -12,20 +12,20 @@ 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
{
const string api = "https://www.google.com/complete/search?output=chrome&q=";
- result = await Http.Get(api + Uri.EscapeUriString(query), Proxy);
+ result = await Http.Get(api + Uri.EscapeUriString(query));
}
catch (WebException e)
{
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;
@@ -49,8 +49,9 @@ namespace Wox.Plugin.WebSearch.SuggestionSources
return new List();
}
- public Google(IHttpProxy httpProxy) : base(httpProxy)
+ 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
deleted file mode 100644
index 8c654ecd4..000000000
--- a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/ISuggestionSource.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace Wox.Plugin.WebSearch.SuggestionSources
-{
- public abstract class SuggestionSource
- {
- public virtual string Domain { get; set; }
- public IHttpProxy Proxy { get; set; }
-
- public SuggestionSource(IHttpProxy httpProxy)
- {
- Proxy = httpProxy;
- }
-
- public abstract Task> GetSuggestions(string query);
-
- public static SuggestionSource GetSuggestionSource(string name, PluginInitContext context)
- {
- switch (name.ToLower())
- {
- case "google":
- return new Google(context.Proxy);
-
- case "baidu":
- return new Baidu(context.Proxy);
-
- default:
- return null;
- }
- }
- }
-}
diff --git a/Plugins/Wox.Plugin.WebSearch/SuggestionSources/SuggestionSource.cs b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/SuggestionSource.cs
new file mode 100644
index 000000000..173efcfaa
--- /dev/null
+++ b/Plugins/Wox.Plugin.WebSearch/SuggestionSources/SuggestionSource.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Wox.Plugin.WebSearch.SuggestionSources
+{
+ public abstract class SuggestionSource
+ {
+ 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
deleted file mode 100644
index 0b645a990..000000000
--- a/Plugins/Wox.Plugin.WebSearch/WebSearch.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-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; }
- [NotNull]
- private string _icon = DefaultIcon;
-
- [NotNull]
- public string Icon
- {
- get { return _icon; }
- set
- {
- _icon = value;
- IconPath = Path.Combine(Main.ImagesDirectory, value);
- }
- }
-
- ///
- /// All icon should be put under Images directory
- ///
- [NotNull]
- [JsonIgnore]
- internal string IconPath { get; private set; } = Path.Combine
- (
- Main.ImagesDirectory, DefaultIcon
- );
-
- public string Url { get; set; }
- public bool Enabled { get; set; }
- }
-}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml
deleted file mode 100644
index c83f9ae08..000000000
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs
deleted file mode 100644
index 45e533565..000000000
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchSetting.xaml.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-using System;
-using System.IO;
-using System.Linq;
-using System.Windows;
-using Microsoft.Win32;
-using Wox.Infrastructure.Exception;
-using Wox.Infrastructure.Image;
-
-namespace Wox.Plugin.WebSearch
-{
- public partial class WebSearchSetting
- {
- private readonly WebSearchesSetting _settingWindow;
- private bool _isUpdate;
- private WebSearch _webSearch;
- private readonly PluginInitContext _context;
- private readonly Main _plugin;
- private readonly Settings _settings;
-
- public WebSearchSetting(WebSearchesSetting settingWidow, Settings settings)
- {
- InitializeComponent();
- WebSearchName.Focus();
- _plugin = settingWidow.Plugin;
- _context = settingWidow.Context;
- _settingWindow = settingWidow;
- _settings = settings;
- }
-
- 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)
- {
- Close();
- }
-
- ///
- /// Confirm button for both add and update
- ///
- private void ConfirmButtonOnClick(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))
- {
- string warning = _context.API.GetTranslation("wox_plugin_websearch_input_url");
- MessageBox.Show(warning);
- return;
- }
-
- string newActionKeyword = Actionword.Text.Trim();
-
- if (_isUpdate)
- {
- try
- {
- _plugin.NotifyActionKeywordsUpdated(_webSearch.ActionKeyword, newActionKeyword);
- }
- catch (WoxPluginException exception)
- {
- MessageBox.Show(exception.Message);
- return;
- }
- }
- else
- {
- try
- {
- _plugin.NotifyActionKeywordsAdded(newActionKeyword);
- }
- catch (WoxPluginException exception)
- {
- MessageBox.Show(exception.Message);
- return;
- }
-
- _settings.WebSearches.Add(_webSearch);
- }
-
- _webSearch.ActionKeyword = newActionKeyword;
- _webSearch.Enabled = EnableCheckBox.IsChecked ?? false;
- _webSearch.Url = url;
- _webSearch.Title = title;
-
- _settingWindow.ReloadWebSearchView();
- Close();
- }
-
- private void SelectIconButtonOnClick(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"
- };
-
- bool? result = dlg.ShowDialog();
- if (result != null && result == true)
- {
- string fullpath = dlg.FileName;
- if (fullpath != null)
- {
- _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/WebSearchesSetting.xaml b/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml
deleted file mode 100644
index 8b3de73c8..000000000
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml.cs
deleted file mode 100644
index 44fd714c8..000000000
--- a/Plugins/Wox.Plugin.WebSearch/WebSearchesSetting.xaml.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-
-namespace Wox.Plugin.WebSearch
-{
- ///
- /// Interaction logic for WebSearchesSetting.xaml
- ///
- public partial class WebSearchesSetting : UserControl
- {
- private Settings _settings;
- public PluginInitContext Context { get; }
- public Main Plugin { get; }
-
- public WebSearchesSetting(Main plugin, Settings settings)
- {
- Context = plugin.Context;
- Plugin = plugin;
- InitializeComponent();
- Loaded += Setting_Loaded;
- _settings = settings;
- }
-
- private void Setting_Loaded(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);
- setting.ShowDialog();
- }
-
- private void btnDeleteWebSearch_OnClick(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);
-
- if (MessageBox.Show(msg, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.Yes)
- {
- _settings.WebSearches.Remove(selectedWebSearch);
- webSearchView.Items.Refresh();
- }
- }
- else
- {
- string warning = Context.API.GetTranslation("wox_plugin_websearch_pls_select_web_search");
- MessageBox.Show(warning);
- }
- }
-
- private void btnEditWebSearch_OnClick(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();
- }
- }
- }
-}
diff --git a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj
index 8826164da..2fb1182b6 100644
--- a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj
+++ b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj
@@ -59,16 +59,18 @@
Properties\SolutionAssemblyInfo.cs
+
+
-
-
-
- WebSearchesSetting.xaml
+
+
+
+ SettingsControl.xaml
-
- WebSearchSetting.xaml
+
+ SearchSourceSetting.xaml
@@ -152,16 +154,20 @@
Designer
PreserveNewest
-
+
MSBuild:Compile
Designer
-
+
MSBuild:Compile
Designer
+
+ {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 c624079be..86d89a083 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 dccf0426c..17bc04fb3 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/ExecutablePlugin.cs b/Wox.Core/Plugin/ExecutablePlugin.cs
index 0bb27ae86..43992095e 100644
--- a/Wox.Core/Plugin/ExecutablePlugin.cs
+++ b/Wox.Core/Plugin/ExecutablePlugin.cs
@@ -1,6 +1,5 @@
using System;
using System.Diagnostics;
-using Wox.Core.UserSettings;
using Wox.Plugin;
namespace Wox.Core.Plugin
@@ -28,7 +27,6 @@ namespace Wox.Core.Plugin
{
Method = "query",
Parameters = new object[] { query.Search },
- HttpProxy = HttpProxy.Instance
};
_startInfo.Arguments = $"\"{request}\"";
diff --git a/Wox.Core/Plugin/JsonPRCModel.cs b/Wox.Core/Plugin/JsonPRCModel.cs
index 2ea8fa8c9..a6e40e02c 100644
--- a/Wox.Core/Plugin/JsonPRCModel.cs
+++ b/Wox.Core/Plugin/JsonPRCModel.cs
@@ -100,18 +100,6 @@ namespace Wox.Core.Plugin
///
public class JsonRPCServerRequestModel : JsonRPCRequestModel
{
- public IHttpProxy HttpProxy { get; set; }
-
- public override string ToString()
- {
- string rpc = base.ToString();
- if (HttpProxy != null)
- {
- rpc += string.Format(@",\""proxy\"":{{\""enabled\"":{0},\""server\"":\""{1}\"",\""port\"":{2},\""username\"":\""{3}\"",\""password\"":\""{4}\""}}",
- HttpProxy.Enabled.ToString().ToLower(), HttpProxy.Server, HttpProxy.Port, HttpProxy.UserName, HttpProxy.Password);
- }
- return rpc + "}";
- }
}
///
diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs
index a50c4b663..3685efa61 100644
--- a/Wox.Core/Plugin/PluginManager.cs
+++ b/Wox.Core/Plugin/PluginManager.cs
@@ -2,14 +2,13 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using System.Threading;
using System.Threading.Tasks;
using Wox.Core.Resource;
-using Wox.Core.UserSettings;
using Wox.Infrastructure;
using Wox.Infrastructure.Exception;
using Wox.Infrastructure.Logger;
using Wox.Infrastructure.Storage;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
namespace Wox.Core.Plugin
@@ -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);
}
}
@@ -83,7 +83,6 @@ namespace Wox.Core.Plugin
pair.Plugin.Init(new PluginInitContext
{
CurrentPluginMetadata = pair.Metadata,
- Proxy = HttpProxy.Instance,
API = API
});
});
@@ -239,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.Core/Plugin/PluginsLoader.cs b/Wox.Core/Plugin/PluginsLoader.cs
index b62a9a9c7..b2132eb4a 100644
--- a/Wox.Core/Plugin/PluginsLoader.cs
+++ b/Wox.Core/Plugin/PluginsLoader.cs
@@ -3,9 +3,9 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
-using Wox.Core.UserSettings;
using Wox.Infrastructure.Exception;
using Wox.Infrastructure.Logger;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
namespace Wox.Core.Plugin
diff --git a/Wox.Core/Plugin/PythonPlugin.cs b/Wox.Core/Plugin/PythonPlugin.cs
index d13a192f6..e8b1ba20d 100644
--- a/Wox.Core/Plugin/PythonPlugin.cs
+++ b/Wox.Core/Plugin/PythonPlugin.cs
@@ -1,6 +1,5 @@
using System;
using System.Diagnostics;
-using Wox.Core.UserSettings;
using Wox.Plugin;
namespace Wox.Core.Plugin
@@ -28,7 +27,6 @@ namespace Wox.Core.Plugin
{
Method = "query",
Parameters = new object[] { query.Search },
- HttpProxy = HttpProxy.Instance
};
//Add -B flag to tell python don't write .py[co] files. Because .pyc contains location infos which will prevent python portable
_startInfo.Arguments = $"-B \"{context.CurrentPluginMetadata.ExecuteFilePath}\" \"{request}\"";
diff --git a/Wox.Core/Resource/Internationalization.cs b/Wox.Core/Resource/Internationalization.cs
index 4396fd249..4da7abd97 100644
--- a/Wox.Core/Resource/Internationalization.cs
+++ b/Wox.Core/Resource/Internationalization.cs
@@ -5,13 +5,14 @@ using System.Linq;
using System.Windows;
using Wox.Infrastructure.Exception;
using Wox.Infrastructure.Logger;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
namespace Wox.Core.Resource
{
public class Internationalization : Resource
{
- public UserSettings.Settings Settings { get; set; }
+ public Settings Settings { get; set; }
public Internationalization()
{
diff --git a/Wox.Core/Resource/Theme.cs b/Wox.Core/Resource/Theme.cs
index d3473ad90..391456d2c 100644
--- a/Wox.Core/Resource/Theme.cs
+++ b/Wox.Core/Resource/Theme.cs
@@ -7,15 +7,15 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
using System.Windows.Media;
-using Wox.Core.UserSettings;
using Wox.Infrastructure.Logger;
+using Wox.Infrastructure.UserSettings;
namespace Wox.Core.Resource
{
public class Theme : Resource
{
private static List themeDirectories = new List();
- public UserSettings.Settings Settings { get; set; }
+ public Settings Settings { get; set; }
public Theme()
{
diff --git a/Wox.Core/Updater.cs b/Wox.Core/Updater.cs
index cb3d0483a..ee5138539 100644
--- a/Wox.Core/Updater.cs
+++ b/Wox.Core/Updater.cs
@@ -7,7 +7,6 @@ using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Squirrel;
-using Wox.Core.UserSettings;
using Wox.Infrastructure.Http;
using Wox.Infrastructure.Logger;
@@ -19,7 +18,7 @@ namespace Wox.Core
public static async void UpdateApp()
{
- var client = new WebClient {Proxy = Http.WebProxy(HttpProxy.Instance)};
+ var client = new WebClient {Proxy = Http.WebProxy()};
var downloader = new FileDownloader(client);
try
@@ -67,7 +66,7 @@ namespace Wox.Core
string response;
try
{
- response = await Http.Get(githubAPI, HttpProxy.Instance);
+ response = await Http.Get(githubAPI);
}
catch (WebException e)
{
diff --git a/Wox.Core/UserSettings/HttpProxy.cs b/Wox.Core/UserSettings/HttpProxy.cs
deleted file mode 100644
index ff6d5aaab..000000000
--- a/Wox.Core/UserSettings/HttpProxy.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Wox.Plugin;
-
-namespace Wox.Core.UserSettings
-{
- public class HttpProxy : IHttpProxy
- {
- private static readonly HttpProxy instance = new HttpProxy();
- public Settings Settings { get; set; }
- public static HttpProxy Instance => instance;
-
- public bool Enabled => Settings.ProxyEnabled;
- public string Server => Settings.ProxyServer;
- public int Port => Settings.ProxyPort;
- public string UserName => Settings.ProxyUserName;
- public string Password => Settings.ProxyPassword;
- }
-}
\ No newline at end of file
diff --git a/Wox.Core/Wox.Core.csproj b/Wox.Core/Wox.Core.csproj
index fcba73e75..18fd58e10 100644
--- a/Wox.Core/Wox.Core.csproj
+++ b/Wox.Core/Wox.Core.csproj
@@ -110,7 +110,6 @@
-
@@ -127,9 +126,6 @@
-
-
-
diff --git a/Wox.Infrastructure/Exception/WoxPluginException.cs b/Wox.Infrastructure/Exception/WoxPluginException.cs
index d94788b4d..b68af28ab 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/Http/Http.cs b/Wox.Infrastructure/Http/Http.cs
index b96d3c79c..bd55a468d 100644
--- a/Wox.Infrastructure/Http/Http.cs
+++ b/Wox.Infrastructure/Http/Http.cs
@@ -3,26 +3,27 @@ using System.Net;
using System.Text;
using System.Threading.Tasks;
using JetBrains.Annotations;
-using Wox.Plugin;
+using Wox.Infrastructure.UserSettings;
namespace Wox.Infrastructure.Http
{
public static class Http
{
- public static IWebProxy WebProxy(IHttpProxy proxy)
+ public static HttpProxy Proxy { private get; set; }
+ public static IWebProxy WebProxy()
{
- if (proxy != null && proxy.Enabled && !string.IsNullOrEmpty(proxy.Server))
+ if (Proxy != null && Proxy.Enabled && !string.IsNullOrEmpty(Proxy.Server))
{
- if (string.IsNullOrEmpty(proxy.UserName) || string.IsNullOrEmpty(proxy.Password))
+ if (string.IsNullOrEmpty(Proxy.UserName) || string.IsNullOrEmpty(Proxy.Password))
{
- var webProxy = new WebProxy(proxy.Server, proxy.Port);
+ var webProxy = new WebProxy(Proxy.Server, Proxy.Port);
return webProxy;
}
else
{
- var webProxy = new WebProxy(proxy.Server, proxy.Port)
+ var webProxy = new WebProxy(Proxy.Server, Proxy.Port)
{
- Credentials = new NetworkCredential(proxy.UserName, proxy.Password)
+ Credentials = new NetworkCredential(Proxy.UserName, Proxy.Password)
};
return webProxy;
}
@@ -34,20 +35,20 @@ namespace Wox.Infrastructure.Http
}
/// Can't download file
- public static void Download([NotNull] string url, [NotNull] string filePath, IHttpProxy proxy)
+ public static void Download([NotNull] string url, [NotNull] string filePath)
{
- var client = new WebClient { Proxy = WebProxy(proxy) };
+ var client = new WebClient { Proxy = WebProxy() };
client.DownloadFile(url, filePath);
}
/// Can't get response from http get
- public static async Task Get([NotNull] string url, IHttpProxy proxy, string encoding = "UTF-8")
+ public static async Task Get([NotNull] string url, string encoding = "UTF-8")
{
HttpWebRequest request = WebRequest.CreateHttp(url);
request.Method = "GET";
request.Timeout = 10 * 1000;
- request.Proxy = WebProxy(proxy);
+ request.Proxy = WebProxy();
request.UserAgent = @"Mozilla/5.0 (Trident/7.0; rv:11.0) like Gecko";
var response = await request.GetResponseAsync() as HttpWebResponse;
if (response != null)
diff --git a/Wox.Infrastructure/UserSettings/HttpProxy.cs b/Wox.Infrastructure/UserSettings/HttpProxy.cs
new file mode 100644
index 000000000..5385aca12
--- /dev/null
+++ b/Wox.Infrastructure/UserSettings/HttpProxy.cs
@@ -0,0 +1,11 @@
+namespace Wox.Infrastructure.UserSettings
+{
+ public class HttpProxy
+ {
+ public bool Enabled { get; set; } = false;
+ public string Server { get; set; }
+ public int Port { get; set; }
+ public string UserName { get; set; }
+ public string Password { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Wox.Core/UserSettings/PluginHotkey.cs b/Wox.Infrastructure/UserSettings/PluginHotkey.cs
similarity index 80%
rename from Wox.Core/UserSettings/PluginHotkey.cs
rename to Wox.Infrastructure/UserSettings/PluginHotkey.cs
index 3f2e7be97..aef90a383 100644
--- a/Wox.Core/UserSettings/PluginHotkey.cs
+++ b/Wox.Infrastructure/UserSettings/PluginHotkey.cs
@@ -1,6 +1,6 @@
using Wox.Plugin;
-namespace Wox.Core.UserSettings
+namespace Wox.Infrastructure.UserSettings
{
public class CustomPluginHotkey : BaseModel
{
diff --git a/Wox.Core/UserSettings/PluginSettings.cs b/Wox.Infrastructure/UserSettings/PluginSettings.cs
similarity index 86%
rename from Wox.Core/UserSettings/PluginSettings.cs
rename to Wox.Infrastructure/UserSettings/PluginSettings.cs
index 158054c4e..c80ee7e72 100644
--- a/Wox.Core/UserSettings/PluginSettings.cs
+++ b/Wox.Infrastructure/UserSettings/PluginSettings.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using Wox.Plugin;
-namespace Wox.Core.UserSettings
+namespace Wox.Infrastructure.UserSettings
{
public class PluginsSettings : BaseModel
{
@@ -34,12 +34,6 @@ namespace Wox.Core.UserSettings
}
}
}
-
- public void UpdateActionKeyword(PluginMetadata metadata)
- {
- var settings = Plugins[metadata.ID];
- settings.ActionKeywords = metadata.ActionKeywords;
- }
}
public class Plugin
{
diff --git a/Wox.Core/UserSettings/Settings.cs b/Wox.Infrastructure/UserSettings/Settings.cs
similarity index 87%
rename from Wox.Core/UserSettings/Settings.cs
rename to Wox.Infrastructure/UserSettings/Settings.cs
index ca58e2fe7..2e8ec1341 100644
--- a/Wox.Core/UserSettings/Settings.cs
+++ b/Wox.Infrastructure/UserSettings/Settings.cs
@@ -1,11 +1,10 @@
using System;
-using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using Newtonsoft.Json;
using Wox.Plugin;
-namespace Wox.Core.UserSettings
+namespace Wox.Infrastructure.UserSettings
{
public class Settings : BaseModel
{
@@ -49,12 +48,7 @@ namespace Wox.Core.UserSettings
public bool RememberLastLaunchLocation { get; set; }
public bool IgnoreHotkeysOnFullscreen { get; set; }
- public string ProxyServer { get; set; }
- public bool ProxyEnabled { get; set; }
- public int ProxyPort { get; set; }
- public string ProxyUserName { get; set; }
- public string ProxyPassword { get; set; }
-
+ public HttpProxy Proxy { get; set; } = new HttpProxy();
}
[Obsolete]
diff --git a/Wox.Infrastructure/Wox.Infrastructure.csproj b/Wox.Infrastructure/Wox.Infrastructure.csproj
index 018d34a73..31c4c2128 100644
--- a/Wox.Infrastructure/Wox.Infrastructure.csproj
+++ b/Wox.Infrastructure/Wox.Infrastructure.csproj
@@ -92,6 +92,10 @@
+
+
+
+
diff --git a/Wox.Plugin/Feature.cs b/Wox.Plugin/Feature.cs
index 4da04e5ba..6d1aa37fd 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.Plugin/IHttpProxy.cs b/Wox.Plugin/IHttpProxy.cs
deleted file mode 100644
index 2fbded80f..000000000
--- a/Wox.Plugin/IHttpProxy.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Wox.Plugin
-{
- public interface IHttpProxy
- {
- bool Enabled { get; }
- string Server { get; }
- int Port { get; }
- string UserName { get; }
- string Password { get; }
- }
-}
\ No newline at end of file
diff --git a/Wox.Plugin/PluginInitContext.cs b/Wox.Plugin/PluginInitContext.cs
index c8e3e0485..efa7d442a 100644
--- a/Wox.Plugin/PluginInitContext.cs
+++ b/Wox.Plugin/PluginInitContext.cs
@@ -1,4 +1,6 @@
-namespace Wox.Plugin
+using System;
+
+namespace Wox.Plugin
{
public class PluginInitContext
{
@@ -8,7 +10,5 @@
/// Public APIs for plugin invocation
///
public IPublicAPI API { get; set; }
-
- public IHttpProxy Proxy { get; set; }
}
}
diff --git a/Wox.Plugin/Wox.Plugin.csproj b/Wox.Plugin/Wox.Plugin.csproj
index 3a2a19c1a..ad2661790 100644
--- a/Wox.Plugin/Wox.Plugin.csproj
+++ b/Wox.Plugin/Wox.Plugin.csproj
@@ -66,7 +66,6 @@
-
diff --git a/Wox/ActionKeywords.xaml.cs b/Wox/ActionKeywords.xaml.cs
index 8d3769d70..2dc0e02bd 100644
--- a/Wox/ActionKeywords.xaml.cs
+++ b/Wox/ActionKeywords.xaml.cs
@@ -1,8 +1,8 @@
using System.Windows;
using Wox.Core.Plugin;
using Wox.Core.Resource;
-using Wox.Core.UserSettings;
using Wox.Infrastructure.Exception;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
namespace Wox
@@ -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/App.xaml.cs b/Wox/App.xaml.cs
index 1afae043e..77bade700 100644
--- a/Wox/App.xaml.cs
+++ b/Wox/App.xaml.cs
@@ -4,10 +4,10 @@ using System.Timers;
using System.Windows;
using Wox.Core;
using Wox.Core.Plugin;
-using Wox.Core.UserSettings;
using Wox.Helper;
using Wox.Infrastructure.Image;
using Wox.Infrastructure.Logger;
+using Wox.Infrastructure.UserSettings;
using Wox.ViewModel;
using Stopwatch = Wox.Infrastructure.Stopwatch;
diff --git a/Wox/CustomQueryHotkeySetting.xaml.cs b/Wox/CustomQueryHotkeySetting.xaml.cs
index 83f47daa7..233c3b2b8 100644
--- a/Wox/CustomQueryHotkeySetting.xaml.cs
+++ b/Wox/CustomQueryHotkeySetting.xaml.cs
@@ -6,8 +6,8 @@ using System.Windows;
using NHotkey;
using NHotkey.Wpf;
using Wox.Core.Resource;
-using Wox.Core.UserSettings;
using Wox.Infrastructure.Hotkey;
+using Wox.Infrastructure.UserSettings;
namespace Wox
{
diff --git a/Wox/Languages/de.xaml b/Wox/Languages/de.xaml
index ca9a11d8b..e009d2b38 100644
--- a/Wox/Languages/de.xaml
+++ b/Wox/Languages/de.xaml
@@ -59,9 +59,9 @@
Wollen Sie die {0} Plugin Tastenkombination wirklich löschen?
- Proxy
- Aktiviere Proxy
- Server
+ HTTP Proxy
+ Aktiviere HTTP Proxy
+ HTTP Server
Port
Benutzername
Passwort
diff --git a/Wox/Languages/en.xaml b/Wox/Languages/en.xaml
index fc31c706b..93c85c83f 100644
--- a/Wox/Languages/en.xaml
+++ b/Wox/Languages/en.xaml
@@ -59,9 +59,9 @@
Are you sure you want to delete {0} plugin hotkey?
- Proxy
- Enable Proxy
- Server
+ HTTP Proxy
+ Enable HTTP Proxy
+ HTTP Server
Port
User Name
Password
diff --git a/Wox/Languages/fr.xaml b/Wox/Languages/fr.xaml
index 471f0f21b..0cb513a08 100644
--- a/Wox/Languages/fr.xaml
+++ b/Wox/Languages/fr.xaml
@@ -59,9 +59,9 @@
Voulez-vous vraiment supprimer {0} raccourci(s) ?
- Proxy
- Activer le proxy
- Serveur
+ HTTP Proxy
+ Activer le HTTP proxy
+ HTTP Serveur
Port
Utilisateur
Mot de passe
diff --git a/Wox/Languages/ja.xaml b/Wox/Languages/ja.xaml
index bf872d6f1..ea8c636e3 100644
--- a/Wox/Languages/ja.xaml
+++ b/Wox/Languages/ja.xaml
@@ -59,9 +59,9 @@
{0} プラグインのホットキーを本当に削除しますか?
- プロキシ
- プロキシを有効化
- サーバ
+ HTTP プロキシ
+ HTTP プロキシを有効化
+ HTTP サーバ
ポート
ユーザ名
パスワード
diff --git a/Wox/Languages/nl.xaml b/Wox/Languages/nl.xaml
index 018166d24..e81cdd585 100644
--- a/Wox/Languages/nl.xaml
+++ b/Wox/Languages/nl.xaml
@@ -59,9 +59,9 @@
Weet u zeker dat je {0} plugin sneltoets wilt verwijderen?
- Proxy
- Enable Proxy
- Server
+ HTTP Proxy
+ Enable HTTP Proxy
+ HTTP Server
Poort
Gebruikersnaam
Wachtwoord
diff --git a/Wox/Languages/pl.xaml b/Wox/Languages/pl.xaml
index d6249afa8..6d1c22668 100644
--- a/Wox/Languages/pl.xaml
+++ b/Wox/Languages/pl.xaml
@@ -59,9 +59,9 @@
Czy jesteś pewien że chcesz usunąć skrót klawiszowy {0} wtyczki?
- Serwer proxy
- Używaj proxy
- Serwer
+ Serwer proxy HTTP
+ Używaj HTTP proxy
+ HTTP Serwer
Port
Nazwa użytkownika
Hasło
diff --git a/Wox/Languages/ru.xaml b/Wox/Languages/ru.xaml
index 3bc8f46e0..8fd55053b 100644
--- a/Wox/Languages/ru.xaml
+++ b/Wox/Languages/ru.xaml
@@ -59,9 +59,9 @@
Вы уверены что хотите удалить горячую клавишу для плагина {0}?
- Прокси
- Включить прокси
- Сервер
+ HTTP Прокси
+ Включить HTTP прокси
+ HTTP Сервер
Порт
Логин
Пароль
diff --git a/Wox/Languages/zh-cn.xaml b/Wox/Languages/zh-cn.xaml
index 352ff3b0c..177c2a454 100644
--- a/Wox/Languages/zh-cn.xaml
+++ b/Wox/Languages/zh-cn.xaml
@@ -59,9 +59,9 @@
你确定要删除插件 {0} 的热键吗?
- 代理
- 启用代理
- 服务器
+ HTTP 代理
+ 启用 HTTP 代理
+ HTTP 服务器
端口
用户名
密码
diff --git a/Wox/Languages/zh-tw.xaml b/Wox/Languages/zh-tw.xaml
index a5705dee3..d16c48486 100644
--- a/Wox/Languages/zh-tw.xaml
+++ b/Wox/Languages/zh-tw.xaml
@@ -59,9 +59,9 @@
確定要刪除外掛 {0} 的熱鍵嗎?
- 代理
- 啟用代理
- 伺服器
+ HTTP 代理
+ 啟用 HTTP 代理
+ HTTP 伺服器
Port
使用者
密碼
diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs
index a76642328..1d41cfcbb 100644
--- a/Wox/MainWindow.xaml.cs
+++ b/Wox/MainWindow.xaml.cs
@@ -6,8 +6,8 @@ using System.Windows.Media.Animation;
using System.Windows.Controls;
using Wox.Core.Plugin;
using Wox.Core.Resource;
-using Wox.Core.UserSettings;
using Wox.Helper;
+using Wox.Infrastructure.UserSettings;
using Wox.ViewModel;
using Screen = System.Windows.Forms.Screen;
using ContextMenu = System.Windows.Forms.ContextMenu;
diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml
index b50c17531..b7ebd1de4 100644
--- a/Wox/SettingWindow.xaml
+++ b/Wox/SettingWindow.xaml
@@ -3,8 +3,9 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:wox="clr-namespace:Wox"
- xmlns:s="clr-namespace:Wox.Core.UserSettings;assembly=Wox.Core"
xmlns:vm="clr-namespace:Wox.ViewModel"
+ xmlns:userSettings="clr-namespace:Wox.Infrastructure.UserSettings;assembly=Wox.Infrastructure"
+ xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="Wox.SettingWindow"
mc:Ignorable="d"
Icon="Images\app.png"
@@ -82,10 +83,10 @@
-
-
+
@@ -118,8 +119,8 @@
-
@@ -127,14 +128,14 @@
VerticalAlignment="Bottom" Opacity="0.5">
-
+
-
-
@@ -276,14 +277,14 @@
-
+
-
+
@@ -304,10 +305,10 @@
-
+
-
+
@@ -319,15 +320,15 @@
-
+
-
+
-
+
-
+
-
diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs
index 0fd0c8b9e..4b9284101 100644
--- a/Wox/SettingWindow.xaml.cs
+++ b/Wox/SettingWindow.xaml.cs
@@ -14,8 +14,8 @@ using NHotkey.Wpf;
using Wox.Core;
using Wox.Core.Plugin;
using Wox.Core.Resource;
-using Wox.Core.UserSettings;
using Wox.Infrastructure.Hotkey;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
using Wox.ViewModel;
@@ -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);
@@ -264,29 +264,27 @@ namespace Wox
private void OnTestProxyClick(object sender, RoutedEventArgs e)
{
- if (string.IsNullOrEmpty(_settings.ProxyServer))
+ if (string.IsNullOrEmpty(_settings.Proxy.Server))
{
MessageBox.Show(InternationalizationManager.Instance.GetTranslation("serverCantBeEmpty"));
return;
}
- if (_settings.ProxyPort > 0)
+ if (_settings.Proxy.Port <= 0)
{
MessageBox.Show(InternationalizationManager.Instance.GetTranslation("portCantBeEmpty"));
return;
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Infrastructure.Constant.Github);
- request.Timeout = 1000 * 5;
- request.ReadWriteTimeout = 1000 * 5;
- if (string.IsNullOrEmpty(_settings.ProxyUserName) || string.IsNullOrEmpty(_settings.ProxyPassword))
+ if (string.IsNullOrEmpty(_settings.Proxy.UserName) || string.IsNullOrEmpty(_settings.Proxy.Password))
{
- request.Proxy = new WebProxy(_settings.ProxyServer, _settings.ProxyPort);
+ request.Proxy = new WebProxy(_settings.Proxy.Server, _settings.Proxy.Port);
}
else
{
- request.Proxy = new WebProxy(_settings.ProxyServer, _settings.ProxyPort)
+ request.Proxy = new WebProxy(_settings.Proxy.Server, _settings.Proxy.Port)
{
- Credentials = new NetworkCredential(_settings.ProxyUserName, _settings.ProxyPassword)
+ Credentials = new NetworkCredential(_settings.Proxy.UserName, _settings.Proxy.Password)
};
}
try
diff --git a/Wox/ViewModel/MainViewModel.cs b/Wox/ViewModel/MainViewModel.cs
index d6bffb07c..528126560 100644
--- a/Wox/ViewModel/MainViewModel.cs
+++ b/Wox/ViewModel/MainViewModel.cs
@@ -9,12 +9,12 @@ using NHotkey;
using NHotkey.Wpf;
using Wox.Core.Plugin;
using Wox.Core.Resource;
-using Wox.Core.UserSettings;
using Wox.Helper;
using Wox.Infrastructure;
using Wox.Infrastructure.Hotkey;
using Wox.Infrastructure.Image;
using Wox.Infrastructure.Storage;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
using Wox.Storage;
@@ -57,12 +57,6 @@ namespace Wox.ViewModel
_settings = settings;
- // happlebao todo temp fix for instance code logic
- HttpProxy.Instance.Settings = _settings;
- InternationalizationManager.Instance.Settings = _settings;
- InternationalizationManager.Instance.ChangeLanguage(_settings.Language);
- ThemeManager.Instance.Settings = _settings;
-
_queryHistoryStorage = new JsonStrorage();
_userSelectedRecordStorage = new JsonStrorage();
_topMostRecordStorage = new JsonStrorage();
diff --git a/Wox/ViewModel/PluginViewModel.cs b/Wox/ViewModel/PluginViewModel.cs
index ec682835b..b1ae89093 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 d7fd9365c..bebbf5aa7 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/ResultsViewModel.cs b/Wox/ViewModel/ResultsViewModel.cs
index 6f324928c..3a0743143 100644
--- a/Wox/ViewModel/ResultsViewModel.cs
+++ b/Wox/ViewModel/ResultsViewModel.cs
@@ -4,7 +4,7 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Data;
-using Wox.Core.UserSettings;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
namespace Wox.ViewModel
diff --git a/Wox/ViewModel/SettingWindowViewModel.cs b/Wox/ViewModel/SettingWindowViewModel.cs
index 1a1ef4f29..016f38a51 100644
--- a/Wox/ViewModel/SettingWindowViewModel.cs
+++ b/Wox/ViewModel/SettingWindowViewModel.cs
@@ -8,10 +8,11 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using Wox.Core.Plugin;
using Wox.Core.Resource;
-using Wox.Core.UserSettings;
using Wox.Helper;
using Wox.Infrastructure;
+using Wox.Infrastructure.Http;
using Wox.Infrastructure.Storage;
+using Wox.Infrastructure.UserSettings;
using Wox.Plugin;
namespace Wox.ViewModel
@@ -31,6 +32,12 @@ namespace Wox.ViewModel
OnPropertyChanged(nameof(ActivatedTimes));
}
};
+
+ // happlebao todo temp fix for instance code logic
+ InternationalizationManager.Instance.Settings = Settings;
+ InternationalizationManager.Instance.ChangeLanguage(Settings.Language);
+ ThemeManager.Instance.Settings = Settings;
+ Http.Proxy = Settings.Proxy;
}
public Settings Settings { get; set; }
@@ -77,8 +84,6 @@ namespace Wox.ViewModel
var metadatas = plugins.Select(p => new PluginViewModel
{
PluginPair = p,
- Metadata = p.Metadata,
- Plugin = p.Plugin
}).ToList();
return metadatas;
}
@@ -88,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;
@@ -117,6 +108,8 @@ namespace Wox.ViewModel
}
}
+
+
#endregion
#region theme