mirror of https://github.com/stashapp/stash.git
92 lines
2.1 KiB
Go
92 lines
2.1 KiB
Go
package identify
|
|
|
|
import (
|
|
"context"
|
|
"strconv"
|
|
|
|
"github.com/stashapp/stash/pkg/logger"
|
|
"github.com/stashapp/stash/pkg/models"
|
|
"github.com/stashapp/stash/pkg/studio"
|
|
)
|
|
|
|
func createMissingStudio(ctx context.Context, endpoint string, w models.StudioReaderWriter, s *models.ScrapedStudio) (*int, error) {
|
|
var err error
|
|
|
|
if s.Parent != nil {
|
|
if s.Parent.StoredID == nil {
|
|
// The parent needs to be created
|
|
newParentStudio := s.Parent.ToStudio(endpoint, nil)
|
|
parentImage, err := s.Parent.GetImage(ctx, nil)
|
|
if err != nil {
|
|
logger.Errorf("Failed to make parent studio from scraped studio %s: %s", s.Parent.Name, err.Error())
|
|
return nil, err
|
|
}
|
|
|
|
// Create the studio
|
|
err = w.Create(ctx, newParentStudio)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Update image table
|
|
if len(parentImage) > 0 {
|
|
if err := w.UpdateImage(ctx, newParentStudio.ID, parentImage); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
storedId := strconv.Itoa(newParentStudio.ID)
|
|
s.Parent.StoredID = &storedId
|
|
} else {
|
|
// The parent studio matched an existing one and the user has chosen in the UI to link and/or update it
|
|
storedID, _ := strconv.Atoi(*s.Parent.StoredID)
|
|
|
|
existingStashIDs, err := w.GetStashIDs(ctx, storedID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
studioPartial := s.Parent.ToPartial(*s.Parent.StoredID, endpoint, nil, existingStashIDs)
|
|
parentImage, err := s.Parent.GetImage(ctx, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := studio.ValidateModify(ctx, studioPartial, w); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, err = w.UpdatePartial(ctx, studioPartial)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(parentImage) > 0 {
|
|
if err := w.UpdateImage(ctx, studioPartial.ID, parentImage); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
newStudio := s.ToStudio(endpoint, nil)
|
|
studioImage, err := s.GetImage(ctx, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = w.Create(ctx, newStudio)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Update image table
|
|
if len(studioImage) > 0 {
|
|
if err := w.UpdateImage(ctx, newStudio.ID, studioImage); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return &newStudio.ID, nil
|
|
}
|