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
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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() {
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
}

View file

@ -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
}

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))
### 🐛 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))