summaryrefslogtreecommitdiff
path: root/Services/MediaService.cs
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2023-10-20 14:26:02 +1100
committerJake Mannens <jake@asger.xyz>2023-10-20 14:26:02 +1100
commit02670870b2711db0984f492d452a90477c67608a (patch)
treea6c15f627535dd962042d2e000c093cf2ae63956 /Services/MediaService.cs
parent07728d1048f34e1d048da63684b341ab30bc1d06 (diff)
Gallery
Diffstat (limited to 'Services/MediaService.cs')
-rw-r--r--Services/MediaService.cs27
1 files changed, 21 insertions, 6 deletions
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();
}