Pārlūkot izejas kodu

fix(card): enforce empty state hygiene

onecold 4 mēneši atpakaļ
vecāks
revīzija
7a70a51120

+ 7 - 8
entry/src/main/ets/common/player/MusicCardSnapshot.ets

@@ -164,7 +164,6 @@ export function resolveMusicCardLyricLines(
 
 export function buildMusicCardBindingData(snapshot: MusicCardSnapshot): MusicCardBindingData {
   const source = snapshot || createEmptyMusicCardSnapshot()
-  const lyricLines = resolveMusicCardLyricLines(source.lyricText, source.currentPositionMs)
   const data = new MusicCardBindingData()
 
   data.hasSong = Boolean(source.hasSong)
@@ -189,28 +188,28 @@ export function buildMusicCardBindingData(snapshot: MusicCardSnapshot): MusicCar
   if (!data.hasSong) {
     data.coverPath = ''
     data.hasCoverImage = false
+    data.isPlaying = false
     data.currentPositionMs = 0
     data.durationMs = 0
     data.currentTimeText = DEFAULT_TIME_TEXT
     data.durationTimeText = DEFAULT_TIME_TEXT
     data.filePath = ''
+    data.lyricLine1 = data.title
+    data.lyricLine2 = data.artist
+    data.hasLyric = false
+    return data
   }
 
   let lyricLine1 = data.title
   let lyricLine2 = data.artist
   let hasLyric = false
 
+  const lyricLines = resolveMusicCardLyricLines(source.lyricText, source.currentPositionMs)
+
   if (lyricLines.hasLyric) {
     lyricLine1 = lyricLines.line1
     lyricLine2 = lyricLines.line2
     hasLyric = true
-  } else if (
-    source.hasLyric &&
-    (isNonEmpty(source.lyricLine1) || isNonEmpty(source.lyricLine2))
-  ) {
-    lyricLine1 = isNonEmpty(source.lyricLine1) ? source.lyricLine1 : data.title
-    lyricLine2 = isNonEmpty(source.lyricLine2) ? source.lyricLine2 : data.artist
-    hasLyric = true
   }
 
   data.lyricLine1 = lyricLine1

+ 15 - 19
entry/src/ohosTest/ets/test/MusicCardSnapshot.test.ets

@@ -102,43 +102,39 @@ export default function musicCardSnapshotTest() {
       snapshot.currentTimeText = '00:12'
       snapshot.durationTimeText = '05:01'
       snapshot.filePath = '/storage/track.mp3'
+      snapshot.isPlaying = true
+      snapshot.lyricText = '[00:00.00]残留'
+      snapshot.hasLyric = true
+      snapshot.lyricLine1 = '残留'
+      snapshot.lyricLine2 = ''
 
       const binding = buildMusicCardBindingData(snapshot)
 
       expect(binding.hasSong).assertEqual(false)
       expect(binding.coverPath).assertEqual('')
       expect(binding.hasCoverImage).assertEqual(false)
+      expect(binding.isPlaying).assertEqual(false)
       expect(binding.currentPositionMs).assertEqual(0)
       expect(binding.durationMs).assertEqual(0)
       expect(binding.currentTimeText).assertEqual('00:00')
       expect(binding.durationTimeText).assertEqual('00:00')
       expect(binding.filePath).assertEqual('')
+      expect(binding.hasLyric).assertEqual(false)
+      expect(binding.lyricLine1).assertEqual('未在播放')
+      expect(binding.lyricLine2).assertEqual('点击打开播放器')
     })
 
-    it('buildMusicCardBindingDataKeepsSourceLyricsWhenAvailable', 0, () => {
+    it('buildMusicCardBindingDataDerivesLyricLinesWhenSongPlaying', 0, () => {
       const snapshot = createEmptyMusicCardSnapshot()
-      snapshot.hasLyric = true
-      snapshot.lyricLine1 = 'Backline 1'
-      snapshot.lyricLine2 = 'Backline 2'
+      snapshot.hasSong = true
+      snapshot.lyricText = '[00:00.00]甲\n[00:05.00]乙'
+      snapshot.currentPositionMs = 6000
 
       const binding = buildMusicCardBindingData(snapshot)
 
       expect(binding.hasLyric).assertEqual(true)
-      expect(binding.lyricLine1).assertEqual('Backline 1')
-      expect(binding.lyricLine2).assertEqual('Backline 2')
-    })
-
-    it('buildMusicCardBindingDataFallsBackWhenLyricLinesEmpty', 0, () => {
-      const snapshot = createEmptyMusicCardSnapshot()
-      snapshot.hasLyric = true
-      snapshot.lyricLine1 = ''
-      snapshot.lyricLine2 = ''
-
-      const binding = buildMusicCardBindingData(snapshot)
-
-      expect(binding.hasLyric).assertEqual(false)
-      expect(binding.lyricLine1).assertEqual('未在播放')
-      expect(binding.lyricLine2).assertEqual('点击打开播放器')
+      expect(binding.lyricLine1).assertEqual('乙')
+      expect(binding.lyricLine2).assertEqual('')
     })
   })
 }