diff --git a/internal/manager/task_generate.go b/internal/manager/task_generate.go index 088a9ea3c..01cb5dac0 100644 --- a/internal/manager/task_generate.go +++ b/internal/manager/task_generate.go @@ -296,14 +296,13 @@ func (j *GenerateJob) queueSceneJobs(ctx context.Context, g *generate.Generator, } if task.required() { - sceneHash := scene.GetHash(task.fileNamingAlgorithm) addTask := false - if j.overwrite || !task.doesVideoPreviewExist(sceneHash) { + if j.overwrite || !task.doesVideoPreviewExist() { totals.previews++ addTask = true } - if utils.IsTrue(j.input.ImagePreviews) && (j.overwrite || !task.doesImagePreviewExist(sceneHash)) { + if utils.IsTrue(j.input.ImagePreviews) && (j.overwrite || !task.doesImagePreviewExist()) { totals.imagePreviews++ addTask = true } diff --git a/internal/manager/task_generate_preview.go b/internal/manager/task_generate_preview.go index 37ec51ec2..ca2b148b5 100644 --- a/internal/manager/task_generate_preview.go +++ b/internal/manager/task_generate_preview.go @@ -20,6 +20,9 @@ type GeneratePreviewTask struct { fileNamingAlgorithm models.HashAlgorithm generator *generate.Generator + + videoPreviewExists *bool + imagePreviewExists *bool } func (t *GeneratePreviewTask) GetDescription() string { @@ -31,22 +34,24 @@ func (t *GeneratePreviewTask) Start(ctx context.Context) { return } - ffprobe := instance.FFProbe - videoFile, err := ffprobe.NewVideoFile(t.Scene.Path) - if err != nil { - logger.Errorf("error reading video file: %v", err) - return - } - videoChecksum := t.Scene.GetHash(t.fileNamingAlgorithm) - if err := t.generateVideo(videoChecksum, videoFile.VideoStreamDuration); err != nil { - logger.Errorf("error generating preview: %v", err) - logErrorOutput(err) - return + if t.Overwrite || !t.doesVideoPreviewExist() { + ffprobe := instance.FFProbe + videoFile, err := ffprobe.NewVideoFile(t.Scene.Path) + if err != nil { + logger.Errorf("error reading video file: %v", err) + return + } + + if err := t.generateVideo(videoChecksum, videoFile.VideoStreamDuration); err != nil { + logger.Errorf("error generating preview: %v", err) + logErrorOutput(err) + return + } } - if t.ImagePreview { + if t.ImagePreview && (t.Overwrite || !t.doesImagePreviewExist()) { if err := t.generateWebp(videoChecksum); err != nil { logger.Errorf("error generating preview webp: %v", err) logErrorOutput(err) @@ -77,26 +82,39 @@ func (t GeneratePreviewTask) required() bool { return false } - sceneHash := t.Scene.GetHash(t.fileNamingAlgorithm) - videoExists := t.doesVideoPreviewExist(sceneHash) - imageExists := !t.ImagePreview || t.doesImagePreviewExist(sceneHash) + if t.Overwrite { + return true + } + + videoExists := t.doesVideoPreviewExist() + imageExists := !t.ImagePreview || t.doesImagePreviewExist() return !imageExists || !videoExists } -func (t *GeneratePreviewTask) doesVideoPreviewExist(sceneChecksum string) bool { +func (t *GeneratePreviewTask) doesVideoPreviewExist() bool { + sceneChecksum := t.Scene.GetHash(t.fileNamingAlgorithm) if sceneChecksum == "" { return false } - videoExists, _ := fsutil.FileExists(instance.Paths.Scene.GetVideoPreviewPath(sceneChecksum)) - return videoExists + if t.videoPreviewExists == nil { + videoExists, _ := fsutil.FileExists(instance.Paths.Scene.GetVideoPreviewPath(sceneChecksum)) + t.videoPreviewExists = &videoExists + } + + return *t.videoPreviewExists } -func (t *GeneratePreviewTask) doesImagePreviewExist(sceneChecksum string) bool { +func (t *GeneratePreviewTask) doesImagePreviewExist() bool { + sceneChecksum := t.Scene.GetHash(t.fileNamingAlgorithm) if sceneChecksum == "" { return false } - imageExists, _ := fsutil.FileExists(instance.Paths.Scene.GetWebpPreviewPath(sceneChecksum)) - return imageExists + if t.imagePreviewExists == nil { + imageExists, _ := fsutil.FileExists(instance.Paths.Scene.GetWebpPreviewPath(sceneChecksum)) + t.imagePreviewExists = &imageExists + } + + return *t.imagePreviewExists } diff --git a/ui/v2.5/src/docs/en/Changelog/v0190.md b/ui/v2.5/src/docs/en/Changelog/v0190.md index 8489697b1..2adbf142d 100644 --- a/ui/v2.5/src/docs/en/Changelog/v0190.md +++ b/ui/v2.5/src/docs/en/Changelog/v0190.md @@ -9,6 +9,7 @@ * Changed performer aliases to be a list, rather than a string field. ([#3113](https://github.com/stashapp/stash/pull/3113)) ### 🐛 Bug fixes +* Fixed scene previews not being overwritten when Overwrite option is selected. ([#3256](https://github.com/stashapp/stash/pull/3256)) * Fixed objects without titles not being sorted correctly with objects with titles. ([#3244](https://github.com/stashapp/stash/pull/3244)) * Fixed incorrect new Performer pill being removed when creating Performer from scrape dialog. ([#3251](https://github.com/stashapp/stash/pull/3251)) * Fixed date fields not being nulled correctly when cleared. ([#3243](https://github.com/stashapp/stash/pull/3243))