summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Controllers/MediaController.cs7
-rw-r--r--Media.cs9
-rw-r--r--Pages/Gallery.razor7
-rw-r--r--Pages/ViewMedia.razor11
-rw-r--r--Services/MediaService.cs41
-rw-r--r--Services/OcrService.cs3
-rw-r--r--Services/SearchService.cs1
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<UploadedFile> 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!;
<a href="/ViewMedia?m=@(media.Guid)">
<img src="/media/thumb/@(media.Guid)?h=200" width=@width height="200"/>
</a>
@@ -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<Media> FilterMedia(IEnumerable<Media> 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 @@
<div id="image-container">
<img
src="/media/@(media.Guid)"
- width=@media.Width
- height=@media.Height
+ width=@media.CurrentUploadedFile.Width
+ height=@media.CurrentUploadedFile.Height
onclick="toggleSidebar()"/>
</div>
<div id="metadata">
@@ -42,7 +42,7 @@
<p>Title: <i>@(media.ShortDescription ?? "None")</i></p>
<p class="newlines">Description:<br/><i>@(media.LongDescription ?? "None")</i></p>
}
- <p>Resolution: @(media.Width)x@(media.Height)</p>
+ <p>Resolution: @(media.CurrentUploadedFile.Width)x@(media.CurrentUploadedFile.Height)</p>
<p class="heading">Upload history</p>
<hr/>
<table id="uploaded-files" class="data-table">
@@ -66,10 +66,10 @@
<td title=@file.Filename>@file.Filename</td>
<td title=@file.Length>@file.Length.ToBytesSI()</td>
<td
- title=@(file.OriginalChecksum + (file.ChecksumVerified ? " (verified)" : ""))
+ title=@(file.Checksum + (file.ChecksumVerified ? " (verified)" : ""))
class=@(file.ChecksumVerified ? "verified" : null)>
- @file.OriginalChecksum.Substring(0, 8)
+ @file.Checksum.Substring(0, 8)
</td>
</tr>
}
@@ -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();
}