From 73d3168d2cff559a19d71f5df2332ecb97213359 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Sat, 14 Nov 2020 12:16:11 -0700 Subject: [PATCH 1/2] Implement utility list filtering for the UI --- Wabbajack.Lib/ModListRegistry/ModListMetadata.cs | 3 +++ .../View Models/Gallery/ModListGalleryVM.cs | 16 ++++++++++++++++ Wabbajack/Views/ModListGalleryView.xaml | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs index 3b54d352..20636c5c 100644 --- a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs +++ b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs @@ -34,6 +34,9 @@ namespace Wabbajack.Lib.ModListRegistry [JsonProperty("nsfw")] public bool NSFW { get; set; } + + [JsonProperty("utility_list")] + public bool UtilityList { get; set; } [JsonProperty("links")] public LinksObject Links { get; set; } = new LinksObject(); diff --git a/Wabbajack/View Models/Gallery/ModListGalleryVM.cs b/Wabbajack/View Models/Gallery/ModListGalleryVM.cs index 7d914fa8..81125437 100644 --- a/Wabbajack/View Models/Gallery/ModListGalleryVM.cs +++ b/Wabbajack/View Models/Gallery/ModListGalleryVM.cs @@ -37,6 +37,9 @@ namespace Wabbajack [Reactive] public bool ShowNSFW { get; set; } + + [Reactive] + public bool ShowUtilityLists { get; set; } [Reactive] public string GameType { get; set; } @@ -77,6 +80,7 @@ namespace Wabbajack { OnlyInstalled = false; ShowNSFW = false; + ShowUtilityLists = false; Search = string.Empty; GameType = ALL_GAME_TYPE; }); @@ -150,6 +154,12 @@ namespace Wabbajack if (!vm.Metadata.NSFW) return true; return vm.Metadata.NSFW && showNSFW; })) + .Filter(this.WhenAny(x => x.ShowUtilityLists) + .Select>(showNSFW => vm => + { + if (!vm.Metadata.UtilityList) return true; + return vm.Metadata.UtilityList && showNSFW; + })) // Filter by Game .Filter(this.WhenAny(x => x.GameType) .Debounce(TimeSpan.FromMilliseconds(150), RxApp.MainThreadScheduler) @@ -169,6 +179,12 @@ namespace Wabbajack if (!vm.Metadata.NSFW) return true; return vm.Metadata.NSFW && showNSFW; })) + .Filter(this.WhenAny(x => x.ShowUtilityLists) + .Select>(showUtilityLists => vm => + { + if (!vm.Metadata.UtilityList) return true; + return vm.Metadata.UtilityList && showUtilityLists; + })) // Put broken lists at bottom .Sort(Comparer.Create((a, b) => a.IsBroken.CompareTo(b.IsBroken))) .Bind(ModLists) diff --git a/Wabbajack/Views/ModListGalleryView.xaml b/Wabbajack/Views/ModListGalleryView.xaml index 0d698ec3..152090b9 100644 --- a/Wabbajack/Views/ModListGalleryView.xaml +++ b/Wabbajack/Views/ModListGalleryView.xaml @@ -116,6 +116,14 @@ VerticalAlignment="Center" Content="Show NSFW" Foreground="{StaticResource ForegroundBrush}" /> + + + Date: Sat, 14 Nov 2020 12:30:28 -0700 Subject: [PATCH 2/2] Binding fixes for utility lists --- Wabbajack/Settings.cs | 1 + .../View Models/Gallery/ModListGalleryVM.cs | 20 +++---------------- Wabbajack/Views/ModListGalleryView.xaml.cs | 2 ++ 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/Wabbajack/Settings.cs b/Wabbajack/Settings.cs index 84736319..d4990ac8 100644 --- a/Wabbajack/Settings.cs +++ b/Wabbajack/Settings.cs @@ -107,6 +107,7 @@ namespace Wabbajack private bool _useCompression = false; public bool UseCompression { get => _useCompression; set => RaiseAndSetIfChanged(ref _useCompression, value); } + public bool ShowUtilityLists { get; set; } } [JsonName("PerformanceSettings")] diff --git a/Wabbajack/View Models/Gallery/ModListGalleryVM.cs b/Wabbajack/View Models/Gallery/ModListGalleryVM.cs index 81125437..12d6903d 100644 --- a/Wabbajack/View Models/Gallery/ModListGalleryVM.cs +++ b/Wabbajack/View Models/Gallery/ModListGalleryVM.cs @@ -64,6 +64,7 @@ namespace Wabbajack { GameType = !string.IsNullOrEmpty(settings.Game) ? settings.Game : ALL_GAME_TYPE; ShowNSFW = settings.ShowNSFW; + ShowUtilityLists = settings.ShowUtilityLists; OnlyInstalled = settings.OnlyInstalled; Search = settings.Search; } @@ -155,11 +156,7 @@ namespace Wabbajack return vm.Metadata.NSFW && showNSFW; })) .Filter(this.WhenAny(x => x.ShowUtilityLists) - .Select>(showNSFW => vm => - { - if (!vm.Metadata.UtilityList) return true; - return vm.Metadata.UtilityList && showNSFW; - })) + .Select>(showUtilityLists => vm => showUtilityLists ? vm.Metadata.UtilityList : !vm.Metadata.UtilityList)) // Filter by Game .Filter(this.WhenAny(x => x.GameType) .Debounce(TimeSpan.FromMilliseconds(150), RxApp.MainThreadScheduler) @@ -173,18 +170,6 @@ namespace Wabbajack return GameType == vm.Metadata.Game.GetDescription().ToString(); })) - .Filter(this.WhenAny(x => x.ShowNSFW) - .Select>(showNSFW => vm => - { - if (!vm.Metadata.NSFW) return true; - return vm.Metadata.NSFW && showNSFW; - })) - .Filter(this.WhenAny(x => x.ShowUtilityLists) - .Select>(showUtilityLists => vm => - { - if (!vm.Metadata.UtilityList) return true; - return vm.Metadata.UtilityList && showUtilityLists; - })) // Put broken lists at bottom .Sort(Comparer.Create((a, b) => a.IsBroken.CompareTo(b.IsBroken))) .Bind(ModLists) @@ -220,6 +205,7 @@ namespace Wabbajack settings.Game = GameType; settings.Search = Search; settings.ShowNSFW = ShowNSFW; + settings.ShowUtilityLists = ShowUtilityLists; settings.OnlyInstalled = OnlyInstalled; } } diff --git a/Wabbajack/Views/ModListGalleryView.xaml.cs b/Wabbajack/Views/ModListGalleryView.xaml.cs index 863d7234..d5c5e7f3 100644 --- a/Wabbajack/Views/ModListGalleryView.xaml.cs +++ b/Wabbajack/Views/ModListGalleryView.xaml.cs @@ -63,6 +63,8 @@ namespace Wabbajack .DisposeWith(dispose); this.BindStrict(ViewModel, vm => vm.ShowNSFW, x => x.ShowNSFW.IsChecked) .DisposeWith(dispose); + this.BindStrict(ViewModel, vm => vm.ShowUtilityLists, x => x.ShowUtilityLists.IsChecked) + .DisposeWith(dispose); this.WhenAny(x => x.ViewModel.ClearFiltersCommand) .BindToStrict(this, x => x.ClearFiltersButton.Command)