xref: /MusicFree/src/entry/bootstrap.ts (revision eb04a81272737b34f86d5187f8ae78c9ea14f410)
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      progressUpdateEventInterval: 2,
37      stopWithApp: false,
38      alwaysPauseOnInterruption: true,
39      capabilities: [
40        Capability.Play,
41        Capability.Pause,
42        Capability.SkipToNext,
43        Capability.SkipToPrevious,
44      ],
45      compactCapabilities: [
46        Capability.Play,
47        Capability.Pause,
48        Capability.SkipToNext,
49        Capability.SkipToPrevious,
50      ],
51      notificationCapabilities: [
52        Capability.Play,
53        Capability.Pause,
54        Capability.SkipToNext,
55        Capability.SkipToPrevious,
56      ]
57    })
58  ]);
59  await MusicQueue.setupMusicQueue();
60  await MusicSheet.initMusicSheet();
61
62  ErrorUtils.setGlobalHandler(error => ToastAndroid.show(`error: ${error?.message}`, ToastAndroid.LONG));
63   // 隐藏开屏动画
64  RNBootSplash.hide({fade: true});
65}
66