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