From b303a2fc0f37244d5f45bb2189238991118356e8 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Wed, 6 Sep 2023 09:30:54 +1000 Subject: Moved metadata from Media object to UploadedFile object --- Controllers/MediaController.cs | 7 +++++-- Media.cs | 9 ++++----- Pages/Gallery.razor | 7 ++++--- Pages/ViewMedia.razor | 11 ++++++----- Services/MediaService.cs | 41 ++++++++++++++++++++++------------------- Services/OcrService.cs | 3 ++- Services/SearchService.cs | 1 + 7 files changed, 44 insertions(+), 35 deletions(-) diff --git a/Controllers/MediaController.cs b/Controllers/MediaController.cs index 8070199..fa6e7ab 100644 --- a/Controllers/MediaController.cs +++ b/Controllers/MediaController.cs @@ -1,6 +1,7 @@ using HyperBooru.Services; using HyperBooru.Util; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; namespace HyperBooru.Controllers; @@ -23,13 +24,15 @@ public class MediaController : Controller { [HttpGet("{mediaId}")] public IActionResult Fetch([FromRoute] Guid mediaId) { - var media = db.Media.First(m => m.Guid == mediaId); + var media = db.Media + .Include(m => m.CurrentUploadedFile) + .First(m => m.Guid == mediaId); if(media is null) return NotFound(); var fs = System.IO.File.OpenRead(mediaService.GetPath(media)); - return new FileStreamResult(fs, media.MimeType); + return new FileStreamResult(fs, media.CurrentUploadedFile.MimeType); } [HttpGet("thumb/{mediaId}")] diff --git a/Media.cs b/Media.cs index 0335aa1..c3dfd31 100644 --- a/Media.cs +++ b/Media.cs @@ -7,12 +7,8 @@ using System.Net.NetworkInformation; namespace HyperBooru; public class Media : HBObject { - public string Checksum { get; set; } - public string MimeType { get; set; } public string? ShortDescription { get; set; } public string? LongDescription { get; set; } - public int Width { get; set; } - public int Height { get; set; } public virtual OcrData? OcrData { get; set; } public virtual UploadedFile? CurrentUploadedFile { get; set; } public virtual List UploadedFiles { get; set; } = new(); @@ -34,10 +30,13 @@ public class Media : HBObject { } public class UploadedFile : HBObject { - public string OriginalChecksum { get; set; } + public string Checksum { get; set; } public bool ChecksumVerified { get; set; } = false; public string? Filename { get; set; } public long Length { get; set; } + public string MimeType { get; set; } + public int? Width { get; set; } + public int? Height { get; set; } public DateTime UploadTime { get; set; } = DateTime.UtcNow; public DateTime? LastAccessTime { get; set; } public DateTime? LastWriteTime { get; set; } diff --git a/Pages/Gallery.razor b/Pages/Gallery.razor index 241bed0..0cf34b5 100644 --- a/Pages/Gallery.razor +++ b/Pages/Gallery.razor @@ -13,7 +13,7 @@ @foreach(var media in displayMedia) { // Precalculate thumbnail size to help the browser // lay out the images during initial page load - int width = media.Width * 200 / media.Height; + int width = (int) media.CurrentUploadedFile.Width! * 200 / (int) media.CurrentUploadedFile.Height!; @@ -81,6 +81,7 @@ } else { queryResult = db.Media .Include(m => m.Tags) + .Include(m => m.CurrentUploadedFile) .OrderByDescending(m => m.ObjectId) .ToArray(); } @@ -104,8 +105,8 @@ private IEnumerable FilterMedia(IEnumerable media) { var nsfwTags = tagService.TagsThatImply(HBContext.NsfwTag) - .Select(td => td.ObjectId) - .ToArray(); + .Select(td => td.ObjectId) + .ToArray(); using var enumerator = media.GetEnumerator(); diff --git a/Pages/ViewMedia.razor b/Pages/ViewMedia.razor index 91f33e6..e8914a0 100644 --- a/Pages/ViewMedia.razor +++ b/Pages/ViewMedia.razor @@ -18,8 +18,8 @@
@@ -42,7 +42,7 @@

Title: @(media.ShortDescription ?? "None")

Description:
@(media.LongDescription ?? "None")

} -

Resolution: @(media.Width)x@(media.Height)

+

Resolution: @(media.CurrentUploadedFile.Width)x@(media.CurrentUploadedFile.Height)

Upload history


@@ -66,10 +66,10 @@ } @@ -154,6 +154,7 @@ media = db.Media .Include(m => m.Tags) .ThenInclude(t => t.TagDefinition) + .Include(m => m.CurrentUploadedFile) .Include(m => m.UploadedFiles) .Include(m => m.OcrData) .First(m => m.Guid == MediaId); diff --git a/Services/MediaService.cs b/Services/MediaService.cs index f814709..6d327cc 100644 --- a/Services/MediaService.cs +++ b/Services/MediaService.cs @@ -120,17 +120,6 @@ public class MediaService : IMediaService { if(checksum is not null && hash != checksum.ToLower()) throw new MediaCreateException("Checksum does not match"); - var fileRecord = new UploadedFile() { - Filename = fileName, - Length = fileData.Length, - OriginalChecksum = hash, - ChecksumVerified = checksum is not null, - UploadTime = DateTime.UtcNow, - LastAccessTime = lastAccessTime, - LastWriteTime = lastWriteTime, - CreateTime = createTime - }; - // Determine the MIME type fileData.Seek(0, SeekOrigin.Begin); var defs = inspector.Inspect(fileData); @@ -142,18 +131,29 @@ public class MediaService : IMediaService { fileData.Seek(0, SeekOrigin.Begin); using var magickImage = new MagickImage(fileData); - var media = db.Media - .FirstOrDefault(m => m.Checksum == hash); + var media = db.UploadedFiles + .FirstOrDefault(uf => uf.Checksum == hash)? + .Media; + + var fileRecord = new UploadedFile() { + Filename = fileName, + Length = fileData.Length, + Checksum = hash, + ChecksumVerified = checksum is not null, + MimeType = mime, + Width = magickImage.Width, + Height = magickImage.Height, + UploadTime = DateTime.UtcNow, + LastAccessTime = lastAccessTime, + LastWriteTime = lastWriteTime, + CreateTime = createTime + }; if(media is null) { var ingestTagDef = db.TagDefinitions .First(td => td.Guid == HBContext.IngestTag); media = new() { - Checksum = hash, - MimeType = mime, - Width = magickImage.Width, - Height = magickImage.Height, CurrentUploadedFile = fileRecord, UploadedFiles = new() { fileRecord @@ -250,11 +250,14 @@ public class MediaService : IMediaService { public Stream GetThumbnail(Guid media, int? width, int? height) { using var db = dbFactory.CreateDbContext(); - var m = db.Media.First(m => m.Guid == media); + + var m = db.Media + .Include(m => m.CurrentUploadedFile) + .First(m => m.Guid == media); if(m is null) throw new ObjectNotFoundException(media); - if(m.MimeType.Split("/")[0] != "image") + if(m.CurrentUploadedFile.MimeType.Split("/")[0] != "image") throw new ThumbnailException("Media object not an image", m); using var image = new MagickImage(GetPath(m)); diff --git a/Services/OcrService.cs b/Services/OcrService.cs index 2f65e43..1967234 100644 --- a/Services/OcrService.cs +++ b/Services/OcrService.cs @@ -59,9 +59,10 @@ public class OcrService : IHostedService { using var db = dbFactory.CreateDbContext(); Guid[] guids = db.Media + .Include(m => m.CurrentUploadedFile) .Include(m => m.OcrData) .Where(m => m.OcrData == null) - .Where(m => m.MimeType.Contains("image/")) + .Where(m => m.CurrentUploadedFile.MimeType.Contains("image/")) .Select(m => m.Guid) .ToArray(); db.Dispose(); diff --git a/Services/SearchService.cs b/Services/SearchService.cs index 2e097e3..7c677b2 100644 --- a/Services/SearchService.cs +++ b/Services/SearchService.cs @@ -56,6 +56,7 @@ public class SearchService : ISearchService { return db.Media .Include(m => m.Tags) + .Include(m => m.CurrentUploadedFile) .Where(m => mediaIds.Contains(m.ObjectId)) .ToArray(); } -- cgit v1.3
@file.Filename @file.Length.ToBytesSI() - @file.OriginalChecksum.Substring(0, 8) + @file.Checksum.Substring(0, 8)