mirror of
https://github.com/stashapp/stash.git
synced 2025-12-07 17:02:38 +01:00
Rather than passing a pointer to a waitgroup into task.Start(..) functions, handle the waitgroup.Done() at the callsite. This makes waitgroup handling local to its definition rather than it being spread out over multiple files. Tasks now simply execute, and the policy of waiting on them is handled by the caller.
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package manager
|
|
|
|
import (
|
|
"github.com/stashapp/stash/pkg/ffmpeg"
|
|
"github.com/stashapp/stash/pkg/logger"
|
|
"github.com/stashapp/stash/pkg/models"
|
|
"github.com/stashapp/stash/pkg/utils"
|
|
)
|
|
|
|
type GenerateSpriteTask struct {
|
|
Scene models.Scene
|
|
Overwrite bool
|
|
fileNamingAlgorithm models.HashAlgorithm
|
|
}
|
|
|
|
func (t *GenerateSpriteTask) Start() {
|
|
if !t.Overwrite && !t.required() {
|
|
return
|
|
}
|
|
|
|
videoFile, err := ffmpeg.NewVideoFile(instance.FFProbePath, t.Scene.Path, false)
|
|
if err != nil {
|
|
logger.Errorf("error reading video file: %s", err.Error())
|
|
return
|
|
}
|
|
|
|
sceneHash := t.Scene.GetHash(t.fileNamingAlgorithm)
|
|
imagePath := instance.Paths.Scene.GetSpriteImageFilePath(sceneHash)
|
|
vttPath := instance.Paths.Scene.GetSpriteVttFilePath(sceneHash)
|
|
generator, err := NewSpriteGenerator(*videoFile, sceneHash, imagePath, vttPath, 9, 9)
|
|
|
|
if err != nil {
|
|
logger.Errorf("error creating sprite generator: %s", err.Error())
|
|
return
|
|
}
|
|
generator.Overwrite = t.Overwrite
|
|
|
|
if err := generator.Generate(); err != nil {
|
|
logger.Errorf("error generating sprite: %s", err.Error())
|
|
return
|
|
}
|
|
}
|
|
|
|
// required returns true if the sprite needs to be generated
|
|
func (t GenerateSpriteTask) required() bool {
|
|
sceneHash := t.Scene.GetHash(t.fileNamingAlgorithm)
|
|
return !t.doesSpriteExist(sceneHash)
|
|
}
|
|
|
|
func (t *GenerateSpriteTask) doesSpriteExist(sceneChecksum string) bool {
|
|
if sceneChecksum == "" {
|
|
return false
|
|
}
|
|
|
|
imageExists, _ := utils.FileExists(instance.Paths.Scene.GetSpriteImageFilePath(sceneChecksum))
|
|
vttExists, _ := utils.FileExists(instance.Paths.Scene.GetSpriteVttFilePath(sceneChecksum))
|
|
return imageExists && vttExists
|
|
}
|