stash/pkg/gallery/chapter_import.go

82 lines
1.8 KiB
Go

package gallery
import (
"context"
"fmt"
"github.com/stashapp/stash/pkg/models"
"github.com/stashapp/stash/pkg/models/jsonschema"
)
type ChapterImporterReaderWriter interface {
models.GalleryChapterCreatorUpdater
FindByGalleryID(ctx context.Context, galleryID int) ([]*models.GalleryChapter, error)
}
type ChapterImporter struct {
GalleryID int
ReaderWriter ChapterImporterReaderWriter
Input jsonschema.GalleryChapter
MissingRefBehaviour models.ImportMissingRefEnum
chapter models.GalleryChapter
}
func (i *ChapterImporter) PreImport(ctx context.Context) error {
i.chapter = models.GalleryChapter{
Title: i.Input.Title,
ImageIndex: i.Input.ImageIndex,
GalleryID: i.GalleryID,
CreatedAt: i.Input.CreatedAt.GetTime(),
UpdatedAt: i.Input.UpdatedAt.GetTime(),
}
return nil
}
func (i *ChapterImporter) Name() string {
return fmt.Sprintf("%s (%d)", i.Input.Title, i.Input.ImageIndex)
}
func (i *ChapterImporter) PostImport(ctx context.Context, id int) error {
return nil
}
func (i *ChapterImporter) FindExistingID(ctx context.Context) (*int, error) {
existingChapters, err := i.ReaderWriter.FindByGalleryID(ctx, i.GalleryID)
if err != nil {
return nil, err
}
for _, m := range existingChapters {
if m.ImageIndex == i.chapter.ImageIndex {
id := m.ID
return &id, nil
}
}
return nil, nil
}
func (i *ChapterImporter) Create(ctx context.Context) (*int, error) {
err := i.ReaderWriter.Create(ctx, &i.chapter)
if err != nil {
return nil, fmt.Errorf("error creating chapter: %v", err)
}
id := i.chapter.ID
return &id, nil
}
func (i *ChapterImporter) Update(ctx context.Context, id int) error {
chapter := i.chapter
chapter.ID = id
err := i.ReaderWriter.Update(ctx, &chapter)
if err != nil {
return fmt.Errorf("error updating existing chapter: %v", err)
}
return nil
}