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'; 12*6780f402S猫头猫import pathConst from '@/constants/pathConst'; 13bf6e62f2S猫头猫 14bf6e62f2S猫头猫/** app加载前执行 */ 15bf6e62f2S猫头猫export default async function () { 16bf6e62f2S猫头猫 // 检查权限 17bf6e62f2S猫头猫 const [readStoragePermission, writeStoragePermission] = await Promise.all([ 18bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), 19bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), 20bf6e62f2S猫头猫 ]); 21bf6e62f2S猫头猫 if ( 22bf6e62f2S猫头猫 !( 23bf6e62f2S猫头猫 readStoragePermission === 'granted' && 24bf6e62f2S猫头猫 writeStoragePermission === 'granted' 25bf6e62f2S猫头猫 ) 26bf6e62f2S猫头猫 ) { 27bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); 28bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); 29bf6e62f2S猫头猫 } 30bf6e62f2S猫头猫 31*6780f402S猫头猫 /** 初始化路径 */ 32*6780f402S猫头猫 await setupFolder(); 33bf6e62f2S猫头猫 // 加载配置 34bf6e62f2S猫头猫 await loadConfig(); 35bf6e62f2S猫头猫 // 加载插件 36bf6e62f2S猫头猫 37bf6e62f2S猫头猫 Promise.all([ 380d39db21S猫头猫 await pluginManager.setupPlugins(), 39bf6e62f2S猫头猫 await TrackPlayer.setupPlayer(), 400d39db21S猫头猫 ]); 41bf6e62f2S猫头猫 await TrackPlayer.updateOptions({ 42eb04a812S猫头猫 progressUpdateEventInterval: 2, 43bf6e62f2S猫头猫 stopWithApp: false, 44bf6e62f2S猫头猫 alwaysPauseOnInterruption: true, 45bf6e62f2S猫头猫 capabilities: [ 46bf6e62f2S猫头猫 Capability.Play, 47bf6e62f2S猫头猫 Capability.Pause, 48bf6e62f2S猫头猫 Capability.SkipToNext, 49bf6e62f2S猫头猫 Capability.SkipToPrevious, 50bf6e62f2S猫头猫 ], 51bf6e62f2S猫头猫 compactCapabilities: [ 52bf6e62f2S猫头猫 Capability.Play, 53bf6e62f2S猫头猫 Capability.Pause, 54bf6e62f2S猫头猫 Capability.SkipToNext, 55bf6e62f2S猫头猫 Capability.SkipToPrevious, 56bf6e62f2S猫头猫 ], 57bf6e62f2S猫头猫 notificationCapabilities: [ 58bf6e62f2S猫头猫 Capability.Play, 59bf6e62f2S猫头猫 Capability.Pause, 60bf6e62f2S猫头猫 Capability.SkipToNext, 61bf6e62f2S猫头猫 Capability.SkipToPrevious, 620d39db21S猫头猫 ], 630d39db21S猫头猫 }); 64bf6e62f2S猫头猫 await MusicQueue.setupMusicQueue(); 650d39db21S猫头猫 await MusicSheet.setupMusicSheet(); 66233cafa6S猫头猫 await DownloadManager.setupDownload(); 67bf6e62f2S猫头猫 680d39db21S猫头猫 ErrorUtils.setGlobalHandler(error => 690d39db21S猫头猫 ToastAndroid.show(`error: ${error?.message}`, ToastAndroid.LONG), 700d39db21S猫头猫 ); 71bf6e62f2S猫头猫 // 隐藏开屏动画 72eb04a812S猫头猫 RNBootSplash.hide({fade: true}); 73bf6e62f2S猫头猫} 746c6f45bdS猫头猫 756c6f45bdS猫头猫async function checkAndCreate(path: string) { 76*6780f402S猫头猫 const filePath = path; 776c6f45bdS猫头猫 if (!(await exists(filePath))) { 786c6f45bdS猫头猫 await mkdir(filePath); 796c6f45bdS猫头猫 } 806c6f45bdS猫头猫} 816c6f45bdS猫头猫/** 初始化 */ 826c6f45bdS猫头猫async function setupFolder() { 83*6780f402S猫头猫 await Promise.all([ 84*6780f402S猫头猫 checkAndCreate(pathConst.dataPath), 85*6780f402S猫头猫 checkAndCreate(pathConst.storagePath), 86*6780f402S猫头猫 checkAndCreate(pathConst.pluginPath) 87*6780f402S猫头猫 ]); 886c6f45bdS猫头猫} 89