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'; 14c79c8a57S猫头猫import {errorLog} from '@/common/logManager'; 152d0ec5c1S猫头猫import MediaMetaManager from '@/common/mediaMetaManager'; 16bf6e62f2S猫头猫 17bf6e62f2S猫头猫/** app加载前执行 */ 18*94a1b1fcS猫头猫async function _bootstrap() { 19bf6e62f2S猫头猫 // 检查权限 20bf6e62f2S猫头猫 const [readStoragePermission, writeStoragePermission] = await Promise.all([ 21bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), 22bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), 23bf6e62f2S猫头猫 ]); 24bf6e62f2S猫头猫 if ( 25bf6e62f2S猫头猫 !( 26bf6e62f2S猫头猫 readStoragePermission === 'granted' && 27bf6e62f2S猫头猫 writeStoragePermission === 'granted' 28bf6e62f2S猫头猫 ) 29bf6e62f2S猫头猫 ) { 30bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); 31bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); 32bf6e62f2S猫头猫 } 33bf6e62f2S猫头猫 346780f402S猫头猫 /** 初始化路径 */ 356780f402S猫头猫 await setupFolder(); 36bf6e62f2S猫头猫 // 加载配置 37bf6e62f2S猫头猫 await loadConfig(); 38bf6e62f2S猫头猫 // 加载插件 39*94a1b1fcS猫头猫 try { 40*94a1b1fcS猫头猫 await TrackPlayer.setupPlayer(); 41*94a1b1fcS猫头猫 } catch (e: any) { 42*94a1b1fcS猫头猫 if ( 43*94a1b1fcS猫头猫 e?.message !== 'The player has already been initialized via setupPlayer.' 44*94a1b1fcS猫头猫 ) { 45*94a1b1fcS猫头猫 throw e; 46*94a1b1fcS猫头猫 } 47*94a1b1fcS猫头猫 } 48bf6e62f2S猫头猫 49bf6e62f2S猫头猫 Promise.all([ 500d39db21S猫头猫 await pluginManager.setupPlugins(), 512d0ec5c1S猫头猫 await MediaMetaManager.setupMediaMeta(), 520d39db21S猫头猫 ]); 53bf6e62f2S猫头猫 await TrackPlayer.updateOptions({ 54*94a1b1fcS猫头猫 progressUpdateEventInterval: 0.4, 55bf6e62f2S猫头猫 stopWithApp: false, 56bf6e62f2S猫头猫 alwaysPauseOnInterruption: true, 57bf6e62f2S猫头猫 capabilities: [ 58bf6e62f2S猫头猫 Capability.Play, 59bf6e62f2S猫头猫 Capability.Pause, 60bf6e62f2S猫头猫 Capability.SkipToNext, 61bf6e62f2S猫头猫 Capability.SkipToPrevious, 62bf6e62f2S猫头猫 ], 63bf6e62f2S猫头猫 compactCapabilities: [ 64bf6e62f2S猫头猫 Capability.Play, 65bf6e62f2S猫头猫 Capability.Pause, 66bf6e62f2S猫头猫 Capability.SkipToNext, 67bf6e62f2S猫头猫 Capability.SkipToPrevious, 68bf6e62f2S猫头猫 ], 69bf6e62f2S猫头猫 notificationCapabilities: [ 70bf6e62f2S猫头猫 Capability.Play, 71bf6e62f2S猫头猫 Capability.Pause, 72bf6e62f2S猫头猫 Capability.SkipToNext, 73bf6e62f2S猫头猫 Capability.SkipToPrevious, 740d39db21S猫头猫 ], 750d39db21S猫头猫 }); 76bf6e62f2S猫头猫 await MusicQueue.setupMusicQueue(); 770d39db21S猫头猫 await MusicSheet.setupMusicSheet(); 78233cafa6S猫头猫 await DownloadManager.setupDownload(); 79bf6e62f2S猫头猫 80c79c8a57S猫头猫 ErrorUtils.setGlobalHandler(error => { 81c79c8a57S猫头猫 errorLog('未捕获的错误', error); 82c79c8a57S猫头猫 }); 83bf6e62f2S猫头猫} 846c6f45bdS猫头猫 856c6f45bdS猫头猫/** 初始化 */ 866c6f45bdS猫头猫async function setupFolder() { 876780f402S猫头猫 await Promise.all([ 88be0a3650S猫头猫 checkAndCreateDir(pathConst.dataPath), 897f771613S猫头猫 checkAndCreateDir(pathConst.logPath), 907f771613S猫头猫 checkAndCreateDir(pathConst.cachePath), 91be0a3650S猫头猫 checkAndCreateDir(pathConst.storagePath), 92c79c8a57S猫头猫 checkAndCreateDir(pathConst.pluginPath), 93*94a1b1fcS猫头猫 checkAndCreateDir(pathConst.lrcCachePath), 946780f402S猫头猫 ]); 956c6f45bdS猫头猫} 96*94a1b1fcS猫头猫 97*94a1b1fcS猫头猫export default async function () { 98*94a1b1fcS猫头猫 try { 99*94a1b1fcS猫头猫 await _bootstrap(); 100*94a1b1fcS猫头猫 } catch (e) { 101*94a1b1fcS猫头猫 errorLog('初始化出错', e); 102*94a1b1fcS猫头猫 console.log(e); 103*94a1b1fcS猫头猫 } 104*94a1b1fcS猫头猫 // 隐藏开屏动画 105*94a1b1fcS猫头猫 console.log('HIDE'); 106*94a1b1fcS猫头猫 RNBootSplash.hide({fade: true}); 107*94a1b1fcS猫头猫} 108