summaryrefslogtreecommitdiff
path: root/Pages/Gallery.razor
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2023-08-22 10:00:21 +1000
committerJake Mannens <jake@asger.xyz>2025-08-18 17:03:21 +1000
commitff715df3ccda51c1bb3d4b84f4391b4fdd1962dd (patch)
tree00cca236a9036896dc7a1d3688311c65f96159d8 /Pages/Gallery.razor
parent4558ed9d6cbc59229cd56cc7a6c36b1df0b8199a (diff)
Finalised initial implementation of NSFW tag filtering
Diffstat (limited to 'Pages/Gallery.razor')
-rw-r--r--Pages/Gallery.razor44
1 files changed, 32 insertions, 12 deletions
diff --git a/Pages/Gallery.razor b/Pages/Gallery.razor
index 8b1954f..36b2788 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>@Title</PageTitle>
@@ -38,24 +40,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();
+ });
}
}