PlaybackSnapshot.ets 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. export interface PlaybackSnapshotSong {
  2. filePath: string
  3. id?: string
  4. type: number
  5. name: string
  6. isFav?: number
  7. artist?: string
  8. album?: string
  9. duration?: string
  10. pixelMapPath?: string
  11. lyricContent?: string
  12. remote_rel_path?: string
  13. webdav_account_id?: string
  14. }
  15. export interface PlaybackSnapshot {
  16. queue: PlaybackSnapshotSong[]
  17. currentIndex: number
  18. currentSongKey: string
  19. currentSongName: string
  20. currentArtist?: string
  21. isPlaying: boolean
  22. positionMs: number
  23. durationMs: number
  24. cover?: string
  25. playType: number
  26. playlistContext: string
  27. updatedAt: number
  28. shouldResumeWhenActivated: boolean
  29. }
  30. export type PlaybackActivationActionType = 'resume_play' | 'open_player' | 'play_previous' | 'play_next'
  31. export interface PendingPlaybackActivation {
  32. actionType: PlaybackActivationActionType
  33. requestedAt: number
  34. }
  35. export function resolvePlaybackSnapshotProgressValue(positionMs: number, durationMs: number, maxValue: number): number {
  36. if (durationMs <= 0 || maxValue <= 0) {
  37. return 0
  38. }
  39. const clampedPositionMs = Math.max(0, Math.min(positionMs, durationMs))
  40. return clampedPositionMs / durationMs * maxValue
  41. }