mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 03:07:04 +02:00
Fix setting for multiple action keywords
1. completed rewrite the action keyword setting logic. 2. Fix setting for multiple action keywords in #352 3. Fix setting for Web Search plugin
This commit is contained in:
@@ -1,34 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using Wox.Core.i18n;
|
||||
using Wox.Core.Plugin;
|
||||
using Wox.Core.UserSettings;
|
||||
using Wox.Infrastructure.Exception;
|
||||
using Wox.Plugin;
|
||||
|
||||
namespace Wox
|
||||
{
|
||||
public partial class ActionKeywords : Window
|
||||
{
|
||||
private PluginMetadata pluginMetadata;
|
||||
private PluginPair _plugin;
|
||||
|
||||
public ActionKeywords(string pluginId)
|
||||
{
|
||||
InitializeComponent();
|
||||
PluginPair plugin = PluginManager.GetPluginForId(pluginId);
|
||||
if (plugin == null)
|
||||
_plugin = PluginManager.GetPluginForId(pluginId);
|
||||
if (_plugin == null)
|
||||
{
|
||||
MessageBox.Show(InternationalizationManager.Instance.GetTranslation("cannotFindSpecifiedPlugin"));
|
||||
Close();
|
||||
return;
|
||||
}
|
||||
|
||||
pluginMetadata = plugin.Metadata;
|
||||
}
|
||||
|
||||
private void ActionKeyword_OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
tbOldActionKeyword.Text = string.Join(Query.ActionKeywordSeperater, pluginMetadata.ActionKeywords.ToArray());
|
||||
tbOldActionKeyword.Text = string.Join(Query.ActionKeywordSeperater, _plugin.Metadata.ActionKeywords.ToArray());
|
||||
tbAction.Focus();
|
||||
}
|
||||
|
||||
@@ -37,42 +37,23 @@ namespace Wox
|
||||
Close();
|
||||
}
|
||||
|
||||
private void btnDone_OnClick(object sender, RoutedEventArgs e)
|
||||
private void btnDone_OnClick(object sender, RoutedEventArgs _)
|
||||
{
|
||||
if (string.IsNullOrEmpty(tbAction.Text))
|
||||
var oldActionKeyword = _plugin.Metadata.ActionKeywords[0];
|
||||
var newActionKeyword = tbAction.Text.Trim();
|
||||
try
|
||||
{
|
||||
MessageBox.Show(InternationalizationManager.Instance.GetTranslation("newActionKeywordCannotBeEmpty"));
|
||||
// update in-memory data
|
||||
PluginManager.UpdateActionKeywordForPlugin(_plugin, oldActionKeyword, newActionKeyword);
|
||||
}
|
||||
catch (WoxPluginException e)
|
||||
{
|
||||
MessageBox.Show(e.Message);
|
||||
return;
|
||||
}
|
||||
// update persistant data
|
||||
UserSettingStorage.Instance.UpdateActionKeyword(_plugin.Metadata);
|
||||
|
||||
var actionKeywords = tbAction.Text.Trim().Split(new[] { Query.ActionKeywordSeperater }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||||
//check new action keyword didn't used by other plugin
|
||||
if (actionKeywords[0] != Query.GlobalPluginWildcardSign && PluginManager.AllPlugins.
|
||||
SelectMany(p => p.Metadata.ActionKeywords).
|
||||
Any(k => actionKeywords.Contains(k)))
|
||||
{
|
||||
MessageBox.Show(InternationalizationManager.Instance.GetTranslation("newActionKeywordHasBeenAssigned"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
pluginMetadata.ActionKeywords = actionKeywords;
|
||||
var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pluginMetadata.ID);
|
||||
if (customizedPluginConfig == null)
|
||||
{
|
||||
UserSettingStorage.Instance.CustomizedPluginConfigs.Add(new CustomizedPluginConfig()
|
||||
{
|
||||
Disabled = false,
|
||||
ID = pluginMetadata.ID,
|
||||
Name = pluginMetadata.Name,
|
||||
ActionKeywords = actionKeywords
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
customizedPluginConfig.ActionKeywords = actionKeywords;
|
||||
}
|
||||
UserSettingStorage.Instance.Save();
|
||||
MessageBox.Show(InternationalizationManager.Instance.GetTranslation("succeed"));
|
||||
Close();
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ using Wox.Core.Theme;
|
||||
using Wox.Core.Updater;
|
||||
using Wox.Core.UserSettings;
|
||||
using Wox.Helper;
|
||||
using Wox.Infrastructure;
|
||||
using Wox.Infrastructure.Exception;
|
||||
using Wox.Plugin;
|
||||
using Application = System.Windows.Forms.Application;
|
||||
using Stopwatch = Wox.Infrastructure.Stopwatch;
|
||||
@@ -188,23 +188,6 @@ namespace Wox
|
||||
{
|
||||
OnHotkeyTabSelected();
|
||||
}
|
||||
|
||||
// save multiple action keywords settings, todo: this hack is ugly
|
||||
var tab = e.RemovedItems.Count > 0 ? e.RemovedItems[0] : null;
|
||||
if (ReferenceEquals(tab, tabPlugin))
|
||||
{
|
||||
var metadata = (lbPlugins.SelectedItem as PluginPair)?.Metadata;
|
||||
if (metadata != null)
|
||||
{
|
||||
var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == metadata.ID);
|
||||
if (customizedPluginConfig != null && !customizedPluginConfig.Disabled)
|
||||
{
|
||||
customizedPluginConfig.ActionKeywords = metadata.ActionKeywords;
|
||||
UserSettingStorage.Instance.Save();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region General
|
||||
@@ -535,50 +518,64 @@ namespace Wox
|
||||
|
||||
#region Plugin
|
||||
|
||||
private void lbPlugins_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
private void lbPlugins_OnSelectionChanged(object sender, SelectionChangedEventArgs _)
|
||||
{
|
||||
ISettingProvider provider = null;
|
||||
|
||||
var pair = lbPlugins.SelectedItem as PluginPair;
|
||||
string pluginId = string.Empty;
|
||||
|
||||
if (pair != null)
|
||||
List<string> actionKeywords = null;
|
||||
if (pair == null) return;
|
||||
actionKeywords = pair.Metadata.ActionKeywords;
|
||||
pluginAuthor.Visibility = Visibility.Visible;
|
||||
pluginInitTime.Text =
|
||||
string.Format(InternationalizationManager.Instance.GetTranslation("plugin_init_time"), pair.InitTime);
|
||||
pluginQueryTime.Text =
|
||||
string.Format(InternationalizationManager.Instance.GetTranslation("plugin_query_time"), pair.AvgQueryTime);
|
||||
if (actionKeywords.Count > 1)
|
||||
{
|
||||
provider = pair.Plugin as ISettingProvider;
|
||||
pluginAuthor.Visibility = Visibility.Visible;
|
||||
pluginInitTime.Text =
|
||||
string.Format(InternationalizationManager.Instance.GetTranslation("plugin_init_time"), pair.InitTime);
|
||||
pluginQueryTime.Text =
|
||||
string.Format(InternationalizationManager.Instance.GetTranslation("plugin_query_time"), pair.AvgQueryTime);
|
||||
if (pair.Metadata.ActionKeywords.Count > 1)
|
||||
{
|
||||
pluginActionKeywordsTitle.Visibility = Visibility.Collapsed;
|
||||
pluginActionKeywords.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
else
|
||||
{
|
||||
pluginActionKeywordsTitle.Visibility = Visibility.Visible;
|
||||
pluginActionKeywords.Visibility = Visibility.Visible;
|
||||
}
|
||||
tbOpenPluginDirecoty.Visibility = Visibility.Visible;
|
||||
pluginTitle.Text = pair.Metadata.Name;
|
||||
pluginTitle.Cursor = Cursors.Hand;
|
||||
pluginActionKeywords.Text = string.Join(Query.ActionKeywordSeperater, pair.Metadata.ActionKeywords.ToArray());
|
||||
pluginAuthor.Text = InternationalizationManager.Instance.GetTranslation("author") + ": " + pair.Metadata.Author;
|
||||
pluginSubTitle.Text = pair.Metadata.Description;
|
||||
pluginId = pair.Metadata.ID;
|
||||
pluginIcon.Source = ImageLoader.ImageLoader.Load(pair.Metadata.FullIcoPath);
|
||||
pluginActionKeywordsTitle.Visibility = Visibility.Collapsed;
|
||||
pluginActionKeywords.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
else
|
||||
{
|
||||
pluginActionKeywordsTitle.Visibility = Visibility.Visible;
|
||||
pluginActionKeywords.Visibility = Visibility.Visible;
|
||||
}
|
||||
tbOpenPluginDirecoty.Visibility = Visibility.Visible;
|
||||
pluginTitle.Text = pair.Metadata.Name;
|
||||
pluginTitle.Cursor = Cursors.Hand;
|
||||
pluginActionKeywords.Text = string.Join(Query.ActionKeywordSeperater, actionKeywords.ToArray());
|
||||
pluginAuthor.Text = InternationalizationManager.Instance.GetTranslation("author") + ": " + pair.Metadata.Author;
|
||||
pluginSubTitle.Text = pair.Metadata.Description;
|
||||
pluginId = pair.Metadata.ID;
|
||||
pluginIcon.Source = ImageLoader.ImageLoader.Load(pair.Metadata.FullIcoPath);
|
||||
|
||||
var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pluginId);
|
||||
cbDisablePlugin.IsChecked = customizedPluginConfig != null && customizedPluginConfig.Disabled;
|
||||
|
||||
PluginContentPanel.Content = null;
|
||||
if (provider != null)
|
||||
var settingProvider = pair.Plugin as ISettingProvider;
|
||||
if (settingProvider != null)
|
||||
{
|
||||
Control control = null;
|
||||
if (!featureControls.TryGetValue(provider, out control))
|
||||
featureControls.Add(provider, control = provider.CreateSettingPanel());
|
||||
Control control;
|
||||
if (!featureControls.TryGetValue(settingProvider, out control))
|
||||
{
|
||||
var multipleActionKeywordsProvider = settingProvider as IMultipleActionKeywords;
|
||||
if (multipleActionKeywordsProvider != null)
|
||||
{
|
||||
multipleActionKeywordsProvider.ActionKeywordsChanged += (o, e) =>
|
||||
{
|
||||
// update in-memory data
|
||||
PluginManager.UpdateActionKeywordForPlugin(pair, e.OldActionKeyword, e.NewActionKeyword);
|
||||
// update persistant data
|
||||
UserSettingStorage.Instance.UpdateActionKeyword(pair.Metadata);
|
||||
|
||||
MessageBox.Show(InternationalizationManager.Instance.GetTranslation("succeed"));
|
||||
};
|
||||
}
|
||||
|
||||
featureControls.Add(settingProvider, control = settingProvider.CreateSettingPanel());
|
||||
}
|
||||
PluginContentPanel.Content = control;
|
||||
control.HorizontalAlignment = HorizontalAlignment.Stretch;
|
||||
control.VerticalAlignment = VerticalAlignment.Stretch;
|
||||
|
||||
Reference in New Issue
Block a user