summaryrefslogtreecommitdiff
path: root/Services/MediaService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Services/MediaService.cs')
-rw-r--r--Services/MediaService.cs20
1 files changed, 16 insertions, 4 deletions
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();
}