mirror of
https://github.com/navidrome/navidrome.git
synced 2026-11-02 16:37:49 +01:00
Move the cue-normalization machinery out of lyrics.go into a dedicated lyrics_normalize.go (with lyrics_normalize_test.go), leaving lyrics.go to hold just the shared lyric types and their methods. lyrics.go was mixing the domain type/contract definitions with format-agnostic post-processing. Unexport normalizeLyrics, normalizeCueLines, and normalizeLineTiming: they have no callers outside the model package, so they should not be part of its public API. NormalizeCueEnds stays exported because the Subsonic enhanced-lyrics serializer (server/subsonic/lyrics.go) resolves cue ends per agent group while building the response; that is the only legitimate cross-package caller. Also includes a small no-op robustness tweak in parseLRC: len(times) == 0 instead of times == nil (equivalent here, more idiomatic). No behavior change.
33 lines
839 B
Go
33 lines
839 B
Go
package model
|
|
|
|
import (
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("normalizeCueLines", func() {
|
|
It("should not mutate caller cue slices when filling missing cue end times", func() {
|
|
start0, start1, nextLineStart := int64(1000), int64(1500), int64(3000)
|
|
lines := []Line{
|
|
{
|
|
Start: &start0,
|
|
Value: "Some lyrics",
|
|
Cue: []Cue{
|
|
{Start: &start0, Value: "Some ", ByteStart: 0, ByteEnd: 4},
|
|
{Start: &start1, Value: "lyrics", ByteStart: 5, ByteEnd: 10},
|
|
},
|
|
},
|
|
{
|
|
Start: &nextLineStart,
|
|
Value: "Next line",
|
|
},
|
|
}
|
|
|
|
normalized := normalizeCueLines(lines)
|
|
|
|
Expect(normalized[0].Cue[0].End).To(Equal(&start1))
|
|
Expect(normalized[0].Cue[1].End).To(Equal(&nextLineStart))
|
|
Expect(lines[0].Cue[0].End).To(BeNil())
|
|
Expect(lines[0].Cue[1].End).To(BeNil())
|
|
})
|
|
})
|