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