xref: /MusicFree/src/service/index.ts (revision 41ddce918e1138d8f16e522cc7c19ac86ceca698)
1*41ddce91Smaotoumaoimport Config from "@/core/config.ts";
263c74e8eSmaotoumaoimport RNTrackPlayer, { Event, State } from "react-native-track-player";
363c74e8eSmaotoumaoimport LyricManager from "@/core/lyricManager";
463c74e8eSmaotoumaoimport LyricUtil from "@/native/lyricUtil";
563c74e8eSmaotoumaoimport TrackPlayer from "@/core/trackPlayer";
663c74e8eSmaotoumaoimport { musicIsPaused } from "@/utils/trackUtils";
7819a9075Smaotoumaoimport PersistStatus from "@/core/persistStatus.ts";
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}) => {
24*41ddce91Smaotoumao            if (Config.getConfig('basic.notInterrupt')) {
25caaa811bS猫头猫                return;
26caaa811bS猫头猫            }
27e2257bd6S猫头猫            if (permanent) {
285500cea7S猫头猫                return TrackPlayer.pause();
29eb04a812S猫头猫            }
30*41ddce91Smaotoumao            const tempRemoteDuckConf = Config.getConfig(
31*41ddce91Smaotoumao                '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 => {
66819a9075Smaotoumao        PersistStatus.set('music.progress', evt.position);
6757277364S猫头猫
6857277364S猫头猫        // 歌词逻辑
6957277364S猫头猫        const parser = LyricManager.getLyricState().lyricParser;
7057277364S猫头猫        if (parser) {
7157277364S猫头猫            const prevLyricText = LyricManager.getCurrentLyric()?.lrc;
7243733013S猫头猫            const currentLyricItem = parser.getPosition(evt.position);
7357277364S猫头猫            if (prevLyricText !== currentLyricItem?.lrc) {
7457277364S猫头猫                LyricManager.setCurrentLyric(currentLyricItem ?? null);
75819a9075Smaotoumao                const showTranslation = PersistStatus.get(
7613cebe63S猫头猫                    'lyric.showTranslation',
777e883dbbS猫头猫                );
78*41ddce91Smaotoumao                if (Config.getConfig('lyric.showStatusBarLyric')) {
7957277364S猫头猫                    LyricUtil.setStatusBarLyricText(
807e883dbbS猫头猫                        (currentLyricItem?.lrc ?? '') +
817e883dbbS猫头猫                            (showTranslation
8243733013S猫头猫                                ? `\n${currentLyricItem?.translation ?? ''}`
837e883dbbS猫头猫                                : ''),
8457277364S猫头猫                    );
8557277364S猫头猫                }
8657277364S猫头猫            }
8757277364S猫头猫        }
88846ca2ccS猫头猫    });
8966e1d5fcS猫头猫
9066e1d5fcS猫头猫    RNTrackPlayer.addEventListener(Event.RemoteStop, async () => {
9166e1d5fcS猫头猫        RNTrackPlayer.stop();
9266e1d5fcS猫头猫    });
9366e1d5fcS猫头猫
9466e1d5fcS猫头猫    RNTrackPlayer.addEventListener(Event.RemoteSeek, async evt => {
9566e1d5fcS猫头猫        TrackPlayer.seekTo(evt.position);
9666e1d5fcS猫头猫    });
97bf6e62f2S猫头猫};
98