xref: /MusicFree/src/service/index.ts (revision 13cebe639f366cc764bcbd619c248f8037fbbb8f)
1e22d5e4fS猫头猫import Config from '@/core/config';
25500cea7S猫头猫import RNTrackPlayer, {Event, State} from 'react-native-track-player';
357277364S猫头猫import LyricManager from '@/core/lyricManager';
457277364S猫头猫import LyricUtil from '@/native/lyricUtil';
55500cea7S猫头猫import TrackPlayer from '@/core/trackPlayer';
65500cea7S猫头猫import {musicIsPaused} from '@/utils/trackUtils';
76e000b99S猫头猫import PersistStatus from '@/core/persistStatus';
8bf6e62f2S猫头猫
951c513c9S猫头猫let resumeState: State | null;
10bf6e62f2S猫头猫module.exports = async function () {
115500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemotePlay, () => TrackPlayer.play());
125500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemotePause, () =>
135500cea7S猫头猫        TrackPlayer.pause(),
14846ca2ccS猫头猫    );
155500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemotePrevious, () =>
165500cea7S猫头猫        TrackPlayer.skipToPrevious(),
174060c00aS猫头猫    );
185500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.RemoteNext, () =>
195500cea7S猫头猫        TrackPlayer.skipToNext(),
205500cea7S猫头猫    );
215500cea7S猫头猫    RNTrackPlayer.addEventListener(
22846ca2ccS猫头猫        Event.RemoteDuck,
23e2257bd6S猫头猫        async ({paused, permanent}) => {
24e22d5e4fS猫头猫            if (Config.get('setting.basic.notInterrupt')) {
25caaa811bS猫头猫                return;
26caaa811bS猫头猫            }
27e2257bd6S猫头猫            if (permanent) {
285500cea7S猫头猫                return TrackPlayer.pause();
29eb04a812S猫头猫            }
30266badb7S猫头猫            const tempRemoteDuckConf = Config.get(
31266badb7S猫头猫                'setting.basic.tempRemoteDuck',
32266badb7S猫头猫            );
33266badb7S猫头猫            if (tempRemoteDuckConf === '降低音量') {
34266badb7S猫头猫                if (paused) {
355500cea7S猫头猫                    return RNTrackPlayer.setVolume(0.5);
36266badb7S猫头猫                } else {
375500cea7S猫头猫                    return RNTrackPlayer.setVolume(1);
38266badb7S猫头猫                }
39266badb7S猫头猫            } else {
40eb04a812S猫头猫                if (paused) {
415500cea7S猫头猫                    resumeState =
425500cea7S猫头猫                        (await RNTrackPlayer.getPlaybackState()).state ??
435500cea7S猫头猫                        State.Paused;
445500cea7S猫头猫                    return TrackPlayer.pause();
4551c513c9S猫头猫                } else {
4651c513c9S猫头猫                    if (resumeState && !musicIsPaused(resumeState)) {
4751c513c9S猫头猫                        resumeState = null;
485500cea7S猫头猫                        return TrackPlayer.play();
49eb04a812S猫头猫                    }
5051c513c9S猫头猫                    resumeState = null;
5151c513c9S猫头猫                }
52266badb7S猫头猫            }
53846ca2ccS猫头猫        },
54846ca2ccS猫头猫    );
5557277364S猫头猫
565500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.PlaybackActiveTrackChanged, () => {
575500cea7S猫头猫        const currentMusicItem = TrackPlayer.getCurrentMusic();
5857277364S猫头猫        if (currentMusicItem) {
5957277364S猫头猫            LyricUtil.setStatusBarLyricText(
6057277364S猫头猫                `${currentMusicItem.title} - ${currentMusicItem.artist}`,
6157277364S猫头猫            );
6257277364S猫头猫        }
6357277364S猫头猫    });
6457277364S猫头猫
655500cea7S猫头猫    RNTrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => {
666e000b99S猫头猫        PersistStatus.set('music.progress', evt.position);
6757277364S猫头猫
6857277364S猫头猫        // 歌词逻辑
6957277364S猫头猫        const parser = LyricManager.getLyricState().lyricParser;
7057277364S猫头猫        if (parser) {
7157277364S猫头猫            const prevLyricText = LyricManager.getCurrentLyric()?.lrc;
7257277364S猫头猫            const currentLyricItem = parser.getPosition(evt.position).lrc;
7357277364S猫头猫            if (prevLyricText !== currentLyricItem?.lrc) {
7457277364S猫头猫                LyricManager.setCurrentLyric(currentLyricItem ?? null);
75*13cebe63S猫头猫                const showTranslation = PersistStatus.get(
76*13cebe63S猫头猫                    'lyric.showTranslation',
777e883dbbS猫头猫                );
7857277364S猫头猫                if (Config.get('setting.lyric.showStatusBarLyric')) {
7957277364S猫头猫                    LyricUtil.setStatusBarLyricText(
807e883dbbS猫头猫                        (currentLyricItem?.lrc ?? '') +
817e883dbbS猫头猫                            (showTranslation
827e883dbbS猫头猫                                ? `\n${
837e883dbbS猫头猫                                      parser.getTranslationLyric()?.[
847e883dbbS猫头猫                                          currentLyricItem?.index!
857e883dbbS猫头猫                                      ]?.lrc || ''
867e883dbbS猫头猫                                  }`
877e883dbbS猫头猫                                : ''),
8857277364S猫头猫                    );
8957277364S猫头猫                }
9057277364S猫头猫            }
9157277364S猫头猫        }
92846ca2ccS猫头猫    });
93bf6e62f2S猫头猫};
94