@@ -18,8 +18,8 @@ const usePlayerState = createGlobalState(() => ({
1818 progress : useLocalStorage < number > ( 'player_progress' , 0 , { serializer, writeDefaults : true } ) ,
1919 buffer : ref ( 0 ) ,
2020 duration : useLocalStorage < number > ( 'player_duration' , 0 , { serializer, writeDefaults : true } ) ,
21- volume : useLocalStorage ( 'player_volume' , 1 , { serializer, writeDefaults : true } ) ,
22- muted : useLocalStorage ( 'player_muted' , false , { serializer, writeDefaults : true } ) ,
21+ volume : useLocalStorage < number > ( 'player_volume' , 1 , { serializer, writeDefaults : true } ) ,
22+ muted : useLocalStorage < boolean > ( 'player_muted' , false , { serializer, writeDefaults : true } ) ,
2323 ended : ref ( false ) ,
2424} ) )
2525
@@ -42,17 +42,14 @@ export const usePlayer = createSharedComposable(() => {
4242 const tracksService = useTracksService ( )
4343 const { mutate : mutateCacheTrack } = tracksService . cacheTrack ( )
4444 async function cacheTrack ( trackId : string ) {
45- if ( currentTrack . value && ! currentTrack . value . cached ) {
45+ if ( currentTrack . value && ! currentTrack . value . url . audio ) {
4646 caching . value = true
4747
4848 try {
4949 const result = await mutateCacheTrack ( { trackId } )
5050 const cachedTrack = result ?. data ?. cacheTrack
5151
52- if (
53- cachedTrack
54- && ( ! currentTrack || trackId === currentTrack . value ?. id )
55- )
52+ if ( cachedTrack && ( ! currentTrack || trackId === currentTrack . value ?. id ) )
5653 caching . value = false
5754 }
5855 catch { }
@@ -74,70 +71,46 @@ export const usePlayer = createSharedComposable(() => {
7471 cancelCacheTrack ( currentTrack . value . id )
7572 }
7673 else {
77- if ( currentTrack . value ?. cached )
74+ if ( currentTrack . value ?. url ?. audio )
7875 audio . value . play ( ) . catch ( ( ) => { } )
7976 else void cacheTrack ( currentTrack . value . id )
8077 }
8178 }
8279 } ,
8380 { immediate : true } ,
8481 )
85- const { ignoreUpdates : ignoreProgressUpdates } = watchIgnorable (
86- progress ,
87- value => ( audio . value . currentTime = value ) ,
88- { immediate : true } ,
89- )
90- const { ignoreUpdates : ignoreVolumeUpdates } = watchIgnorable (
91- volume ,
92- value => ( audio . value . volume = value ) ,
93- { immediate : true } ,
94- )
95- const { ignoreUpdates : ignoreMuteUpdates } = watchIgnorable (
96- muted ,
97- value => ( audio . value . muted = value ) ,
98- { immediate : true } ,
99- )
82+ const { ignoreUpdates : ignoreProgressUpdates } = watchIgnorable ( progress , value => ( audio . value . currentTime = value ) , { immediate : true } )
83+ const { ignoreUpdates : ignoreVolumeUpdates } = watchIgnorable ( volume , value => ( audio . value . volume = value ) , { immediate : true } )
84+ const { ignoreUpdates : ignoreMuteUpdates } = watchIgnorable ( muted , value => ( audio . value . muted = value ) , { immediate : true } )
10085
10186 useEventListener ( audio , 'canplay' , ( ) => {
10287 if ( playing . value )
10388 audio . value . play ( ) . catch ( ( ) => { } )
10489 } )
105- useEventListener ( audio , 'play' , ( ) =>
106- ignorePlayingUpdates ( ( ) => ( playing . value = true ) ) ,
107- )
90+ useEventListener ( audio , 'play' , ( ) => ignorePlayingUpdates ( ( ) => ( playing . value = true ) ) )
10891 useEventListener ( audio , 'pause' , ( ) => {
10992 if ( audio . value . currentTime !== audio . value . duration )
11093 ignorePlayingUpdates ( ( ) => ( playing . value = false ) )
11194 } )
112- useEventListener ( audio , 'timeupdate' , ( ) =>
113- ignoreProgressUpdates ( ( ) => ( progress . value = audio . value . currentTime ) ) ,
114- )
115- useEventListener (
116- audio ,
117- 'progress' ,
118- ( ) => ( buffer . value = calcBuffer ( audio . value . buffered , progress . value ) ) ,
119- )
120- useEventListener ( audio , 'volumechange' , ( ) =>
121- ignoreVolumeUpdates ( ( ) =>
122- ignoreMuteUpdates ( ( ) => {
123- volume . value = audio . value . volume
124- muted . value = audio . value . muted
125- } ) ,
126- ) ,
127- )
95+ useEventListener ( audio , 'timeupdate' , ( ) => ignoreProgressUpdates ( ( ) => ( progress . value = audio . value . currentTime ) ) )
96+ useEventListener ( audio , 'durationchange' , ( ) => ( duration . value = audio . value . duration ) )
97+ useEventListener ( audio , 'progress' , ( ) => ( buffer . value = calcBuffer ( audio . value . buffered , progress . value ) ) )
98+ useEventListener ( audio , 'volumechange' , ( ) => ignoreVolumeUpdates ( ( ) => ignoreMuteUpdates ( ( ) => {
99+ volume . value = audio . value . volume
100+ muted . value = audio . value . muted
101+ } ) ) )
128102 useEventListener ( audio , 'ended' , ( ) => ( ended . value = true ) )
129103 useEventListener ( audio , 'playing' , ( ) => ( ended . value = false ) )
130104
131105 watch ( currentTrack , ( value , oldValue ) => {
132106 ignoreProgressUpdates ( ( ) => ( progress . value = 0 ) )
133- duration . value = value ?. duration ?? 0
134107
135108 if ( caching . value && oldValue )
136109 cancelCacheTrack ( oldValue . id )
137110
138111 audio . value . src = value ?. url ?. audio ?? ''
139112 audio . value . load ( )
140- if ( value && ! value . cached && playing . value )
113+ if ( value && ! value . url . audio && playing . value )
141114 void cacheTrack ( value . id )
142115 } )
143116
0 commit comments