1import Config from '@/core/config'; 2import musicIsPaused from '@/utils/musicIsPaused'; 3import TrackPlayer, {Event, State} from 'react-native-track-player'; 4import MusicQueue from '../core/musicQueue'; 5import LyricManager from '@/core/lyricManager'; 6import LyricUtil from '@/native/lyricUtil'; 7 8let resumeState: State | null; 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 const tempRemoteDuckConf = Config.get( 28 'setting.basic.tempRemoteDuck', 29 ); 30 if (tempRemoteDuckConf === '降低音量') { 31 if (paused) { 32 return TrackPlayer.setVolume(0.5); 33 } else { 34 return TrackPlayer.setVolume(1); 35 } 36 } else { 37 if (paused) { 38 resumeState = await TrackPlayer.getState(); 39 return MusicQueue.pause(); 40 } else { 41 if (resumeState && !musicIsPaused(resumeState)) { 42 resumeState = null; 43 return MusicQueue.play(); 44 } 45 resumeState = null; 46 } 47 } 48 }, 49 ); 50 51 TrackPlayer.addEventListener(Event.PlaybackTrackChanged, () => { 52 const currentMusicItem = MusicQueue.getCurrentMusicItem(); 53 if (currentMusicItem) { 54 LyricUtil.setStatusBarLyricText( 55 `${currentMusicItem.title} - ${currentMusicItem.artist}`, 56 ); 57 } 58 }); 59 60 TrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => { 61 Config.set('status.music.progress', evt.position, false); 62 63 // 歌词逻辑 64 const parser = LyricManager.getLyricState().lyricParser; 65 if (parser) { 66 const prevLyricText = LyricManager.getCurrentLyric()?.lrc; 67 const currentLyricItem = parser.getPosition(evt.position).lrc; 68 if (prevLyricText !== currentLyricItem?.lrc) { 69 LyricManager.setCurrentLyric(currentLyricItem ?? null); 70 71 if (Config.get('setting.lyric.showStatusBarLyric')) { 72 LyricUtil.setStatusBarLyricText( 73 currentLyricItem?.lrc ?? '', 74 ); 75 } 76 } 77 } 78 }); 79}; 80