Fix generate preview overwrite behaviour (#3256)

This commit is contained in:
WithoutPants
2022-12-09 12:46:25 +11:00
committed by GitHub
parent a67eee8f4c
commit ce080c1b07
3 changed files with 42 additions and 24 deletions

View File

@@ -296,14 +296,13 @@ func (j *GenerateJob) queueSceneJobs(ctx context.Context, g *generate.Generator,
} }
if task.required() { if task.required() {
sceneHash := scene.GetHash(task.fileNamingAlgorithm)
addTask := false addTask := false
if j.overwrite || !task.doesVideoPreviewExist(sceneHash) { if j.overwrite || !task.doesVideoPreviewExist() {
totals.previews++ totals.previews++
addTask = true 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++ totals.imagePreviews++
addTask = true addTask = true
} }

View File

@@ -20,6 +20,9 @@ type GeneratePreviewTask struct {
fileNamingAlgorithm models.HashAlgorithm fileNamingAlgorithm models.HashAlgorithm
generator *generate.Generator generator *generate.Generator
videoPreviewExists *bool
imagePreviewExists *bool
} }
func (t *GeneratePreviewTask) GetDescription() string { func (t *GeneratePreviewTask) GetDescription() string {
@@ -31,6 +34,9 @@ func (t *GeneratePreviewTask) Start(ctx context.Context) {
return return
} }
videoChecksum := t.Scene.GetHash(t.fileNamingAlgorithm)
if t.Overwrite || !t.doesVideoPreviewExist() {
ffprobe := instance.FFProbe ffprobe := instance.FFProbe
videoFile, err := ffprobe.NewVideoFile(t.Scene.Path) videoFile, err := ffprobe.NewVideoFile(t.Scene.Path)
if err != nil { if err != nil {
@@ -38,15 +44,14 @@ func (t *GeneratePreviewTask) Start(ctx context.Context) {
return return
} }
videoChecksum := t.Scene.GetHash(t.fileNamingAlgorithm)
if err := t.generateVideo(videoChecksum, videoFile.VideoStreamDuration); err != nil { if err := t.generateVideo(videoChecksum, videoFile.VideoStreamDuration); err != nil {
logger.Errorf("error generating preview: %v", err) logger.Errorf("error generating preview: %v", err)
logErrorOutput(err) logErrorOutput(err)
return return
} }
}
if t.ImagePreview { if t.ImagePreview && (t.Overwrite || !t.doesImagePreviewExist()) {
if err := t.generateWebp(videoChecksum); err != nil { if err := t.generateWebp(videoChecksum); err != nil {
logger.Errorf("error generating preview webp: %v", err) logger.Errorf("error generating preview webp: %v", err)
logErrorOutput(err) logErrorOutput(err)
@@ -77,26 +82,39 @@ func (t GeneratePreviewTask) required() bool {
return false return false
} }
sceneHash := t.Scene.GetHash(t.fileNamingAlgorithm) if t.Overwrite {
videoExists := t.doesVideoPreviewExist(sceneHash) return true
imageExists := !t.ImagePreview || t.doesImagePreviewExist(sceneHash) }
videoExists := t.doesVideoPreviewExist()
imageExists := !t.ImagePreview || t.doesImagePreviewExist()
return !imageExists || !videoExists return !imageExists || !videoExists
} }
func (t *GeneratePreviewTask) doesVideoPreviewExist(sceneChecksum string) bool { func (t *GeneratePreviewTask) doesVideoPreviewExist() bool {
sceneChecksum := t.Scene.GetHash(t.fileNamingAlgorithm)
if sceneChecksum == "" { if sceneChecksum == "" {
return false return false
} }
if t.videoPreviewExists == nil {
videoExists, _ := fsutil.FileExists(instance.Paths.Scene.GetVideoPreviewPath(sceneChecksum)) videoExists, _ := fsutil.FileExists(instance.Paths.Scene.GetVideoPreviewPath(sceneChecksum))
return videoExists 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 == "" { if sceneChecksum == "" {
return false return false
} }
if t.imagePreviewExists == nil {
imageExists, _ := fsutil.FileExists(instance.Paths.Scene.GetWebpPreviewPath(sceneChecksum)) imageExists, _ := fsutil.FileExists(instance.Paths.Scene.GetWebpPreviewPath(sceneChecksum))
return imageExists t.imagePreviewExists = &imageExists
}
return *t.imagePreviewExists
} }

View File

@@ -9,6 +9,7 @@
* Changed performer aliases to be a list, rather than a string field. ([#3113](https://github.com/stashapp/stash/pull/3113)) * Changed performer aliases to be a list, rather than a string field. ([#3113](https://github.com/stashapp/stash/pull/3113))
### 🐛 Bug fixes ### 🐛 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 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 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)) * Fixed date fields not being nulled correctly when cleared. ([#3243](https://github.com/stashapp/stash/pull/3243))