1import Config from '@/core/config'; 2import {trace} from '@/utils/log'; 3import {isSameMediaItem} from '@/utils/mediaItem'; 4import musicIsPaused from '@/utils/musicIsPaused'; 5import TrackPlayer, {Event, State} from 'react-native-track-player'; 6import MusicQueue from '../core/musicQueue'; 7 8let resumeState: State; 9module.exports = async function () { 10 TrackPlayer.addEventListener(Event.RemotePlay, () => MusicQueue.play()); 11 TrackPlayer.addEventListener(Event.RemotePause, () => MusicQueue.pause()); 12 TrackPlayer.addEventListener(Event.RemotePrevious, () => 13 MusicQueue.skipToPrevious(), 14 ); 15 TrackPlayer.addEventListener(Event.RemoteNext, () => 16 MusicQueue.skipToNext(), 17 ); 18 TrackPlayer.addEventListener( 19 Event.RemoteDuck, 20 async ({paused, permanent}) => { 21 if (Config.get('setting.basic.notInterrupt')) { 22 return; 23 } 24 if (permanent) { 25 return MusicQueue.pause(); 26 } 27 if (paused) { 28 resumeState = await TrackPlayer.getState(); 29 return MusicQueue.pause(); 30 } else if (!musicIsPaused(resumeState)) { 31 return MusicQueue.play(); 32 } 33 }, 34 ); 35 TrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => { 36 Config.set('status.music.progress', evt.position); 37 }); 38 /** 播放下一个 */ 39 TrackPlayer.addEventListener(Event.PlaybackTrackChanged, async evt => { 40 // console.log('track变化', evt, await TrackPlayer.getQueue()) 41 // 是track里的,不是playlist里的 42 trace('PlaybackTrackChanged', { 43 evt, 44 }); 45 46 if ( 47 evt.nextTrack === 1 && 48 !(await TrackPlayer.getTrack(evt.nextTrack))?.url 49 ) { 50 if (MusicQueue.getRepeatMode() === 'SINGLE') { 51 await MusicQueue.play(undefined, true); 52 } else { 53 const queue = await TrackPlayer.getQueue(); 54 // 要跳到的下一个就是当前的,并且队列里面有多首歌 55 if ( 56 isSameMediaItem( 57 queue[1] as unknown as ICommon.IMediaBase, 58 MusicQueue.getCurrentMusicItem(), 59 ) && 60 MusicQueue.getMusicQueue().length > 1 61 ) { 62 console.log('多余的事件'); 63 return; 64 } 65 trace('PlaybackTrackChanged-shouldskip', { 66 evt, 67 queue, 68 }); 69 70 await MusicQueue.skipToNext(); 71 } 72 } 73 }); 74}; 75