xref: /MusicFree/src/service/index.ts (revision ef60be1c70f066ecf4ce40dd183880baa09898a2)
1e22d5e4fS猫头猫import Config from '@/core/config';
248f4b873S猫头猫import {isSameMediaItem} from '@/utils/mediaItem';
3846ca2ccS猫头猫import musicIsPaused from '@/utils/musicIsPaused';
448f4b873S猫头猫import TrackPlayer, {Event, State, Track} from 'react-native-track-player';
5242960d3S猫头猫import MusicQueue from '../core/musicQueue';
6bf6e62f2S猫头猫
7846ca2ccS猫头猫let resumeState: State;
8bf6e62f2S猫头猫module.exports = async function () {
9bf6e62f2S猫头猫    TrackPlayer.addEventListener(Event.RemotePlay, () => MusicQueue.play());
10bf6e62f2S猫头猫    TrackPlayer.addEventListener(Event.RemotePause, () => MusicQueue.pause());
11846ca2ccS猫头猫    TrackPlayer.addEventListener(Event.RemotePrevious, () =>
12846ca2ccS猫头猫        MusicQueue.skipToPrevious(),
13846ca2ccS猫头猫    );
144060c00aS猫头猫    TrackPlayer.addEventListener(Event.RemoteNext, () =>
154060c00aS猫头猫        MusicQueue.skipToNext(),
164060c00aS猫头猫    );
17846ca2ccS猫头猫    TrackPlayer.addEventListener(
18846ca2ccS猫头猫        Event.RemoteDuck,
19e2257bd6S猫头猫        async ({paused, permanent}) => {
20e22d5e4fS猫头猫            if (Config.get('setting.basic.notInterrupt')) {
21caaa811bS猫头猫                return;
22caaa811bS猫头猫            }
23e2257bd6S猫头猫            if (permanent) {
24eb04a812S猫头猫                return MusicQueue.pause();
25eb04a812S猫头猫            }
26eb04a812S猫头猫            if (paused) {
27846ca2ccS猫头猫                resumeState = await TrackPlayer.getState();
28eb04a812S猫头猫                return MusicQueue.pause();
29846ca2ccS猫头猫            } else if (!musicIsPaused(resumeState)) {
30eb04a812S猫头猫                return MusicQueue.play();
31eb04a812S猫头猫            }
32846ca2ccS猫头猫        },
33846ca2ccS猫头猫    );
34846ca2ccS猫头猫    TrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => {
35e22d5e4fS猫头猫        Config.set('status.music.progress', evt.position);
36846ca2ccS猫头猫    });
37ef714860S猫头猫    /** 播放下一个 */
3848f4b873S猫头猫    let nextTrack: Track;
3948f4b873S猫头猫    // 事件有重复
40ef714860S猫头猫    TrackPlayer.addEventListener(Event.PlaybackTrackChanged, async evt => {
4148f4b873S猫头猫        // console.log('track变化', evt, await TrackPlayer.getQueue())
42ef714860S猫头猫        // 是track里的,不是playlist里的
43ef714860S猫头猫        if (
44ef714860S猫头猫            evt.nextTrack === 1 &&
45ef714860S猫头猫            !(await TrackPlayer.getTrack(evt.nextTrack))?.url
46ef714860S猫头猫        ) {
47ef714860S猫头猫            if (MusicQueue.getRepeatMode() === 'SINGLE') {
48ef714860S猫头猫                await MusicQueue.play(undefined, true);
49ef714860S猫头猫            } else {
5048f4b873S猫头猫                const queue = await TrackPlayer.getQueue();
5148f4b873S猫头猫                if (
52*ef60be1cS猫头猫                    isSameMediaItem(
53*ef60be1cS猫头猫                        nextTrack as unknown as ICommon.IMediaBase,
54*ef60be1cS猫头猫                        queue[1] as unknown as ICommon.IMediaBase,
55*ef60be1cS猫头猫                    ) &&
56*ef60be1cS猫头猫                    !isSameMediaItem(
57*ef60be1cS猫头猫                        queue[0] as unknown as ICommon.IMediaBase,
58*ef60be1cS猫头猫                        queue[1] as unknown as ICommon.IMediaBase,
59*ef60be1cS猫头猫                    )
6048f4b873S猫头猫                ) {
6148f4b873S猫头猫                    // 已经处理过了,忽略掉
6248f4b873S猫头猫                    console.log('多余的事件');
6348f4b873S猫头猫                    return;
6448f4b873S猫头猫                }
6548f4b873S猫头猫                // console.log('SKIP-PlaybackTrackChanged');
6648f4b873S猫头猫                nextTrack = queue[1];
67ef714860S猫头猫                await MusicQueue.skipToNext();
68ef714860S猫头猫            }
69ef714860S猫头猫        }
70ef714860S猫头猫    });
71bf6e62f2S猫头猫};
72