xref: /MusicFree/src/service/index.ts (revision 8c55a6aa7a01f120247fcb5fabac8ec87ebb57cd)
1e22d5e4fS猫头猫import Config from '@/core/config';
2*8c55a6aaS猫头猫import {trace} from '@/utils/log';
348f4b873S猫头猫import {isSameMediaItem} from '@/utils/mediaItem';
4846ca2ccS猫头猫import musicIsPaused from '@/utils/musicIsPaused';
5*8c55a6aaS猫头猫import TrackPlayer, {Event, State} from 'react-native-track-player';
6242960d3S猫头猫import MusicQueue from '../core/musicQueue';
7bf6e62f2S猫头猫
8846ca2ccS猫头猫let resumeState: State;
9bf6e62f2S猫头猫module.exports = async function () {
10bf6e62f2S猫头猫    TrackPlayer.addEventListener(Event.RemotePlay, () => MusicQueue.play());
11bf6e62f2S猫头猫    TrackPlayer.addEventListener(Event.RemotePause, () => MusicQueue.pause());
12846ca2ccS猫头猫    TrackPlayer.addEventListener(Event.RemotePrevious, () =>
13846ca2ccS猫头猫        MusicQueue.skipToPrevious(),
14846ca2ccS猫头猫    );
154060c00aS猫头猫    TrackPlayer.addEventListener(Event.RemoteNext, () =>
164060c00aS猫头猫        MusicQueue.skipToNext(),
174060c00aS猫头猫    );
18846ca2ccS猫头猫    TrackPlayer.addEventListener(
19846ca2ccS猫头猫        Event.RemoteDuck,
20e2257bd6S猫头猫        async ({paused, permanent}) => {
21e22d5e4fS猫头猫            if (Config.get('setting.basic.notInterrupt')) {
22caaa811bS猫头猫                return;
23caaa811bS猫头猫            }
24e2257bd6S猫头猫            if (permanent) {
25eb04a812S猫头猫                return MusicQueue.pause();
26eb04a812S猫头猫            }
27eb04a812S猫头猫            if (paused) {
28846ca2ccS猫头猫                resumeState = await TrackPlayer.getState();
29eb04a812S猫头猫                return MusicQueue.pause();
30846ca2ccS猫头猫            } else if (!musicIsPaused(resumeState)) {
31eb04a812S猫头猫                return MusicQueue.play();
32eb04a812S猫头猫            }
33846ca2ccS猫头猫        },
34846ca2ccS猫头猫    );
35846ca2ccS猫头猫    TrackPlayer.addEventListener(Event.PlaybackProgressUpdated, evt => {
36e22d5e4fS猫头猫        Config.set('status.music.progress', evt.position);
37846ca2ccS猫头猫    });
38ef714860S猫头猫    /** 播放下一个 */
39ef714860S猫头猫    TrackPlayer.addEventListener(Event.PlaybackTrackChanged, async evt => {
4048f4b873S猫头猫        // console.log('track变化', evt, await TrackPlayer.getQueue())
41ef714860S猫头猫        // 是track里的,不是playlist里的
42*8c55a6aaS猫头猫        trace('PlaybackTrackChanged', {
43*8c55a6aaS猫头猫            evt,
44*8c55a6aaS猫头猫        });
45*8c55a6aaS猫头猫
46ef714860S猫头猫        if (
47ef714860S猫头猫            evt.nextTrack === 1 &&
48ef714860S猫头猫            !(await TrackPlayer.getTrack(evt.nextTrack))?.url
49ef714860S猫头猫        ) {
50ef714860S猫头猫            if (MusicQueue.getRepeatMode() === 'SINGLE') {
51ef714860S猫头猫                await MusicQueue.play(undefined, true);
52ef714860S猫头猫            } else {
5348f4b873S猫头猫                const queue = await TrackPlayer.getQueue();
54*8c55a6aaS猫头猫                // 要跳到的下一个就是当前的,并且队列里面有多首歌
5548f4b873S猫头猫                if (
56ef60be1cS猫头猫                    isSameMediaItem(
57ef60be1cS猫头猫                        queue[1] as unknown as ICommon.IMediaBase,
58*8c55a6aaS猫头猫                        MusicQueue.getCurrentMusicItem(),
59ef60be1cS猫头猫                    ) &&
60*8c55a6aaS猫头猫                    MusicQueue.getMusicQueue().length > 1
6148f4b873S猫头猫                ) {
6248f4b873S猫头猫                    console.log('多余的事件');
6348f4b873S猫头猫                    return;
6448f4b873S猫头猫                }
65*8c55a6aaS猫头猫                trace('PlaybackTrackChanged-shouldskip', {
66*8c55a6aaS猫头猫                    evt,
67*8c55a6aaS猫头猫                    queue,
68*8c55a6aaS猫头猫                });
69*8c55a6aaS猫头猫
70ef714860S猫头猫                await MusicQueue.skipToNext();
71ef714860S猫头猫            }
72ef714860S猫头猫        }
73ef714860S猫头猫    });
74bf6e62f2S猫头猫};
75