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/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 7d914fa8..12d6903d 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; } @@ -61,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; } @@ -77,6 +81,7 @@ namespace Wabbajack { OnlyInstalled = false; ShowNSFW = false; + ShowUtilityLists = false; Search = string.Empty; GameType = ALL_GAME_TYPE; }); @@ -150,6 +155,8 @@ namespace Wabbajack if (!vm.Metadata.NSFW) return true; return vm.Metadata.NSFW && showNSFW; })) + .Filter(this.WhenAny(x => x.ShowUtilityLists) + .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) @@ -163,12 +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; - })) // Put broken lists at bottom .Sort(Comparer.Create((a, b) => a.IsBroken.CompareTo(b.IsBroken))) .Bind(ModLists) @@ -204,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 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}" /> + + + 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)