diff --git a/pkg/scraper/stashbox/stash_box.go b/pkg/scraper/stashbox/stash_box.go index a793e1b08..c833d3d0c 100644 --- a/pkg/scraper/stashbox/stash_box.go +++ b/pkg/scraper/stashbox/stash_box.go @@ -676,6 +676,9 @@ func performerFragmentToScrapedPerformer(p graphql.PerformerFragment) *models.Sc return !strings.EqualFold(s, p.Name) }) + // #4596 - stash-box may return duplicate aliases. Filter these out + p.Aliases = stringslice.UniqueFold(p.Aliases) + alias := strings.Join(p.Aliases, ", ") sp.Aliases = &alias } diff --git a/pkg/sliceutil/stringslice/string_collections.go b/pkg/sliceutil/stringslice/string_collections.go index 051fe1d9e..e4b9ca6a9 100644 --- a/pkg/sliceutil/stringslice/string_collections.go +++ b/pkg/sliceutil/stringslice/string_collections.go @@ -29,3 +29,18 @@ func FromString(s string, sep string) []string { } return v } + +// Unique returns a slice containing only unique values from the provided slice. +// The comparison is case-insensitive. +func UniqueFold(s []string) []string { + seen := make(map[string]struct{}) + var ret []string + for _, v := range s { + if _, exists := seen[strings.ToLower(v)]; exists { + continue + } + seen[strings.ToLower(v)] = struct{}{} + ret = append(ret, v) + } + return ret +}