fix(naming): strip unsubstituted Sonarr tokens ({TvdbId}/{imdb-}) from titles

These tokens survived the provider-tag regex ([\w]+ doesn't match braces),
polluting parsed titles (e.g. 'A Girl & Her Guard Dog [tvdb-{TvdbId}]') so
they could not score-match. Broaden the regex to drop {...} and empty tokens.
This commit is contained in:
Silo Server Developer
2026-05-28 17:45:38 +02:00
parent 7ce164fba9
commit e074925327
2 changed files with 29 additions and 1 deletions
+25
View File
@@ -0,0 +1,25 @@
package naming
import "testing"
func TestStripInferProviderTags_HandlesBrokenSonarrTokens(t *testing.T) {
cases := []struct {
in string
want string
}{
{"A Girl & Her Guard Dog [tvdb-{TvdbId}]", "A Girl & Her Guard Dog"},
{"A Raven in the Harem [tvdb-{TvdbId}]", "A Raven in the Harem"},
{"A Salad Bowl of Eccentrics {imdb-}", "A Salad Bowl of Eccentrics"},
{"Coronation Street {imdb-}", "Coronation Street"},
// well-formed tags must still be stripped:
{"Some Show [tvdb-81189]", "Some Show"},
{"Some Show {tmdb-27205}", "Some Show"},
// no tag: unchanged:
{"Cowboy Bebop", "Cowboy Bebop"},
}
for _, c := range cases {
if got := stripInferProviderTags(c.in); got != c.want {
t.Errorf("stripInferProviderTags(%q) = %q, want %q", c.in, got, c.want)
}
}
}
+4 -1
View File
@@ -18,7 +18,10 @@ var (
inferSeasonDirRe = regexp.MustCompile(`(?i)^Season\s+(\d{1,4})(?:\s.*)?$`)
inferNumericSeasonRe = regexp.MustCompile(`^\d{1,4}$`)
inferSpecialsDirRe = regexp.MustCompile(`(?i)^(?:specials?|extras?)$`)
inferProviderTagRe = regexp.MustCompile(`\s*[{\[](?:tmdb|tmdbid|imdb|imdbid|tvdb|tvdbid)-[\w]+[}\]]`)
// Matches a well-formed tag ([tvdb-81189]), an unsubstituted Sonarr token
// ([tvdb-{TvdbId}]), or an empty token ({imdb-}). The id part is either a
// {...} placeholder or zero-or-more word chars.
inferProviderTagRe = regexp.MustCompile(`\s*[{\[](?:tmdb|tmdbid|imdb|imdbid|tvdb|tvdbid)-(?:\{[^}]*\}|[\w]*)[}\]]`)
)
type RootAssignment struct {