mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
Fix handling of files to delete during delete Gallery operation (#5213)
* Only remove file in zip from image if deleting from zip file * Only remove file in folder from image if deleting from folder
This commit is contained in:
@@ -997,6 +997,21 @@ func (qb *ImageStore) AddFileID(ctx context.Context, id int, fileID models.FileI
|
||||
return imagesFilesTableMgr.insertJoins(ctx, id, firstPrimary, []models.FileID{fileID})
|
||||
}
|
||||
|
||||
// RemoveFileID removes the file ID from the image.
|
||||
// If the file ID is the primary file, then the next file in the list is set as the primary file.
|
||||
func (qb *ImageStore) RemoveFileID(ctx context.Context, id int, fileID models.FileID) error {
|
||||
fileIDs, err := imagesFilesTableMgr.get(ctx, id)
|
||||
if err != nil {
|
||||
return fmt.Errorf("getting file IDs for image %d: %w", id, err)
|
||||
}
|
||||
|
||||
fileIDs = sliceutil.Filter(fileIDs, func(f models.FileID) bool {
|
||||
return f != fileID
|
||||
})
|
||||
|
||||
return imagesFilesTableMgr.replaceJoins(ctx, id, fileIDs)
|
||||
}
|
||||
|
||||
func (qb *ImageStore) GetGalleryIDs(ctx context.Context, imageID int) ([]int, error) {
|
||||
return imageRepository.galleries.getIDs(ctx, imageID)
|
||||
}
|
||||
|
||||
@@ -759,6 +759,29 @@ type relatedFilesTable struct {
|
||||
// FileID models.FileID `db:"file_id"`
|
||||
// }
|
||||
|
||||
// get returns the file IDs related to the provided scene ID
|
||||
// the primary file is returned first
|
||||
func (t *relatedFilesTable) get(ctx context.Context, id int) ([]models.FileID, error) {
|
||||
q := dialect.Select("file_id").From(t.table.table).Where(t.idColumn.Eq(id)).Order(t.table.table.Col("primary").Desc())
|
||||
|
||||
const single = false
|
||||
var ret []models.FileID
|
||||
if err := queryFunc(ctx, q, single, func(rows *sqlx.Rows) error {
|
||||
var v models.FileID
|
||||
if err := rows.Scan(&v); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ret = append(ret, v)
|
||||
|
||||
return nil
|
||||
}); err != nil {
|
||||
return nil, fmt.Errorf("getting related files from %s: %w", t.table.table.GetTable(), err)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (t *relatedFilesTable) insertJoin(ctx context.Context, id int, primary bool, fileID models.FileID) error {
|
||||
q := dialect.Insert(t.table.table).Cols(t.idColumn.GetCol(), "primary", "file_id").Vals(
|
||||
goqu.Vals{id, primary, fileID},
|
||||
|
||||
Reference in New Issue
Block a user