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