@@ -705,10 +705,18 @@ fun parseLrc(lyricText: String, trimEnabled: Boolean, multiLineEnabled: Boolean)
705705 }
706706 }
707707 out .sortBy { it.start }
708+ val invalidLines = ArrayList <LyricLine >()
708709 var previousLyric: LyricLine ? = null
709710 val defaultIsWalaokeM = out .find { it.speaker?.isWalaoke == true } != null &&
710711 out .find { it.speaker?.isWalaoke == false } == null
711712 out .forEachIndexed { i, lyric ->
713+ val isTranslated = lyric.start == previousLyric?.start
714+ && (previousLyric.text.isNotBlank() || lyric.text.isBlank())
715+ // mark blank translations for deletion
716+ if (isTranslated && lyric.text.isBlank()) {
717+ invalidLines.add(lyric)
718+ return @forEachIndexed
719+ }
712720 if (defaultIsWalaokeM && lyric.speaker == null )
713721 lyric.speaker = SpeakerEntity .Male
714722 lyric.end = lyric.end.takeIf { it != 0uL }
@@ -717,10 +725,11 @@ fun parseLrc(lyricText: String, trimEnabled: Boolean, multiLineEnabled: Boolean)
717725 ?.words?.lastOrNull()?.timeRange?.last else null )
718726 ? : out .find { it.start > lyric.start }?.start?.minus(1uL )
719727 ? : Long .MAX_VALUE .toULong()
720- lyric.isTranslated = lyric.start == previousLyric?.start
721- && (previousLyric.text.isNotBlank() || lyric.text.isBlank())
728+ lyric.isTranslated = isTranslated
722729 previousLyric = lyric
723730 }
731+ out .removeAll(invalidLines)
732+
724733 while (out .firstOrNull()?.text?.isBlank() == true )
725734 out .removeAt(0 )
726735 // while (out.lastOrNull()?.text?.isBlank() == true)
0 commit comments