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

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