fix(ScrollingLyrics): handle empty lyrics input by returning a default empty line and adjust current line index logic

This commit is contained in:
Astrian Zheng 2025-05-26 18:28:33 +10:00
parent 8a16f3cde8
commit c129b2dd1b
Signed by: Astrian
SSH Key Fingerprint: SHA256:rVnhx3DAKjujCwWE13aDl7uV6+9U1MvydLkNRXJrBiA

View File

@ -188,7 +188,14 @@ function setLineRef(el: HTMLElement | null, index: number) {
// //
function parseLyrics(lrcText: string, minGapDuration: number = 5): (LyricsLine | GapLine)[] { function parseLyrics(lrcText: string, minGapDuration: number = 5): (LyricsLine | GapLine)[] {
if (!lrcText) return [] if (!lrcText) return [
{
type: 'lyric',
time: 0,
text: '',
originalTime: '[00:00]'
}
]
const lines = lrcText.split('\n') const lines = lrcText.split('\n')
const tempParsedLines: (LyricsLine | GapLine)[] = [] const tempParsedLines: (LyricsLine | GapLine)[] = []
@ -248,15 +255,24 @@ function parseLyrics(lrcText: string, minGapDuration: number = 5): (LyricsLine |
} }
finalLines.push(...lyricLines) finalLines.push(...lyricLines)
return finalLines.sort((a, b) => a.time - b.time) const sortedLines = finalLines.sort((a, b) => a.time - b.time)
//
sortedLines.unshift({
type: 'lyric',
time: 0,
text: '',
originalTime: '[00:00]'
})
return sortedLines
} }
// //
function findCurrentLineIndex(time: number): number { function findCurrentLineIndex(time: number): number {
if (parsedLyrics.value.length === 0) return -1 if (parsedLyrics.value.length === 0) return -1
// 0
let index = -1 if (time < parsedLyrics.value[1]?.time) return 0
for (let i = 0; i < parsedLyrics.value.length; i++) { let index = 0
for (let i = 1; i < parsedLyrics.value.length; i++) {
if (time >= parsedLyrics.value[i].time) { if (time >= parsedLyrics.value[i].time) {
index = i index = i
} else { } else {