mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 08:26:00 +01:00
324 lines
10 KiB
Go
324 lines
10 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/stashapp/stash/pkg/manager"
|
|
"github.com/stashapp/stash/pkg/manager/config"
|
|
"github.com/stashapp/stash/pkg/models"
|
|
"github.com/stashapp/stash/pkg/scraper"
|
|
"github.com/stashapp/stash/pkg/scraper/stashbox"
|
|
)
|
|
|
|
// deprecated
|
|
func (r *queryResolver) ScrapeFreeones(ctx context.Context, performer_name string) (*models.ScrapedPerformer, error) {
|
|
scrapedPerformer := models.ScrapedPerformerInput{
|
|
Name: &performer_name,
|
|
}
|
|
return manager.GetInstance().ScraperCache.ScrapePerformer(scraper.FreeonesScraperID, scrapedPerformer)
|
|
}
|
|
|
|
// deprecated
|
|
func (r *queryResolver) ScrapeFreeonesPerformerList(ctx context.Context, query string) ([]string, error) {
|
|
scrapedPerformers, err := manager.GetInstance().ScraperCache.ScrapePerformerList(scraper.FreeonesScraperID, query)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var ret []string
|
|
for _, v := range scrapedPerformers {
|
|
if v.Name != nil {
|
|
ret = append(ret, *v.Name)
|
|
}
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func (r *queryResolver) ListPerformerScrapers(ctx context.Context) ([]*models.Scraper, error) {
|
|
return manager.GetInstance().ScraperCache.ListPerformerScrapers(), nil
|
|
}
|
|
|
|
func (r *queryResolver) ListSceneScrapers(ctx context.Context) ([]*models.Scraper, error) {
|
|
return manager.GetInstance().ScraperCache.ListSceneScrapers(), nil
|
|
}
|
|
|
|
func (r *queryResolver) ListGalleryScrapers(ctx context.Context) ([]*models.Scraper, error) {
|
|
return manager.GetInstance().ScraperCache.ListGalleryScrapers(), nil
|
|
}
|
|
|
|
func (r *queryResolver) ListMovieScrapers(ctx context.Context) ([]*models.Scraper, error) {
|
|
return manager.GetInstance().ScraperCache.ListMovieScrapers(), nil
|
|
}
|
|
|
|
func (r *queryResolver) ScrapePerformerList(ctx context.Context, scraperID string, query string) ([]*models.ScrapedPerformer, error) {
|
|
if query == "" {
|
|
return nil, nil
|
|
}
|
|
|
|
return manager.GetInstance().ScraperCache.ScrapePerformerList(scraperID, query)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapePerformer(ctx context.Context, scraperID string, scrapedPerformer models.ScrapedPerformerInput) (*models.ScrapedPerformer, error) {
|
|
return manager.GetInstance().ScraperCache.ScrapePerformer(scraperID, scrapedPerformer)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapePerformerURL(ctx context.Context, url string) (*models.ScrapedPerformer, error) {
|
|
return manager.GetInstance().ScraperCache.ScrapePerformerURL(url)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeSceneQuery(ctx context.Context, scraperID string, query string) ([]*models.ScrapedScene, error) {
|
|
if query == "" {
|
|
return nil, nil
|
|
}
|
|
|
|
return manager.GetInstance().ScraperCache.ScrapeSceneQuery(scraperID, query)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeScene(ctx context.Context, scraperID string, scene models.SceneUpdateInput) (*models.ScrapedScene, error) {
|
|
id, err := strconv.Atoi(scene.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return manager.GetInstance().ScraperCache.ScrapeScene(scraperID, id)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeSceneURL(ctx context.Context, url string) (*models.ScrapedScene, error) {
|
|
return manager.GetInstance().ScraperCache.ScrapeSceneURL(url)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeGallery(ctx context.Context, scraperID string, gallery models.GalleryUpdateInput) (*models.ScrapedGallery, error) {
|
|
id, err := strconv.Atoi(gallery.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return manager.GetInstance().ScraperCache.ScrapeGallery(scraperID, id)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeGalleryURL(ctx context.Context, url string) (*models.ScrapedGallery, error) {
|
|
return manager.GetInstance().ScraperCache.ScrapeGalleryURL(url)
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeMovieURL(ctx context.Context, url string) (*models.ScrapedMovie, error) {
|
|
return manager.GetInstance().ScraperCache.ScrapeMovieURL(url)
|
|
}
|
|
|
|
func (r *queryResolver) QueryStashBoxScene(ctx context.Context, input models.StashBoxSceneQueryInput) ([]*models.ScrapedScene, error) {
|
|
boxes := config.GetInstance().GetStashBoxes()
|
|
|
|
if input.StashBoxIndex < 0 || input.StashBoxIndex >= len(boxes) {
|
|
return nil, fmt.Errorf("invalid stash_box_index %d", input.StashBoxIndex)
|
|
}
|
|
|
|
client := stashbox.NewClient(*boxes[input.StashBoxIndex], r.txnManager)
|
|
|
|
if len(input.SceneIds) > 0 {
|
|
return client.FindStashBoxScenesByFingerprintsFlat(input.SceneIds)
|
|
}
|
|
|
|
if input.Q != nil {
|
|
return client.QueryStashBoxScene(*input.Q)
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
func (r *queryResolver) QueryStashBoxPerformer(ctx context.Context, input models.StashBoxPerformerQueryInput) ([]*models.StashBoxPerformerQueryResult, error) {
|
|
boxes := config.GetInstance().GetStashBoxes()
|
|
|
|
if input.StashBoxIndex < 0 || input.StashBoxIndex >= len(boxes) {
|
|
return nil, fmt.Errorf("invalid stash_box_index %d", input.StashBoxIndex)
|
|
}
|
|
|
|
client := stashbox.NewClient(*boxes[input.StashBoxIndex], r.txnManager)
|
|
|
|
if len(input.PerformerIds) > 0 {
|
|
return client.FindStashBoxPerformersByNames(input.PerformerIds)
|
|
}
|
|
|
|
if input.Q != nil {
|
|
return client.QueryStashBoxPerformer(*input.Q)
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
func (r *queryResolver) getStashBoxClient(index int) (*stashbox.Client, error) {
|
|
boxes := config.GetInstance().GetStashBoxes()
|
|
|
|
if index < 0 || index >= len(boxes) {
|
|
return nil, fmt.Errorf("invalid stash_box_index %d", index)
|
|
}
|
|
|
|
return stashbox.NewClient(*boxes[index], r.txnManager), nil
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeSingleScene(ctx context.Context, source models.ScraperSourceInput, input models.ScrapeSingleSceneInput) ([]*models.ScrapedScene, error) {
|
|
if source.ScraperID != nil {
|
|
var singleScene *models.ScrapedScene
|
|
var err error
|
|
|
|
if input.SceneID != nil {
|
|
var sceneID int
|
|
sceneID, err = strconv.Atoi(*input.SceneID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
singleScene, err = manager.GetInstance().ScraperCache.ScrapeScene(*source.ScraperID, sceneID)
|
|
} else if input.SceneInput != nil {
|
|
singleScene, err = manager.GetInstance().ScraperCache.ScrapeSceneFragment(*source.ScraperID, *input.SceneInput)
|
|
} else if input.Query != nil {
|
|
return manager.GetInstance().ScraperCache.ScrapeSceneQuery(*source.ScraperID, *input.Query)
|
|
} else {
|
|
err = errors.New("scene_id, scene_input or query must be set")
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if singleScene != nil {
|
|
return []*models.ScrapedScene{singleScene}, nil
|
|
}
|
|
|
|
return nil, nil
|
|
} else if source.StashBoxIndex != nil {
|
|
client, err := r.getStashBoxClient(*source.StashBoxIndex)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if input.SceneID != nil {
|
|
return client.FindStashBoxScenesByFingerprintsFlat([]string{*input.SceneID})
|
|
} else if input.Query != nil {
|
|
return client.QueryStashBoxScene(*input.Query)
|
|
}
|
|
|
|
return nil, errors.New("scene_id or query must be set")
|
|
}
|
|
|
|
return nil, errors.New("scraper_id or stash_box_index must be set")
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeMultiScenes(ctx context.Context, source models.ScraperSourceInput, input models.ScrapeMultiScenesInput) ([][]*models.ScrapedScene, error) {
|
|
if source.ScraperID != nil {
|
|
return nil, errors.New("not implemented")
|
|
} else if source.StashBoxIndex != nil {
|
|
client, err := r.getStashBoxClient(*source.StashBoxIndex)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return client.FindStashBoxScenesByFingerprints(input.SceneIds)
|
|
}
|
|
|
|
return nil, errors.New("scraper_id or stash_box_index must be set")
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeSinglePerformer(ctx context.Context, source models.ScraperSourceInput, input models.ScrapeSinglePerformerInput) ([]*models.ScrapedPerformer, error) {
|
|
if source.ScraperID != nil {
|
|
if input.PerformerInput != nil {
|
|
singlePerformer, err := manager.GetInstance().ScraperCache.ScrapePerformer(*source.ScraperID, *input.PerformerInput)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if singlePerformer != nil {
|
|
return []*models.ScrapedPerformer{singlePerformer}, nil
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
if input.Query != nil {
|
|
return manager.GetInstance().ScraperCache.ScrapePerformerList(*source.ScraperID, *input.Query)
|
|
}
|
|
|
|
return nil, errors.New("not implemented")
|
|
} else if source.StashBoxIndex != nil {
|
|
client, err := r.getStashBoxClient(*source.StashBoxIndex)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var ret []*models.StashBoxPerformerQueryResult
|
|
if input.PerformerID != nil {
|
|
ret, err = client.FindStashBoxPerformersByNames([]string{*input.PerformerID})
|
|
} else if input.Query != nil {
|
|
ret, err = client.QueryStashBoxPerformer(*input.Query)
|
|
} else {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(ret) > 0 {
|
|
return ret[0].Results, nil
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
return nil, errors.New("scraper_id or stash_box_index must be set")
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeMultiPerformers(ctx context.Context, source models.ScraperSourceInput, input models.ScrapeMultiPerformersInput) ([][]*models.ScrapedPerformer, error) {
|
|
if source.ScraperID != nil {
|
|
return nil, errors.New("not implemented")
|
|
} else if source.StashBoxIndex != nil {
|
|
client, err := r.getStashBoxClient(*source.StashBoxIndex)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return client.FindStashBoxPerformersByPerformerNames(input.PerformerIds)
|
|
}
|
|
|
|
return nil, errors.New("scraper_id or stash_box_index must be set")
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeSingleGallery(ctx context.Context, source models.ScraperSourceInput, input models.ScrapeSingleGalleryInput) ([]*models.ScrapedGallery, error) {
|
|
if source.ScraperID != nil {
|
|
var singleGallery *models.ScrapedGallery
|
|
var err error
|
|
|
|
if input.GalleryID != nil {
|
|
var galleryID int
|
|
galleryID, err = strconv.Atoi(*input.GalleryID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
singleGallery, err = manager.GetInstance().ScraperCache.ScrapeGallery(*source.ScraperID, galleryID)
|
|
} else if input.GalleryInput != nil {
|
|
singleGallery, err = manager.GetInstance().ScraperCache.ScrapeGalleryFragment(*source.ScraperID, *input.GalleryInput)
|
|
} else {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if singleGallery != nil {
|
|
return []*models.ScrapedGallery{singleGallery}, nil
|
|
}
|
|
|
|
return nil, nil
|
|
} else if source.StashBoxIndex != nil {
|
|
return nil, errors.New("not supported")
|
|
}
|
|
|
|
return nil, errors.New("scraper_id must be set")
|
|
}
|
|
|
|
func (r *queryResolver) ScrapeSingleMovie(ctx context.Context, source models.ScraperSourceInput, input models.ScrapeSingleMovieInput) ([]*models.ScrapedMovie, error) {
|
|
return nil, errors.New("not supported")
|
|
}
|