diff --git a/source/BulkCrapUninstaller/Forms/Windows/MainWindow.cs b/source/BulkCrapUninstaller/Forms/Windows/MainWindow.cs index 480096e9..4110d29d 100644 --- a/source/BulkCrapUninstaller/Forms/Windows/MainWindow.cs +++ b/source/BulkCrapUninstaller/Forms/Windows/MainWindow.cs @@ -1419,7 +1419,7 @@ private void listView_ListRefreshIsRunningChanged(object sender, _anySysComponents = _listView.AllUninstallers.Any(x => x.SystemComponent); _anyUpdates = _listView.AllUninstallers.Any(x => x.IsUpdate); _anyInvalid = _listView.AllUninstallers.Any(x => !x.IsValid); - _anyTweaks = _listView.AllUninstallers.Any(x => x.RatingId != null && x.RatingId.StartsWith("tweak", StringComparison.OrdinalIgnoreCase)); + _anyTweaks = _listView.AllUninstallers.Any(x => x.IsScriptTweak); propertiesSidebar.StoreAppsEnabled = _anyStoreApps; propertiesSidebar.WinFeaturesEnabled = _anyWinFeatures; @@ -1856,11 +1856,11 @@ private void onlyWebBrowsersToolStripMenuItem_Click(object sender, EventArgs e) s.FilterShowTweaks = true; } - private void viewTweaksToolStripMenuItem_Click(object sender, EventArgs e) - { - everythingToolStripMenuItem_Click(sender, e); - filterEditor1.Search(@"\Resources\Scripts\Tweak", ComparisonMethod.Contains, nameof(ApplicationUninstallerEntry.UninstallString)); - } + private void viewTweaksToolStripMenuItem_Click(object sender, EventArgs e) + { + everythingToolStripMenuItem_Click(sender, e); + filterEditor1.Search(true.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsScriptTweak)); + } private void createRestorePointToolStripMenuItem_Click(object sender, EventArgs e) { diff --git a/source/BulkCrapUninstaller/Functions/ApplicationList/UninstallerListConfigurator.cs b/source/BulkCrapUninstaller/Functions/ApplicationList/UninstallerListConfigurator.cs index 90be9a53..c0da56ca 100644 --- a/source/BulkCrapUninstaller/Functions/ApplicationList/UninstallerListConfigurator.cs +++ b/source/BulkCrapUninstaller/Functions/ApplicationList/UninstallerListConfigurator.cs @@ -111,10 +111,9 @@ public IEnumerable GenerateEquivalentFilter() results.Add(new Filter("Updates", true, new FilterCondition(true.ToString(), ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsUpdate)))); - // TODO Better detection, can lead to bugs down the line - if (!_settings.Settings.FilterShowTweaks) - results.Add(new Filter("Tweaks", true, new FilterCondition(@"\Resources\Scripts\Tweak", - ComparisonMethod.Contains, nameof(ApplicationUninstallerEntry.UninstallString)))); + if (!_settings.Settings.FilterShowTweaks) + results.Add(new Filter("Tweaks", true, new FilterCondition(true.ToString(), + ComparisonMethod.Equals, nameof(ApplicationUninstallerEntry.IsScriptTweak)))); return results; } @@ -143,13 +142,10 @@ private bool ListViewFilter(object obj) if (!_settings.Settings.FilterShowUpdates && entry.IsUpdate) return false; - if (entry.RatingId != null) - { - if (!_settings.Settings.FilterShowTweaks && entry.RatingId.StartsWith("tweak", StringComparison.Ordinal)) - return false; - } - - if (string.IsNullOrEmpty(_filteringFilterCondition.FilterText)) return true; + if (!_settings.Settings.FilterShowTweaks && entry.IsScriptTweak) + return false; + + if (string.IsNullOrEmpty(_filteringFilterCondition.FilterText)) return true; return _filteringFilterCondition.TestEntry(entry) == true; } @@ -267,4 +263,4 @@ public void UpdateColumnFiltering(bool anyUninstallers) _updateThrottleTimer.Start(); } } -} \ No newline at end of file +} diff --git a/source/BulkCrapUninstallerTests/ApplicationUninstallerEntryTests.cs b/source/BulkCrapUninstallerTests/ApplicationUninstallerEntryTests.cs new file mode 100644 index 00000000..121d8ba6 --- /dev/null +++ b/source/BulkCrapUninstallerTests/ApplicationUninstallerEntryTests.cs @@ -0,0 +1,24 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using UninstallTools; + +namespace BulkCrapUninstallerTests +{ + [TestClass] + public class ApplicationUninstallerEntryTests + { + [DataTestMethod] + [DataRow("Tweak-TestEntry", true)] + [DataRow("tweak-TestEntry", true)] + [DataRow("Steam App 42", false)] + [DataRow(null, false)] + public void IsScriptTweak_MatchesCurrentTweakIdFormat(string ratingId, bool expected) + { + var entry = new ApplicationUninstallerEntry + { + RatingId = ratingId + }; + + Assert.AreEqual(expected, entry.IsScriptTweak); + } + } +} diff --git a/source/UninstallTools/ApplicationUninstallerEntry.cs b/source/UninstallTools/ApplicationUninstallerEntry.cs index 1cb77eff..b5130184 100644 --- a/source/UninstallTools/ApplicationUninstallerEntry.cs +++ b/source/UninstallTools/ApplicationUninstallerEntry.cs @@ -177,15 +177,20 @@ public string InstallSource /// /// True if this is an update for another product /// - [ComparisonTarget] - [LocalisedName(typeof(Localisation), nameof(Localisation.IsUpdate))] - public bool IsUpdate { get; set; } - - /// - /// True if the application can be uninstalled. False if the uninstaller is missing or is otherwise invalid. - /// - [ComparisonTarget] - [LocalisedName(typeof(Localisation), nameof(Localisation.IsValid))] + [ComparisonTarget] + [LocalisedName(typeof(Localisation), nameof(Localisation.IsUpdate))] + public bool IsUpdate { get; set; } + + [XmlIgnore] + [ComparisonTarget] + public bool IsScriptTweak => !string.IsNullOrEmpty(RatingId) && + RatingId.StartsWith("Tweak-", StringComparison.OrdinalIgnoreCase); + + /// + /// True if the application can be uninstalled. False if the uninstaller is missing or is otherwise invalid. + /// + [ComparisonTarget] + [LocalisedName(typeof(Localisation), nameof(Localisation.IsValid))] public bool IsValid { get; set; } /// @@ -523,4 +528,4 @@ private static string CleanupPath(string path, bool isFilename = false) return path.TrimEnd('\\'); } } -} \ No newline at end of file +}