2021-11-29 03:08:32 +00:00
|
|
|
package image
|
|
|
|
|
|
|
|
import (
|
2022-05-19 07:49:32 +00:00
|
|
|
"context"
|
|
|
|
|
2021-11-29 03:08:32 +00:00
|
|
|
"github.com/stashapp/stash/pkg/file"
|
2022-03-17 00:33:59 +00:00
|
|
|
"github.com/stashapp/stash/pkg/fsutil"
|
2021-11-29 03:08:32 +00:00
|
|
|
"github.com/stashapp/stash/pkg/models"
|
2022-03-17 00:33:59 +00:00
|
|
|
"github.com/stashapp/stash/pkg/models/paths"
|
2021-11-29 03:08:32 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Destroyer interface {
|
2022-05-19 07:49:32 +00:00
|
|
|
Destroy(ctx context.Context, id int) error
|
2021-11-29 03:08:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// FileDeleter is an extension of file.Deleter that handles deletion of image files.
|
|
|
|
type FileDeleter struct {
|
|
|
|
file.Deleter
|
|
|
|
|
|
|
|
Paths *paths.Paths
|
|
|
|
}
|
|
|
|
|
|
|
|
// MarkGeneratedFiles marks for deletion the generated files for the provided image.
|
|
|
|
func (d *FileDeleter) MarkGeneratedFiles(image *models.Image) error {
|
|
|
|
thumbPath := d.Paths.Generated.GetThumbnailPath(image.Checksum, models.DefaultGthumbWidth)
|
2022-03-17 00:33:59 +00:00
|
|
|
exists, _ := fsutil.FileExists(thumbPath)
|
2021-11-29 03:08:32 +00:00
|
|
|
if exists {
|
|
|
|
return d.Files([]string{thumbPath})
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Destroy destroys an image, optionally marking the file and generated files for deletion.
|
2022-05-19 07:49:32 +00:00
|
|
|
func Destroy(ctx context.Context, i *models.Image, destroyer Destroyer, fileDeleter *FileDeleter, deleteGenerated, deleteFile bool) error {
|
2021-11-29 03:08:32 +00:00
|
|
|
// don't try to delete if the image is in a zip file
|
|
|
|
if deleteFile && !file.IsZipPath(i.Path) {
|
|
|
|
if err := fileDeleter.Files([]string{i.Path}); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if deleteGenerated {
|
|
|
|
if err := fileDeleter.MarkGeneratedFiles(i); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-05-19 07:49:32 +00:00
|
|
|
return destroyer.Destroy(ctx, i.ID)
|
2021-11-29 03:08:32 +00:00
|
|
|
}
|