xref: /MusicFree/src/service/index.ts (revision b882a19d884fffa32f7c8cef31652b909dceaa0f)
1import Config from '@/core/config';
2import musicIsPaused from '@/utils/musicIsPaused';
3import TrackPlayer, {Event, State} from 'react-native-track-player';
4import MusicQueue from '../core/musicQueue';
5
6let resumeState: State;
7module.exports = async function () {
8    TrackPlayer.addEventListener(Event.RemotePlay, () => MusicQueue.play());
9    TrackPlayer.addEventListener(Event.RemotePause, () => MusicQueue.pause());
10    TrackPlayer.addEventListener(Event.RemotePrevious, () =>
11        MusicQueue.skipToPrevious(),
12    );
13    TrackPlayer.addEventListener(Event.RemoteNext, () =>
14        MusicQueue.skipToNext(),
15    );
16    TrackPlayer.addEventListener(
17        Event.RemoteDuck,
18        async ({paused, parmanent}) => {
19            if (Config.get('setting.basic.notInterrupt')) {
20                return;
21            }
22            if (parmanent) {
23                return MusicQueue.pause();
24            }
25            if (paused) {
26                resumeState = await TrackPlayer.getState();
27                return MusicQueue.pause();
28            } else if (!musicIsPaused(resumeState)) {
29                return MusicQueue.play();
30            }
31        },
32    );
33    TrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => {
34        Config.set('status.music.progress', evt.position);
35    });
36    /** 播放下一个 */
37    TrackPlayer.addEventListener(Event.PlaybackTrackChanged, async evt => {
38        // 是track里的,不是playlist里的
39        if (
40            evt.nextTrack === 1 &&
41            !(await TrackPlayer.getTrack(evt.nextTrack))?.url
42        ) {
43            if (MusicQueue.getRepeatMode() === 'SINGLE') {
44                await MusicQueue.play(undefined, true);
45            } else {
46                console.log('SKIP');
47                await MusicQueue.skipToNext();
48            }
49        }
50    });
51};
52