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";
}