summaryrefslogtreecommitdiff
path: root/internal/service/media_write.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-03 19:17:04 +0300
committerPaul Buetow <paul@buetow.org>2026-05-03 19:17:04 +0300
commit30c2b0fe8232cc748ab2bded6ab4d76febe32425 (patch)
tree985578b326a1ff8fe7af395bf08471857376b8fc /internal/service/media_write.go
parent687b86cdeef2192272f0945ddd496322a9113f9e (diff)
fix(admin): fix rescan goroutine lifecycle and race on shared ScanProgress
- Protect adminService scan state (cancel func + progress pointer) with sync.Mutex. - Allocate fresh ScanProgress per trigger and pass it to the scanner, eliminating races on the previously shared progress struct. - Cancel previous scan context before starting a new one. - Add tests for cancellation, fresh progress per scan, concurrent triggers, and empty progress when never started. - Fix race-prone tests by polling Running==true before waiting for completion.
Diffstat (limited to 'internal/service/media_write.go')
-rw-r--r--internal/service/media_write.go13
1 files changed, 11 insertions, 2 deletions
diff --git a/internal/service/media_write.go b/internal/service/media_write.go
index ff316c7..4343db8 100644
--- a/internal/service/media_write.go
+++ b/internal/service/media_write.go
@@ -92,8 +92,17 @@ func (s *mediaService) UploadMedia(ctx context.Context, setID, userID int64, fil
media.Codec = meta.Codec
media.Resolution = meta.Resolution
media.Bitrate = meta.Bitrate
-
- if media.Type == model.MediaTypeVideo {
+ media.Width = meta.Width
+ media.Height = meta.Height
+ media.EXIFCamera = meta.EXIFCamera
+ media.EXIFLens = meta.EXIFLens
+ media.EXIFDate = meta.EXIFDate
+ media.EXIFISO = meta.EXIFISO
+ media.EXIFFNumber = meta.EXIFFNumber
+ media.EXIFExposure = meta.EXIFExposure
+ media.EXIFFocalLength = meta.EXIFFocalLength
+
+ if media.Type == model.MediaTypeVideo || media.Type == model.MediaTypeImage {
if err := s.generateThumbnail(ctx, media, meta.Duration); err != nil {
os.Remove(path)
_ = s.store.HardDeleteMedia(ctx, media.ID)