diff --git a/internal/api/resolver_mutation_scene.go b/internal/api/resolver_mutation_scene.go index 67f72262b..b04d8dd90 100644 --- a/internal/api/resolver_mutation_scene.go +++ b/internal/api/resolver_mutation_scene.go @@ -560,9 +560,16 @@ func (r *mutationResolver) SceneMerge(ctx context.Context, input SceneMergeInput values = &v } + mgr := manager.GetInstance() + fileDeleter := &scene.FileDeleter{ + Deleter: file.NewDeleter(), + FileNamingAlgo: mgr.Config.GetVideoFileNamingAlgorithm(), + Paths: mgr.Paths, + } + var ret *models.Scene if err := r.withTxn(ctx, func(ctx context.Context) error { - if err := r.Resolver.sceneService.Merge(ctx, srcIDs, destID, *values); err != nil { + if err := r.Resolver.sceneService.Merge(ctx, srcIDs, destID, *values, fileDeleter); err != nil { return err } diff --git a/internal/manager/repository.go b/internal/manager/repository.go index fa0c865c6..4cec8b8fb 100644 --- a/internal/manager/repository.go +++ b/internal/manager/repository.go @@ -11,7 +11,7 @@ import ( type SceneService interface { Create(ctx context.Context, input *models.Scene, fileIDs []models.FileID, coverImage []byte) (*models.Scene, error) AssignFile(ctx context.Context, sceneID int, fileID models.FileID) error - Merge(ctx context.Context, sourceIDs []int, destinationID int, values models.ScenePartial) error + Merge(ctx context.Context, sourceIDs []int, destinationID int, values models.ScenePartial, fileDeleter *scene.FileDeleter) error Destroy(ctx context.Context, scene *models.Scene, fileDeleter *scene.FileDeleter, deleteGenerated, deleteFile bool) error } diff --git a/pkg/scene/merge.go b/pkg/scene/merge.go index 8b6c9f515..4299331d1 100644 --- a/pkg/scene/merge.go +++ b/pkg/scene/merge.go @@ -14,7 +14,13 @@ import ( "github.com/stashapp/stash/pkg/txn" ) -func (s *Service) Merge(ctx context.Context, sourceIDs []int, destinationID int, scenePartial models.ScenePartial) error { +func (s *Service) Merge( + ctx context.Context, + sourceIDs []int, + destinationID int, + scenePartial models.ScenePartial, + fileDeleter *FileDeleter, +) error { // ensure source ids are unique sourceIDs = sliceutil.AppendUniques(nil, sourceIDs) @@ -36,8 +42,6 @@ func (s *Service) Merge(ctx context.Context, sourceIDs []int, destinationID int, var fileIDs []models.FileID for _, src := range sources { - // TODO - delete generated files as needed - if err := src.LoadRelationships(ctx, s.Repository); err != nil { return fmt.Errorf("loading scene relationships from %d: %w", src.ID, err) } @@ -71,9 +75,11 @@ func (s *Service) Merge(ctx context.Context, sourceIDs []int, destinationID int, } // delete old scenes - for _, srcID := range sourceIDs { - if err := s.Repository.Destroy(ctx, srcID); err != nil { - return fmt.Errorf("deleting scene %d: %w", srcID, err) + for _, src := range sources { + const deleteGenerated = true + const deleteFile = false + if err := s.Destroy(ctx, src, fileDeleter, deleteGenerated, deleteFile); err != nil { + return fmt.Errorf("deleting scene %d: %w", src.ID, err) } }