From edf2645d0e9fd564dcd03a77543468df0276f102 Mon Sep 17 00:00:00 2001 From: erri120 Date: Mon, 27 Apr 2020 12:18:08 +0200 Subject: [PATCH] Added NSFW filter to the gallery --- Wabbajack.Lib/ModListRegistry/ModListMetadata.cs | 3 +++ Wabbajack/View Models/Gallery/ModListGalleryVM.cs | 14 ++++++++++++-- Wabbajack/Views/Compilers/CompilerView.xaml | 8 +++----- Wabbajack/Views/ModListGalleryView.xaml | 6 ++++++ Wabbajack/Views/ModListGalleryView.xaml.cs | 6 ++++-- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs index df19992b..e0fe28cf 100644 --- a/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs +++ b/Wabbajack.Lib/ModListRegistry/ModListMetadata.cs @@ -29,6 +29,9 @@ namespace Wabbajack.Lib.ModListRegistry [JsonProperty("official")] public bool Official { get; set; } + [JsonProperty("nsfw")] + public bool NSFW { 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 5b3d4148..3d20d69e 100644 --- a/Wabbajack/View Models/Gallery/ModListGalleryVM.cs +++ b/Wabbajack/View Models/Gallery/ModListGalleryVM.cs @@ -34,6 +34,9 @@ namespace Wabbajack [Reactive] public bool OnlyInstalled { get; set; } + + [Reactive] + public bool ShowNSFW { get; set; } private readonly ObservableAsPropertyHelper _Loaded; public bool Loaded => _Loaded.Value; @@ -49,6 +52,7 @@ namespace Wabbajack () => { OnlyInstalled = false; + ShowNSFW = false; Search = string.Empty; }); @@ -91,7 +95,7 @@ namespace Wabbajack .Transform(m => new ModListMetadataVM(this, m)) .DisposeMany() // Filter only installed - .Filter(predicateChanged: this.WhenAny(x => x.OnlyInstalled) + .Filter(this.WhenAny(x => x.OnlyInstalled) .Select>(onlyInstalled => (vm) => { if (!onlyInstalled) return true; @@ -99,13 +103,19 @@ namespace Wabbajack return gameMeta.IsInstalled; })) // Filter on search box - .Filter(predicateChanged: this.WhenAny(x => x.Search) + .Filter(this.WhenAny(x => x.Search) .Debounce(TimeSpan.FromMilliseconds(150), RxApp.MainThreadScheduler) .Select>(search => (vm) => { if (string.IsNullOrWhiteSpace(search)) return true; return vm.Metadata.Title.ContainsCaseInsensitive(search); })) + .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) diff --git a/Wabbajack/Views/Compilers/CompilerView.xaml b/Wabbajack/Views/Compilers/CompilerView.xaml index 5aca73d3..cd0247b0 100644 --- a/Wabbajack/Views/Compilers/CompilerView.xaml +++ b/Wabbajack/Views/Compilers/CompilerView.xaml @@ -147,11 +147,9 @@ Text="Readme" ToolTip="Link to the Readme." /> - - NSFW: - - + + x.ErrorIcon.Visibility) .DisposeWith(dispose); - this.BindStrict(this.ViewModel, vm => vm.Search, x => x.SearchBox.Text) + this.BindStrict(ViewModel, vm => vm.Search, x => x.SearchBox.Text) .DisposeWith(dispose); - this.BindStrict(this.ViewModel, vm => vm.OnlyInstalled, x => x.OnlyInstalledCheckbox.IsChecked) + this.BindStrict(ViewModel, vm => vm.OnlyInstalled, x => x.OnlyInstalledCheckbox.IsChecked) + .DisposeWith(dispose); + this.BindStrict(ViewModel, vm => vm.ShowNSFW, x => x.ShowNSFW.IsChecked) .DisposeWith(dispose); this.WhenAny(x => x.ViewModel.ClearFiltersCommand)