xref: /MusicFree/src/service/index.ts (revision 5500cea7e936041b68a2f3709a583c2f0181b9e6)
1e22d5e4fS猫头猫import Config from '@/core/config';
2*5500cea7S猫头猫import RNTrackPlayer, {Event, State} from 'react-native-track-player';
357277364S猫头猫import LyricManager from '@/core/lyricManager';
457277364S猫头猫import LyricUtil from '@/native/lyricUtil';
5*5500cea7S猫头猫import TrackPlayer from '@/core/trackPlayer';
6*5500cea7S猫头猫import {musicIsPaused} from '@/utils/trackUtils';
7bf6e62f2S猫头猫
851c513c9S猫头猫let resumeState: State | null;
9bf6e62f2S猫头猫module.exports = async function () {
10*5500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemotePlay, () => TrackPlayer.play());
11*5500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemotePause, () =>
12*5500cea7S猫头猫        TrackPlayer.pause(),
13846ca2ccS猫头猫    );
14*5500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemotePrevious, () =>
15*5500cea7S猫头猫        TrackPlayer.skipToPrevious(),
164060c00aS猫头猫    );
17*5500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemoteNext, () =>
18*5500cea7S猫头猫        TrackPlayer.skipToNext(),
19*5500cea7S猫头猫    );
20*5500cea7S猫头猫    RNTrackPlayer.addEventListener(
21846ca2ccS猫头猫        Event.RemoteDuck,
22e2257bd6S猫头猫        async ({paused, permanent}) => {
23e22d5e4fS猫头猫            if (Config.get('setting.basic.notInterrupt')) {
24caaa811bS猫头猫                return;
25caaa811bS猫头猫            }
26e2257bd6S猫头猫            if (permanent) {
27*5500cea7S猫头猫                return TrackPlayer.pause();
28eb04a812S猫头猫            }
29266badb7S猫头猫            const tempRemoteDuckConf = Config.get(
30266badb7S猫头猫                'setting.basic.tempRemoteDuck',
31266badb7S猫头猫            );
32266badb7S猫头猫            if (tempRemoteDuckConf === '降低音量') {
33266badb7S猫头猫                if (paused) {
34*5500cea7S猫头猫                    return RNTrackPlayer.setVolume(0.5);
35266badb7S猫头猫                } else {
36*5500cea7S猫头猫                    return RNTrackPlayer.setVolume(1);
37266badb7S猫头猫                }
38266badb7S猫头猫            } else {
39eb04a812S猫头猫                if (paused) {
40*5500cea7S猫头猫                    resumeState =
41*5500cea7S猫头猫                        (await RNTrackPlayer.getPlaybackState()).state ??
42*5500cea7S猫头猫                        State.Paused;
43*5500cea7S猫头猫                    return TrackPlayer.pause();
4451c513c9S猫头猫                } else {
4551c513c9S猫头猫                    if (resumeState && !musicIsPaused(resumeState)) {
4651c513c9S猫头猫                        resumeState = null;
47*5500cea7S猫头猫                        return TrackPlayer.play();
48eb04a812S猫头猫                    }
4951c513c9S猫头猫                    resumeState = null;
5051c513c9S猫头猫                }
51266badb7S猫头猫            }
52846ca2ccS猫头猫        },
53846ca2ccS猫头猫    );
5457277364S猫头猫
55*5500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.PlaybackActiveTrackChanged, () => {
56*5500cea7S猫头猫        const currentMusicItem = TrackPlayer.getCurrentMusic();
5757277364S猫头猫        if (currentMusicItem) {
5857277364S猫头猫            LyricUtil.setStatusBarLyricText(
5957277364S猫头猫                `${currentMusicItem.title} - ${currentMusicItem.artist}`,
6057277364S猫头猫            );
6157277364S猫头猫        }
6257277364S猫头猫    });
6357277364S猫头猫
64*5500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => {
65bb9b2f7bS猫头猫        Config.set('status.music.progress', evt.position, false);
6657277364S猫头猫
6757277364S猫头猫        // 歌词逻辑
6857277364S猫头猫        const parser = LyricManager.getLyricState().lyricParser;
6957277364S猫头猫        if (parser) {
7057277364S猫头猫            const prevLyricText = LyricManager.getCurrentLyric()?.lrc;
7157277364S猫头猫            const currentLyricItem = parser.getPosition(evt.position).lrc;
7257277364S猫头猫            if (prevLyricText !== currentLyricItem?.lrc) {
7357277364S猫头猫                LyricManager.setCurrentLyric(currentLyricItem ?? null);
7457277364S猫头猫
7557277364S猫头猫                if (Config.get('setting.lyric.showStatusBarLyric')) {
7657277364S猫头猫                    LyricUtil.setStatusBarLyricText(
7757277364S猫头猫                        currentLyricItem?.lrc ?? '',
7857277364S猫头猫                    );
7957277364S猫头猫                }
8057277364S猫头猫            }
8157277364S猫头猫        }
82846ca2ccS猫头猫    });
83bf6e62f2S猫头猫};
84