From f64d0b64918e0c2955d8519dd563563c69452bd4 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Tue, 22 Aug 2023 23:55:38 +1000 Subject: Fixed ingest toggle button Gallery now filters out ingest media if now showing NSFW --- Media.cs | 4 ++++ Pages/Gallery.razor | 10 ++++------ Pages/ViewMedia.razor | 4 +++- Services/MediaService.cs | 4 ++-- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Media.cs b/Media.cs index 3f2021d..2e06dbf 100644 --- a/Media.cs +++ b/Media.cs @@ -17,6 +17,10 @@ public class Media : HBObject { .Select(t => t.TagDefinition) .Any(td => td.Guid == HBContext.IngestTag); + public bool IsNsfw => Tags + .Select(t => t.TagDefinition) + .Any(td => td.Guid == HBContext.NsfwTag); + public string? DisplayName { get { if(ShortDescription is not null) diff --git a/Pages/Gallery.razor b/Pages/Gallery.razor index b07c5e3..695f2f7 100644 --- a/Pages/Gallery.razor +++ b/Pages/Gallery.razor @@ -27,7 +27,7 @@ [Parameter] [SupplyParameterFromQuery] - public bool? Ingest { get; set; } + public bool Ingest { get; set; } = false; private Media[] Media; @@ -47,18 +47,16 @@ media = searchService.Search(Query) .OrderByDescending(m => m.ObjectId); - if(Ingest is not null && Ingest == true) { + if(Ingest) media = media .AsEnumerable() .Where(m => m.IsIngest); - } + // Filter both NSFW AND ingest images if we're not showing NSFW if(!userState.ShowNsfw) media = media .AsEnumerable() - .Where(m => !tagService.GetAllTags(m) - .Select(e => e.tagDefinition.Guid) - .Contains(HBContext.NsfwTag)); + .Where(m => !m.IsNsfw && !m.IsIngest); Media = media.ToArray(); } diff --git a/Pages/ViewMedia.razor b/Pages/ViewMedia.razor index 68e6d70..fe73c7d 100644 --- a/Pages/ViewMedia.razor +++ b/Pages/ViewMedia.razor @@ -114,7 +114,6 @@ } private void AddTags(TagDefinition[] tagDefs) { - Console.WriteLine($"Adding tags: {string.Join(", ", tagDefs.Select(td => td.Name))}"); foreach(var tagDef in tagDefs) tagService.AddTag(media, tagDef); mediaTagTable.Refresh(); @@ -122,6 +121,9 @@ private void SetIngest(bool ingest) { mediaService.SetIngest(media, ingest); + // TODO: fix this hacky method of reloading the media entity + db.Entry(media).State = EntityState.Detached; + media = db.Media.First(m => m.Guid == media.Guid); StateHasChanged(); } diff --git a/Services/MediaService.cs b/Services/MediaService.cs index 953fd73..aa733c3 100644 --- a/Services/MediaService.cs +++ b/Services/MediaService.cs @@ -19,14 +19,14 @@ public class MediaService : IMediaService { public void SetIngest(Media media, bool ingest) { using var db = dbFactory.CreateDbContext(); + media = db.Media.First(m => m.Guid == media.Guid); var ingestTag = db.TagDefinitions .First(td => td.Guid == HBContext.IngestTag); if(ingest) media.Tags.Add(new(ingestTag)); else - media.Tags.Remove( - media.Tags.First(t => t.TagDefinition.Guid == ingestTag.Guid)); + media.Tags.RemoveAll(t => t.TagDefinition.Guid == ingestTag.Guid); db.SaveChanges(); } -- cgit v1.3