|
3 | 3 | using Flow.Launcher.Plugin;
|
4 | 4 | using Flow.Launcher.ViewModel;
|
5 | 5 | using Flow.Launcher.Core;
|
| 6 | +using System.Linq; |
| 7 | +using System.Collections.Generic; |
6 | 8 |
|
7 | 9 | namespace Flow.Launcher
|
8 | 10 | {
|
@@ -32,20 +34,59 @@ private void BtnCancel_OnClick(object sender, RoutedEventArgs e)
|
32 | 34 |
|
33 | 35 | private void btnDone_OnClick(object sender, RoutedEventArgs _)
|
34 | 36 | {
|
35 |
| - var oldActionKeyword = plugin.Metadata.ActionKeywords[0]; |
36 |
| - var newActionKeyword = tbAction.Text.Trim(); |
37 |
| - newActionKeyword = newActionKeyword.Length > 0 ? newActionKeyword : "*"; |
38 |
| - |
39 |
| - if (!PluginViewModel.IsActionKeywordRegistered(newActionKeyword)) |
| 37 | + var oldActionKeywords = plugin.Metadata.ActionKeywords; |
| 38 | + |
| 39 | + var newActionKeywords = tbAction.Text.Split(Query.ActionKeywordSeparator).ToList(); |
| 40 | + newActionKeywords.RemoveAll(string.IsNullOrEmpty); |
| 41 | + newActionKeywords = newActionKeywords.Distinct().ToList(); |
| 42 | + |
| 43 | + newActionKeywords = newActionKeywords.Count > 0 ? newActionKeywords : new() { Query.GlobalPluginWildcardSign }; |
| 44 | + |
| 45 | + var addedActionKeywords = newActionKeywords.Except(oldActionKeywords).ToList(); |
| 46 | + var removedActionKeywords = oldActionKeywords.Except(newActionKeywords).ToList(); |
| 47 | + if (!addedActionKeywords.Any(App.API.ActionKeywordAssigned)) |
40 | 48 | {
|
41 |
| - pluginViewModel.ChangeActionKeyword(newActionKeyword, oldActionKeyword); |
42 |
| - Close(); |
| 49 | + if (oldActionKeywords.Count != newActionKeywords.Count) |
| 50 | + { |
| 51 | + ReplaceActionKeyword(plugin.Metadata.ID, removedActionKeywords, addedActionKeywords); |
| 52 | + return; |
| 53 | + } |
| 54 | + |
| 55 | + var sortedOldActionKeywords = oldActionKeywords.OrderBy(s => s).ToList(); |
| 56 | + var sortedNewActionKeywords = newActionKeywords.OrderBy(s => s).ToList(); |
| 57 | + |
| 58 | + if (sortedOldActionKeywords.SequenceEqual(sortedNewActionKeywords)) |
| 59 | + { |
| 60 | + // User just changes the sequence of action keywords |
| 61 | + var msg = translater.GetTranslation("newActionKeywordsSameAsOld"); |
| 62 | + MessageBoxEx.Show(msg); |
| 63 | + } |
| 64 | + else |
| 65 | + { |
| 66 | + ReplaceActionKeyword(plugin.Metadata.ID, removedActionKeywords, addedActionKeywords); |
| 67 | + } |
43 | 68 | }
|
44 | 69 | else
|
45 | 70 | {
|
46 | 71 | string msg = translater.GetTranslation("newActionKeywordsHasBeenAssigned");
|
47 | 72 | App.API.ShowMsgBox(msg);
|
48 | 73 | }
|
49 | 74 | }
|
| 75 | + |
| 76 | + private void ReplaceActionKeyword(string id, IReadOnlyList<string> removedActionKeywords, IReadOnlyList<string> addedActionKeywords) |
| 77 | + { |
| 78 | + foreach (var actionKeyword in removedActionKeywords) |
| 79 | + { |
| 80 | + App.API.RemoveActionKeyword(id, actionKeyword); |
| 81 | + } |
| 82 | + foreach (var actionKeyword in addedActionKeywords) |
| 83 | + { |
| 84 | + App.API.AddActionKeyword(id, actionKeyword); |
| 85 | + } |
| 86 | + |
| 87 | + // Update action keywords text and close window |
| 88 | + pluginViewModel.OnActionKeywordsChanged(); |
| 89 | + Close(); |
| 90 | + } |
50 | 91 | }
|
51 | 92 | }
|
0 commit comments