From 02670870b2711db0984f492d452a90477c67608a Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 20 Oct 2023 14:26:02 +1100 Subject: Gallery --- Services/MediaService.cs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'Services/MediaService.cs') diff --git a/Services/MediaService.cs b/Services/MediaService.cs index abc026f..a9e744e 100644 --- a/Services/MediaService.cs +++ b/Services/MediaService.cs @@ -132,6 +132,7 @@ public class MediaService : IMediaService { using var magickImage = new MagickImage(fileData); var media = db.UploadedFiles + .Include(uf => uf.Media) .FirstOrDefault(uf => uf.Checksum == hash)? .Media; @@ -154,28 +155,35 @@ public class MediaService : IMediaService { .First(td => td.Guid == HBObjectGuid.IngestTag); media = new() { - CurrentUploadedFile = fileRecord, - UploadedFiles = new() { - fileRecord + UploadedFiles = new() { + fileRecord, }, Tags = new() { new() { TagDefinition = ingestTagDef } } }; - using var newFile = System.IO.File.Create(GetPath(media)); + using var newFile = File.Create(GetPath(media)); fileData.Seek(0, SeekOrigin.Begin); fileData.CopyTo(newFile); newFile.Flush(); db.Media.Add(media); + db.SaveChanges(); + media.CurrentUploadedFile = fileRecord; + db.SaveChanges(); } else { - media.UploadedFiles.Add(fileRecord); + db.Entry(media).Collection(m => m.UploadedFiles).Load(); + var fileHashes = media.UploadedFiles + .Select(uf => GetUploadedFileHash(uf)); + // Only add the uploaded file record if it contains new information + if(!fileHashes.Contains(GetUploadedFileHash(fileRecord))) + media.UploadedFiles.Add(fileRecord); db.Update(media); + db.SaveChanges(); } - db.SaveChanges(); transaction.Commit(); return media; @@ -305,4 +313,11 @@ public class MediaService : IMediaService { Directory.CreateDirectory(fileInfo.Directory.FullName); return fileInfo.FullName; } + + private int GetUploadedFileHash(UploadedFile uf) => ( + uf.CreateTime, + uf.LastWriteTime, + uf.Filename, + uf.Length, + uf.Checksum).GetHashCode(); } -- cgit v1.3