mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 16:34:02 +01:00
Update gallery when adding image via scan (#3802)
This commit is contained in:
parent
e22291d912
commit
0c999080c2
1 changed files with 36 additions and 13 deletions
|
|
@ -36,6 +36,7 @@ type GalleryFinderCreator interface {
|
||||||
FindByFileID(ctx context.Context, fileID file.ID) ([]*models.Gallery, error)
|
FindByFileID(ctx context.Context, fileID file.ID) ([]*models.Gallery, error)
|
||||||
FindByFolderID(ctx context.Context, folderID file.FolderID) ([]*models.Gallery, error)
|
FindByFolderID(ctx context.Context, folderID file.FolderID) ([]*models.Gallery, error)
|
||||||
Create(ctx context.Context, newObject *models.Gallery, fileIDs []file.ID) error
|
Create(ctx context.Context, newObject *models.Gallery, fileIDs []file.ID) error
|
||||||
|
UpdatePartial(ctx context.Context, id int, updatedGallery models.GalleryPartial) (*models.Gallery, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type ScanConfig interface {
|
type ScanConfig interface {
|
||||||
|
|
@ -117,10 +118,16 @@ func (h *ScanHandler) Handle(ctx context.Context, f file.File, oldFile file.File
|
||||||
|
|
||||||
logger.Infof("%s doesn't exist. Creating new image...", f.Base().Path)
|
logger.Infof("%s doesn't exist. Creating new image...", f.Base().Path)
|
||||||
|
|
||||||
if _, err := h.associateGallery(ctx, newImage, imageFile); err != nil {
|
g, err := h.getGalleryToAssociate(ctx, newImage, f)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if g != nil {
|
||||||
|
newImage.GalleryIDs.Add(g.ID)
|
||||||
|
logger.Infof("Adding %s to gallery %s", f.Base().Path, g.Path)
|
||||||
|
}
|
||||||
|
|
||||||
if err := h.CreatorUpdater.Create(ctx, &models.ImageCreateInput{
|
if err := h.CreatorUpdater.Create(ctx, &models.ImageCreateInput{
|
||||||
Image: newImage,
|
Image: newImage,
|
||||||
FileIDs: []file.ID{imageFile.ID},
|
FileIDs: []file.ID{imageFile.ID},
|
||||||
|
|
@ -128,6 +135,15 @@ func (h *ScanHandler) Handle(ctx context.Context, f file.File, oldFile file.File
|
||||||
return fmt.Errorf("creating new image: %w", err)
|
return fmt.Errorf("creating new image: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update the gallery updated at timestamp if applicable
|
||||||
|
if g != nil {
|
||||||
|
if _, err := h.GalleryFinder.UpdatePartial(ctx, g.ID, models.GalleryPartial{
|
||||||
|
UpdatedAt: models.NewOptionalTime(time.Now()),
|
||||||
|
}); err != nil {
|
||||||
|
return fmt.Errorf("updating gallery updated at timestamp: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
h.PluginCache.RegisterPostHooks(ctx, newImage.ID, plugin.ImageCreatePost, nil, nil)
|
h.PluginCache.RegisterPostHooks(ctx, newImage.ID, plugin.ImageCreatePost, nil, nil)
|
||||||
|
|
||||||
existing = []*models.Image{newImage}
|
existing = []*models.Image{newImage}
|
||||||
|
|
@ -172,16 +188,18 @@ func (h *ScanHandler) associateExisting(ctx context.Context, existing []*models.
|
||||||
}
|
}
|
||||||
|
|
||||||
// associate with gallery if applicable
|
// associate with gallery if applicable
|
||||||
changed, err := h.associateGallery(ctx, i, f)
|
g, err := h.getGalleryToAssociate(ctx, i, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var galleryIDs *models.UpdateIDs
|
var galleryIDs *models.UpdateIDs
|
||||||
if changed {
|
changed := false
|
||||||
|
if g != nil {
|
||||||
|
changed = true
|
||||||
galleryIDs = &models.UpdateIDs{
|
galleryIDs = &models.UpdateIDs{
|
||||||
IDs: i.GalleryIDs.List(),
|
IDs: []int{g.ID},
|
||||||
Mode: models.RelationshipUpdateModeSet,
|
Mode: models.RelationshipUpdateModeAdd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -203,6 +221,14 @@ func (h *ScanHandler) associateExisting(ctx context.Context, existing []*models.
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return fmt.Errorf("updating image: %w", err)
|
return fmt.Errorf("updating image: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if g != nil {
|
||||||
|
if _, err := h.GalleryFinder.UpdatePartial(ctx, g.ID, models.GalleryPartial{
|
||||||
|
UpdatedAt: models.NewOptionalTime(time.Now()),
|
||||||
|
}); err != nil {
|
||||||
|
return fmt.Errorf("updating gallery updated at timestamp: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if changed || updateExisting {
|
if changed || updateExisting {
|
||||||
|
|
@ -331,22 +357,19 @@ func (h *ScanHandler) getOrCreateGallery(ctx context.Context, f file.File) (*mod
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ScanHandler) associateGallery(ctx context.Context, newImage *models.Image, f file.File) (bool, error) {
|
func (h *ScanHandler) getGalleryToAssociate(ctx context.Context, newImage *models.Image, f file.File) (*models.Gallery, error) {
|
||||||
g, err := h.getOrCreateGallery(ctx, f)
|
g, err := h.getOrCreateGallery(ctx, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := newImage.LoadGalleryIDs(ctx, h.CreatorUpdater); err != nil {
|
if err := newImage.LoadGalleryIDs(ctx, h.CreatorUpdater); err != nil {
|
||||||
return false, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ret := false
|
|
||||||
if g != nil && !intslice.IntInclude(newImage.GalleryIDs.List(), g.ID) {
|
if g != nil && !intslice.IntInclude(newImage.GalleryIDs.List(), g.ID) {
|
||||||
ret = true
|
return g, nil
|
||||||
newImage.GalleryIDs.Add(g.ID)
|
|
||||||
logger.Infof("Adding %s to gallery %s", f.Base().Path, g.Path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue