1import Config from '@/core/config'; 2import RNTrackPlayer, {Event, State} from 'react-native-track-player'; 3import LyricManager from '@/core/lyricManager'; 4import LyricUtil from '@/native/lyricUtil'; 5import TrackPlayer from '@/core/trackPlayer'; 6import {musicIsPaused} from '@/utils/trackUtils'; 7 8let resumeState: State | null; 9module.exports = async function () { 10 RNTrackPlayer.addEventListener(Event.RemotePlay, () => TrackPlayer.play()); 11 RNTrackPlayer.addEventListener(Event.RemotePause, () => 12 TrackPlayer.pause(), 13 ); 14 RNTrackPlayer.addEventListener(Event.RemotePrevious, () => 15 TrackPlayer.skipToPrevious(), 16 ); 17 RNTrackPlayer.addEventListener(Event.RemoteNext, () => 18 TrackPlayer.skipToNext(), 19 ); 20 RNTrackPlayer.addEventListener( 21 Event.RemoteDuck, 22 async ({paused, permanent}) => { 23 if (Config.get('setting.basic.notInterrupt')) { 24 return; 25 } 26 if (permanent) { 27 return TrackPlayer.pause(); 28 } 29 const tempRemoteDuckConf = Config.get( 30 'setting.basic.tempRemoteDuck', 31 ); 32 if (tempRemoteDuckConf === '降低音量') { 33 if (paused) { 34 return RNTrackPlayer.setVolume(0.5); 35 } else { 36 return RNTrackPlayer.setVolume(1); 37 } 38 } else { 39 if (paused) { 40 resumeState = 41 (await RNTrackPlayer.getPlaybackState()).state ?? 42 State.Paused; 43 return TrackPlayer.pause(); 44 } else { 45 if (resumeState && !musicIsPaused(resumeState)) { 46 resumeState = null; 47 return TrackPlayer.play(); 48 } 49 resumeState = null; 50 } 51 } 52 }, 53 ); 54 55 RNTrackPlayer.addEventListener(Event.PlaybackActiveTrackChanged, () => { 56 const currentMusicItem = TrackPlayer.getCurrentMusic(); 57 if (currentMusicItem) { 58 LyricUtil.setStatusBarLyricText( 59 `${currentMusicItem.title} - ${currentMusicItem.artist}`, 60 ); 61 } 62 }); 63 64 RNTrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => { 65 Config.set('status.music.progress', evt.position, false); 66 67 // 歌词逻辑 68 const parser = LyricManager.getLyricState().lyricParser; 69 if (parser) { 70 const prevLyricText = LyricManager.getCurrentLyric()?.lrc; 71 const currentLyricItem = parser.getPosition(evt.position).lrc; 72 if (prevLyricText !== currentLyricItem?.lrc) { 73 LyricManager.setCurrentLyric(currentLyricItem ?? null); 74 75 if (Config.get('setting.lyric.showStatusBarLyric')) { 76 LyricUtil.setStatusBarLyricText( 77 currentLyricItem?.lrc ?? '', 78 ); 79 } 80 } 81 } 82 }); 83}; 84