xref: /MusicFree/src/service/index.ts (revision 2489759dfdde34ed4dbfc95452a2bf5cb8a8ca13)
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 | null;
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, permanent}) => {
19            if (Config.get('setting.basic.notInterrupt')) {
20                return;
21            }
22            if (permanent) {
23                return MusicQueue.pause();
24            }
25            const tempRemoteDuckConf = Config.get(
26                'setting.basic.tempRemoteDuck',
27            );
28            if (tempRemoteDuckConf === '降低音量') {
29                if (paused) {
30                    return TrackPlayer.setVolume(0.5);
31                } else {
32                    return TrackPlayer.setVolume(1);
33                }
34            } else {
35                if (paused) {
36                    resumeState = await TrackPlayer.getState();
37                    return MusicQueue.pause();
38                } else {
39                    if (resumeState && !musicIsPaused(resumeState)) {
40                        resumeState = null;
41                        return MusicQueue.play();
42                    }
43                    resumeState = null;
44                }
45            }
46        },
47    );
48    TrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => {
49        Config.set('status.music.progress', evt.position, false);
50    });
51};
52