From 85638c23ae996c9ae72e31b484507a5c511950b3 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 15 Oct 2019 22:39:55 +1100 Subject: [PATCH] Add reindex call for enable/disable button For when program source enable && disable + where program not in cache --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 2 + Plugins/Wox.Plugin.Program/Settings.cs | 2 +- .../Views/Commands/ProgramSettingDisplay.cs | 22 ++++++++- .../Views/ProgramSetting.xaml.cs | 48 +++++++------------ 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index 7d48770c5f..b24c0187da 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -270,6 +270,8 @@ namespace Wox.Plugin.Program.Programs sources.Where(s => Directory.Exists(s.Location) && s.Enabled) .SelectMany(s => ProgramPaths(s.Location, suffixes)) .ToList() + .Where(t1 => !Main._settings.DisabledProgramSources.Any(x => t1 == x.UniqueIdentifier)) + .ToList() .ForEach(x => listToAdd.Add(x)); var paths = listToAdd.ToArray(); diff --git a/Plugins/Wox.Plugin.Program/Settings.cs b/Plugins/Wox.Plugin.Program/Settings.cs index 1153debf4d..4ce606cb8a 100644 --- a/Plugins/Wox.Plugin.Program/Settings.cs +++ b/Plugins/Wox.Plugin.Program/Settings.cs @@ -20,7 +20,7 @@ namespace Wox.Plugin.Program /// Contains user added folder location contents as well as all user disabled applications /// /// - /// Win32 class applications sets UniqueIdentifier using their full path + /// Win32 class applications sets UniqueIdentifier using their full file path /// UWP class applications sets UniqueIdentifier using their Application User Model ID /// public class ProgramSource diff --git a/Plugins/Wox.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs b/Plugins/Wox.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs index b2785c5444..3145c6f70e 100644 --- a/Plugins/Wox.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs +++ b/Plugins/Wox.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs @@ -27,6 +27,11 @@ namespace Wox.Plugin.Program.Views.Commands // Even though these are disabled, we still want to display them so users can enable later on Main._settings .DisabledProgramSources + .Where(t1 => !Main._settings + .ProgramSources // program sourcces added above already, so exlcude + .Any(x => t1.UniqueIdentifier == x.UniqueIdentifier)) + .Select(x => x) + .ToList() .ForEach(x => list .Add( new ProgramSource @@ -110,7 +115,7 @@ namespace Wox.Plugin.Program.Views.Commands UniqueIdentifier = x.UniqueIdentifier, Enabled = false } - )); + )); } internal static void RemoveDisabledFromSettings(this List list) @@ -125,5 +130,20 @@ namespace Wox.Plugin.Program.Views.Commands .ToList() .ForEach(x => Main._settings.DisabledProgramSources.Remove(x)); } + + internal static bool IsReindexRequired(this List selectedItems) + { + if (selectedItems.Where(t1 => t1.Enabled && !Main._uwps.Any(x => t1.UniqueIdentifier == x.UniqueIdentifier)).Count() > 0 + && selectedItems.Where(t1 => t1.Enabled && !Main._win32s.Any(x => t1.UniqueIdentifier == x.UniqueIdentifier)).Count() > 0) + return true; + + // Program Sources holds list of user added directories, + // so when we enable/disable we need to reindex to show/not show the programs + // that are found in those directories. + if (selectedItems.Where(t1 => Main._settings.ProgramSources.Any(x => t1.UniqueIdentifier == x.UniqueIdentifier)).Count() > 0) + return true; + + return false; + } } } diff --git a/Plugins/Wox.Plugin.Program/Views/ProgramSetting.xaml.cs b/Plugins/Wox.Plugin.Program/Views/ProgramSetting.xaml.cs index 1615a24a0e..24daecd3a8 100644 --- a/Plugins/Wox.Plugin.Program/Views/ProgramSetting.xaml.cs +++ b/Plugins/Wox.Plugin.Program/Views/ProgramSetting.xaml.cs @@ -167,42 +167,31 @@ namespace Wox.Plugin.Program.Views private void btnProgramSourceStatus_OnClick(object sender, RoutedEventArgs e) { - if (AggregatedProgramSourceSelectedItemStatus()) + var selectedItems = programSourceView + .SelectedItems.Cast() + .ToList(); + + if (IsSelectedRowStatusEnabledMoreOrEqualThanDisabled()) { - DisableProgramSources(); + ProgramSettingDisplayList.SetProgramSourcesStatus(selectedItems, false); + + ProgramSettingDisplayList.StoreDisabledInSettings(); } else { - EnableProgramSources(); - } + ProgramSettingDisplayList.SetProgramSourcesStatus(selectedItems, true); + + ProgramSettingDisplayList.RemoveDisabledFromSettings(); + } + + if (selectedItems.IsReindexRequired()) + ReIndexing(); programSourceView.SelectedItems.Clear(); programSourceView.Items.Refresh(); } - public void DisableProgramSources() - { - ProgramSettingDisplayList - .SetProgramSourcesStatus(programSourceView - .SelectedItems.Cast() - .ToList(), - false); - - ProgramSettingDisplayList.StoreDisabledInSettings(); - } - - public void EnableProgramSources() - { - ProgramSettingDisplayList - .SetProgramSourcesStatus(programSourceView - .SelectedItems.Cast() - .ToList(), - true); - - ProgramSettingDisplayList.RemoveDisabledFromSettings(); - } - private void ProgramSourceView_PreviewMouseRightButtonUp(object sender, MouseButtonEventArgs e) { programSourceView.SelectedItems.Clear(); @@ -246,8 +235,7 @@ namespace Wox.Plugin.Program.Views private void Sort(string sortBy, ListSortDirection direction) { - ICollectionView dataView = - CollectionViewSource.GetDefaultView(programSourceView.ItemsSource); + var dataView = CollectionViewSource.GetDefaultView(programSourceView.ItemsSource); dataView.SortDescriptions.Clear(); SortDescription sd = new SortDescription(sortBy, direction); @@ -255,7 +243,7 @@ namespace Wox.Plugin.Program.Views dataView.Refresh(); } - private bool AggregatedProgramSourceSelectedItemStatus() + private bool IsSelectedRowStatusEnabledMoreOrEqualThanDisabled() { var selectedItems = programSourceView .SelectedItems.Cast() @@ -266,7 +254,7 @@ namespace Wox.Plugin.Program.Views private void Row_Click(object sender, RoutedEventArgs e) { - if (AggregatedProgramSourceSelectedItemStatus()) + if (IsSelectedRowStatusEnabledMoreOrEqualThanDisabled()) { btnProgramSourceStatus.Content = "Disable"; }