diff options
| author | Jake Mannens <jake@asger.xyz> | 2023-08-22 10:00:21 +1000 |
|---|---|---|
| committer | Jake Mannens <jake@asger.xyz> | 2023-08-22 10:00:21 +1000 |
| commit | be4496b110e68e2c5a8f76f8ed770e9818befd68 (patch) | |
| tree | 25f597f34eaf357bd90a5b6b9b5440b7bf699ce1 /Pages/Gallery.razor | |
| parent | c29bdd4a9ec782411f57e3c798e1bb01ca7d417d (diff) | |
Finalised initial implementation of NSFW tag filtering
Diffstat (limited to 'Pages/Gallery.razor')
| -rw-r--r-- | Pages/Gallery.razor | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/Pages/Gallery.razor b/Pages/Gallery.razor index fb58ca0..b07c5e3 100644 --- a/Pages/Gallery.razor +++ b/Pages/Gallery.razor @@ -1,7 +1,9 @@ @page "/" @page "/Gallery" @inject IDbContextFactory<HBContext> dbFactory +@inject ITagService tagService @inject ISearchService searchService +@inject IUserStateService userState <PageTitle>@(Query is null ? "Gallery" : "Search Results")</PageTitle> @@ -29,24 +31,42 @@ private Media[] Media; + protected override void OnInitialized() => + userState.ShowNsfwChanged += ShowNsfwChanged; + protected override void OnParametersSet() => LoadMedia(); private void LoadMedia() { using var db = dbFactory.CreateDbContext(); + IEnumerable<Media> media = db.Media + .OrderByDescending(m => m.ObjectId) + .ToArray(); + + if(Query is not null) + media = searchService.Search(Query) + .OrderByDescending(m => m.ObjectId); + if(Ingest is not null && Ingest == true) { - Media = db.Media - .OrderByDescending(m => m.ObjectId) - .ToArray() - .Where(m => m.IsIngest) - .ToArray(); - } else { - if(Query is null) - Media = db.Media - .OrderByDescending(m => m.ObjectId) - .ToArray(); - else - Media = searchService.Search(Query); + media = media + .AsEnumerable() + .Where(m => m.IsIngest); } + + if(!userState.ShowNsfw) + media = media + .AsEnumerable() + .Where(m => !tagService.GetAllTags(m) + .Select(e => e.tagDefinition.Guid) + .Contains(HBContext.NsfwTag)); + + Media = media.ToArray(); + } + + private async void ShowNsfwChanged(object? sender, bool showNsfw) { + await InvokeAsync(() => { + LoadMedia(); + StateHasChanged(); + }); } } |
