mirror of
https://github.com/stashapp/stash.git
synced 2025-12-16 20:07:05 +03:00
Fix merge not deleting deleted scene generated files (#4567)
This commit is contained in:
@@ -560,9 +560,16 @@ func (r *mutationResolver) SceneMerge(ctx context.Context, input SceneMergeInput
|
|||||||
values = &v
|
values = &v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mgr := manager.GetInstance()
|
||||||
|
fileDeleter := &scene.FileDeleter{
|
||||||
|
Deleter: file.NewDeleter(),
|
||||||
|
FileNamingAlgo: mgr.Config.GetVideoFileNamingAlgorithm(),
|
||||||
|
Paths: mgr.Paths,
|
||||||
|
}
|
||||||
|
|
||||||
var ret *models.Scene
|
var ret *models.Scene
|
||||||
if err := r.withTxn(ctx, func(ctx context.Context) error {
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
type SceneService interface {
|
type SceneService interface {
|
||||||
Create(ctx context.Context, input *models.Scene, fileIDs []models.FileID, coverImage []byte) (*models.Scene, error)
|
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
|
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
|
Destroy(ctx context.Context, scene *models.Scene, fileDeleter *scene.FileDeleter, deleteGenerated, deleteFile bool) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,13 @@ import (
|
|||||||
"github.com/stashapp/stash/pkg/txn"
|
"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
|
// ensure source ids are unique
|
||||||
sourceIDs = sliceutil.AppendUniques(nil, sourceIDs)
|
sourceIDs = sliceutil.AppendUniques(nil, sourceIDs)
|
||||||
|
|
||||||
@@ -36,8 +42,6 @@ func (s *Service) Merge(ctx context.Context, sourceIDs []int, destinationID int,
|
|||||||
var fileIDs []models.FileID
|
var fileIDs []models.FileID
|
||||||
|
|
||||||
for _, src := range sources {
|
for _, src := range sources {
|
||||||
// TODO - delete generated files as needed
|
|
||||||
|
|
||||||
if err := src.LoadRelationships(ctx, s.Repository); err != nil {
|
if err := src.LoadRelationships(ctx, s.Repository); err != nil {
|
||||||
return fmt.Errorf("loading scene relationships from %d: %w", src.ID, err)
|
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
|
// delete old scenes
|
||||||
for _, srcID := range sourceIDs {
|
for _, src := range sources {
|
||||||
if err := s.Repository.Destroy(ctx, srcID); err != nil {
|
const deleteGenerated = true
|
||||||
return fmt.Errorf("deleting scene %d: %w", srcID, err)
|
const deleteFile = false
|
||||||
|
if err := s.Destroy(ctx, src, fileDeleter, deleteGenerated, deleteFile); err != nil {
|
||||||
|
return fmt.Errorf("deleting scene %d: %w", src.ID, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user