xref: /MusicFree/src/entry/bootstrap.ts (revision d84e0f28a520cbaefef752f0fc28e0378e11f72d)
1import MusicQueue from '@/common/musicQueue';
2import MusicSheet from '@/common/musicSheet';
3import {check, PERMISSIONS, request} from 'react-native-permissions';
4import TrackPlayer, { Capability } from 'react-native-track-player';
5import {pluginManager} from '../common/pluginManager';
6import 'react-native-get-random-values';
7import {ToastAndroid} from 'react-native';
8import { loadConfig } from '@/common/localConfigManager';
9import RNBootSplash from "react-native-bootsplash";
10
11/** app加载前执行 */
12export default async function () {
13  // 检查权限
14  const [readStoragePermission, writeStoragePermission] = await Promise.all([
15    check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE),
16    check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE),
17  ]);
18  if (
19    !(
20      readStoragePermission === 'granted' &&
21      writeStoragePermission === 'granted'
22    )
23  ) {
24    await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE);
25    await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
26  }
27
28  // 加载配置
29  await loadConfig();
30  // 加载插件
31
32  Promise.all([
33    await pluginManager.initPlugins(),
34    await TrackPlayer.setupPlayer(),
35    await TrackPlayer.updateOptions({
36      stopWithApp: false,
37      alwaysPauseOnInterruption: true,
38      capabilities: [
39        Capability.Play,
40        Capability.Pause,
41        Capability.SkipToNext,
42        Capability.SkipToPrevious,
43      ],
44      compactCapabilities: [
45        Capability.Play,
46        Capability.Pause,
47        Capability.SkipToNext,
48        Capability.SkipToPrevious,
49      ],
50      notificationCapabilities: [
51        Capability.Play,
52        Capability.Pause,
53        Capability.SkipToNext,
54        Capability.SkipToPrevious,
55      ]
56    })
57  ]);
58  // musicController.initMusicControl();
59  await MusicQueue.setupMusicQueue();
60  await MusicSheet.initMusicSheet();
61
62  ErrorUtils.setGlobalHandler(error => ToastAndroid.show(`error: ${error?.message}`, ToastAndroid.LONG));
63  RNBootSplash.hide({fade: true});
64  // 隐藏开屏动画
65}
66