Explorar o código

fix(player): reset playback status when replacing queue

onecold hai 4 meses
pai
achega
88a8f17821

+ 5 - 1
entry/src/main/ets/controller/PlaybackStateBridge.ets

@@ -56,11 +56,15 @@ export class PlaybackStateBridge {
       ...this.snapshot,
       queue: safeQueue,
       currentIndex: safeIndex,
-      currentSong
+      currentSong,
+      isPlaying: false,
+      positionMs: 0,
+      durationMs: 0
     }
     AppStorage.setOrCreate('currentSong', currentSong)
     AppStorage.setOrCreate('currentQueue', safeQueue)
     AppStorage.setOrCreate('currentQueueIndex', safeIndex)
+    AppStorage.setOrCreate('isPlaying', false)
   }
 
   public updatePlaybackState(isPlaying: boolean, positionMs: number, durationMs: number): void {

+ 20 - 0
entry/src/ohosTest/ets/test/PlaybackStateBridge.test.ets

@@ -1,3 +1,4 @@
+import { AppStorage } from '@kit.ArkUI'
 import { describe, expect, it } from '@ohos/hypium'
 import { PlaybackStateBridge } from '../../../main/ets/controller/PlaybackStateBridge'
 import { VideoItem } from '../../../main/ets/viewmodel/VideoItem'
@@ -18,6 +19,11 @@ export default function playbackStateBridgeTest() {
       expect(snapshot.queue.length).assertEqual(2)
       expect(snapshot.currentIndex).assertEqual(1)
       expect(snapshot.currentSong?.filePath ?? '').assertEqual('/music/b.flac')
+      const storedQueue = AppStorage.get<VideoItem[]>('currentQueue') ?? []
+      expect(storedQueue.length).assertEqual(2)
+      expect(storedQueue[1]?.filePath ?? '').assertEqual('/music/b.flac')
+      expect(AppStorage.get<VideoItem>('currentSong')?.filePath ?? '').assertEqual('/music/b.flac')
+      expect(AppStorage.get<number>('currentQueueIndex')).assertEqual(1)
     })
 
     it('updatePlaybackStateDoesNotDropQueue', 0, () => {
@@ -35,6 +41,20 @@ export default function playbackStateBridgeTest() {
       expect(snapshot.positionMs).assertEqual(1350)
       expect(snapshot.durationMs).assertEqual(4200)
       expect(snapshot.currentSong?.filePath ?? '').assertEqual('/music/a.flac')
+      expect(AppStorage.get<boolean>('isPlaying')).assertTrue()
+    })
+
+    it('replaceQueueWithEmptyQueueResetsPlaybackState', 0, () => {
+      const bridge = PlaybackStateBridge.getInstance()
+      bridge.reset()
+
+      bridge.replaceQueue([], 0)
+      const snapshot = bridge.getSnapshot()
+
+      expect(snapshot.queue.length).assertEqual(0)
+      expect(snapshot.currentIndex).assertEqual(-1)
+      expect(snapshot.isPlaying).assertFalse()
+      expect(AppStorage.get<boolean>('isPlaying')).assertFalse()
     })
   })
 }