From 71a06350c579dedefdf4eec67c154228576e885f Mon Sep 17 00:00:00 2001 From: SuperMudkip <165224804+SuperMudkip@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:59:39 -0400 Subject: [PATCH 1/3] Added multiple images to Performer XPath Scraper --- pkg/scraper/mapped.go | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/pkg/scraper/mapped.go b/pkg/scraper/mapped.go index f8a096015..ae93084f5 100644 --- a/pkg/scraper/mapped.go +++ b/pkg/scraper/mapped.go @@ -11,9 +11,9 @@ import ( "strings" "time" + "github.com/robertkrimen/otto" "gopkg.in/yaml.v2" - "github.com/stashapp/stash/pkg/javascript" "github.com/stashapp/stash/pkg/logger" "github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/sliceutil" @@ -230,14 +230,17 @@ func (s *mappedGalleryScraperConfig) UnmarshalYAML(unmarshal func(interface{}) e type mappedPerformerScraperConfig struct { mappedConfig - - Tags mappedConfig `yaml:"Tags"` + Images mappedConfig `yaml:"Images"` + Tags mappedConfig `yaml:"Tags"` } type _mappedPerformerScraperConfig mappedPerformerScraperConfig const ( mappedScraperConfigPerformerTags = "Tags" ) +const ( + mappedScraperConfigPerformerImages = "Images" +) func (s *mappedPerformerScraperConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { // HACK - unmarshal to map first, then remove known scene sub-fields, then @@ -251,8 +254,10 @@ func (s *mappedPerformerScraperConfig) UnmarshalYAML(unmarshal func(interface{}) thisMap := make(map[string]interface{}) thisMap[mappedScraperConfigPerformerTags] = parentMap[mappedScraperConfigPerformerTags] + thisMap[mappedScraperConfigPerformerImages] = parentMap[mappedScraperConfigPerformerImages] delete(parentMap, mappedScraperConfigPerformerTags) + delete(parentMap, mappedScraperConfigPerformerImages) // re-unmarshal the sub-fields yml, err := yaml.Marshal(thisMap) @@ -528,19 +533,19 @@ func (p *postProcessLbToKg) Apply(ctx context.Context, value string, q mappedQue type postProcessJavascript string func (p *postProcessJavascript) Apply(ctx context.Context, value string, q mappedQuery) string { - vm := javascript.NewVM() + vm := otto.New() if err := vm.Set("value", value); err != nil { logger.Warnf("javascript failed to set value: %v", err) return value } - script, err := javascript.CompileScript("", "(function() { "+string(*p)+"})()") + script, err := vm.Compile("", "(function() { "+string(*p)+"})()") if err != nil { logger.Warnf("javascript failed to compile: %v", err) return value } - output, err := vm.RunProgram(script) + output, err := vm.Run(script) if err != nil { logger.Warnf("javascript failed to run: %v", err) return value @@ -819,6 +824,7 @@ func (s mappedScraper) scrapePerformer(ctx context.Context, q mappedQuery) (*mod } performerTagsMap := performerMap.Tags + performerImagesMap := performerMap.Images results := performerMap.process(ctx, q, s.Common) @@ -834,6 +840,13 @@ func (s mappedScraper) scrapePerformer(ctx context.Context, q mappedQuery) (*mod } } + if performerImagesMap != nil { + imageResults := performerImagesMap.process(ctx, q, s.Common) + for _, p := range imageResults { + ret.Images = append(ret.Images, p["URL"]) + } + } + if len(results) == 0 && len(ret.Tags) == 0 { return nil, nil } From f8fa6dbf0cf5ae6d26ab93c5a058f67e7f041cec Mon Sep 17 00:00:00 2001 From: SuperMudkip <165224804+SuperMudkip@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:05:22 -0400 Subject: [PATCH 2/3] Update mapped.go --- pkg/scraper/mapped.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/scraper/mapped.go b/pkg/scraper/mapped.go index ae93084f5..ae9c31498 100644 --- a/pkg/scraper/mapped.go +++ b/pkg/scraper/mapped.go @@ -11,9 +11,9 @@ import ( "strings" "time" - "github.com/robertkrimen/otto" "gopkg.in/yaml.v2" + "github.com/stashapp/stash/pkg/javascript" "github.com/stashapp/stash/pkg/logger" "github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/sliceutil" @@ -533,19 +533,19 @@ func (p *postProcessLbToKg) Apply(ctx context.Context, value string, q mappedQue type postProcessJavascript string func (p *postProcessJavascript) Apply(ctx context.Context, value string, q mappedQuery) string { - vm := otto.New() + vm := javascript.NewVM() if err := vm.Set("value", value); err != nil { logger.Warnf("javascript failed to set value: %v", err) return value } - script, err := vm.Compile("", "(function() { "+string(*p)+"})()") + script, err := javascript.CompileScript("", "(function() { "+string(*p)+"})()") if err != nil { logger.Warnf("javascript failed to compile: %v", err) return value } - output, err := vm.Run(script) + output, err := vm.RunProgram(script) if err != nil { logger.Warnf("javascript failed to run: %v", err) return value From dfac65fd5c8e75fcad93121a7f87b4c3eb317ef0 Mon Sep 17 00:00:00 2001 From: SuperMudkip Date: Tue, 24 Jun 2025 19:07:52 -0400 Subject: [PATCH 3/3] fix --- pkg/scraper/mapped.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/scraper/mapped.go b/pkg/scraper/mapped.go index aa1e10205..f2bfb23a7 100644 --- a/pkg/scraper/mapped.go +++ b/pkg/scraper/mapped.go @@ -977,9 +977,9 @@ func (s mappedScraper) scrapePerformer(ctx context.Context, q mappedQuery) (*mod } if performerImagesMap != nil { - imageResults := performerImagesMap.process(ctx, q, s.Common) + imageResults := performerImagesMap.process(ctx, q, s.Common, nil) for _, p := range imageResults { - ret.Images = append(ret.Images, p["URL"]) + ret.Images = append(ret.Images, p["URL"].(string)) } }