fix(scanner): preserve parentheses in lyrics when processing alias tags (#4985)

Signed-off-by: Deluan <deluan@navidrome.org>
This commit is contained in:
Deluan Quintão
2026-02-06 16:21:35 -05:00
committed by GitHub
parent 01c839d9be
commit b4e03673ba
2 changed files with 21 additions and 1 deletions
+9 -1
View File
@@ -250,7 +250,15 @@ func processPairMapping(name model.TagName, mapping model.TagConf, lowered model
id3Base := parseID3Pairs(name, lowered) id3Base := parseID3Pairs(name, lowered)
if len(aliasValues) > 0 { if len(aliasValues) > 0 {
id3Base = append(id3Base, parseVorbisPairs(aliasValues)...) // For lyrics, don't use parseVorbisPairs as parentheses in lyrics content
// should not be interpreted as language keys (e.g. "(intro)" is not a language)
if name == model.TagLyrics {
for _, v := range aliasValues {
id3Base = append(id3Base, NewPair("xxx", v))
}
} else {
id3Base = append(id3Base, parseVorbisPairs(aliasValues)...)
}
} }
return id3Base return id3Base
} }
+12
View File
@@ -246,6 +246,18 @@ var _ = Describe("Metadata", func() {
metadata.NewPair("eng", "Lyrics"), metadata.NewPair("eng", "Lyrics"),
)) ))
}) })
It("should preserve lyrics starting with parentheses from alias tags", func() {
props.Tags = model.RawTags{
"LYRICS": {"(line one)\nline two\nline three"},
}
md = metadata.New(filePath, props)
Expect(md.All()).To(HaveKey(model.TagLyrics))
Expect(md.Strings(model.TagLyrics)).To(ContainElements(
metadata.NewPair("xxx", "(line one)\nline two\nline three"),
))
})
}) })
Describe("ReplayGain", func() { Describe("ReplayGain", func() {