diff options
| author | Jake Mannens <jakem_5@hotmail.com> | 2026-01-14 20:46:27 +1100 |
|---|---|---|
| committer | Jake Mannens <jakem_5@hotmail.com> | 2026-01-14 21:19:28 +1100 |
| commit | 09b54d55a54322633c940c63758f18712ebc65ae (patch) | |
| tree | dd2ffba772eedfcc1350a62817c56ed63ec81a84 | |
| parent | f9ed4f109bf216579ad241d33fd223403c9a72fb (diff) | |
Fixed media deduping and added uploaded file record deduping
| -rw-r--r-- | Pages/ViewMedia.razor | 2 | ||||
| -rw-r--r-- | Services/MediaService.cs | 20 |
2 files changed, 17 insertions, 5 deletions
diff --git a/Pages/ViewMedia.razor b/Pages/ViewMedia.razor index e7216fd..f1270f2 100644 --- a/Pages/ViewMedia.razor +++ b/Pages/ViewMedia.razor @@ -54,7 +54,7 @@ <th>Size</th> <th>Original Checksum</th> </tr> - @foreach(var file in media.UploadedFiles) { + @foreach(var file in media.UploadedFiles.OrderByDescending(uf => uf.UploadTime)) { <tr> <td title=@file.CreateTime?.ToString()> @(file.CreateTime?.ToString("d") ?? "N/A") diff --git a/Services/MediaService.cs b/Services/MediaService.cs index 6d327cc..7e32651 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,8 +155,7 @@ public class MediaService : IMediaService { .First(td => td.Guid == HBContext.IngestTag); media = new() { - CurrentUploadedFile = fileRecord, - UploadedFiles = new() { + UploadedFiles = new() { fileRecord }, Tags = new() { @@ -163,7 +163,7 @@ public class MediaService : IMediaService { } }; - using var newFile = System.IO.File.Create(GetPath(media)); + using var newFile = File.Create(GetPath(media)); fileData.Seek(0, SeekOrigin.Begin); fileData.CopyTo(newFile); @@ -174,7 +174,12 @@ public class MediaService : IMediaService { 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(); } @@ -308,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(); } |
