xref: /MusicFree/src/entry/bootstrap.ts (revision 7f7716138b584ea61557eb0caf3c49cad241bad9)
1bf6e62f2S猫头猫import MusicQueue from '@/common/musicQueue';
29872db12S猫头猫import MusicSheet from '@/common/musicSheetManager';
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';
76c6f45bdS猫头猫import {Platform, ToastAndroid} from 'react-native';
8bf6e62f2S猫头猫import {loadConfig} from '@/common/localConfigManager';
90d39db21S猫头猫import RNBootSplash from 'react-native-bootsplash';
106c6f45bdS猫头猫import RNFS, {exists, mkdir} from 'react-native-fs';
11233cafa6S猫头猫import DownloadManager from '@/common/downloadManager';
126780f402S猫头猫import pathConst from '@/constants/pathConst';
13be0a3650S猫头猫import { checkAndCreateDir } from '@/utils/fileUtils';
14bf6e62f2S猫头猫
15bf6e62f2S猫头猫/** app加载前执行 */
16bf6e62f2S猫头猫export default async function () {
17bf6e62f2S猫头猫  // 检查权限
18bf6e62f2S猫头猫  const [readStoragePermission, writeStoragePermission] = await Promise.all([
19bf6e62f2S猫头猫    check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE),
20bf6e62f2S猫头猫    check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE),
21bf6e62f2S猫头猫  ]);
22bf6e62f2S猫头猫  if (
23bf6e62f2S猫头猫    !(
24bf6e62f2S猫头猫      readStoragePermission === 'granted' &&
25bf6e62f2S猫头猫      writeStoragePermission === 'granted'
26bf6e62f2S猫头猫    )
27bf6e62f2S猫头猫  ) {
28bf6e62f2S猫头猫    await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE);
29bf6e62f2S猫头猫    await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
30bf6e62f2S猫头猫  }
31bf6e62f2S猫头猫
326780f402S猫头猫  /** 初始化路径 */
336780f402S猫头猫  await setupFolder();
34bf6e62f2S猫头猫  // 加载配置
35bf6e62f2S猫头猫  await loadConfig();
36bf6e62f2S猫头猫  // 加载插件
37bf6e62f2S猫头猫
38bf6e62f2S猫头猫  Promise.all([
390d39db21S猫头猫    await pluginManager.setupPlugins(),
40bf6e62f2S猫头猫    await TrackPlayer.setupPlayer(),
410d39db21S猫头猫  ]);
42bf6e62f2S猫头猫  await TrackPlayer.updateOptions({
43eb04a812S猫头猫    progressUpdateEventInterval: 2,
44bf6e62f2S猫头猫    stopWithApp: false,
45bf6e62f2S猫头猫    alwaysPauseOnInterruption: true,
46bf6e62f2S猫头猫    capabilities: [
47bf6e62f2S猫头猫      Capability.Play,
48bf6e62f2S猫头猫      Capability.Pause,
49bf6e62f2S猫头猫      Capability.SkipToNext,
50bf6e62f2S猫头猫      Capability.SkipToPrevious,
51bf6e62f2S猫头猫    ],
52bf6e62f2S猫头猫    compactCapabilities: [
53bf6e62f2S猫头猫      Capability.Play,
54bf6e62f2S猫头猫      Capability.Pause,
55bf6e62f2S猫头猫      Capability.SkipToNext,
56bf6e62f2S猫头猫      Capability.SkipToPrevious,
57bf6e62f2S猫头猫    ],
58bf6e62f2S猫头猫    notificationCapabilities: [
59bf6e62f2S猫头猫      Capability.Play,
60bf6e62f2S猫头猫      Capability.Pause,
61bf6e62f2S猫头猫      Capability.SkipToNext,
62bf6e62f2S猫头猫      Capability.SkipToPrevious,
630d39db21S猫头猫    ],
640d39db21S猫头猫  });
65bf6e62f2S猫头猫  await MusicQueue.setupMusicQueue();
660d39db21S猫头猫  await MusicSheet.setupMusicSheet();
67233cafa6S猫头猫  await DownloadManager.setupDownload();
68bf6e62f2S猫头猫
690d39db21S猫头猫  ErrorUtils.setGlobalHandler(error =>
700d39db21S猫头猫    ToastAndroid.show(`error: ${error?.message}`, ToastAndroid.LONG),
710d39db21S猫头猫  );
72bf6e62f2S猫头猫  // 隐藏开屏动画
73eb04a812S猫头猫  RNBootSplash.hide({fade: true});
74bf6e62f2S猫头猫}
756c6f45bdS猫头猫
76be0a3650S猫头猫
776c6f45bdS猫头猫/** 初始化 */
786c6f45bdS猫头猫async function setupFolder() {
796780f402S猫头猫  await Promise.all([
80be0a3650S猫头猫    checkAndCreateDir(pathConst.dataPath),
81*7f771613S猫头猫    checkAndCreateDir(pathConst.logPath),
82*7f771613S猫头猫    checkAndCreateDir(pathConst.cachePath),
83be0a3650S猫头猫    checkAndCreateDir(pathConst.storagePath),
84be0a3650S猫头猫    checkAndCreateDir(pathConst.pluginPath)
856780f402S猫头猫  ]);
866c6f45bdS猫头猫}
87