1242960d3S猫头猫import MusicQueue from '@/core/musicQueue'; 2e14deecfS猫头猫import MusicSheet from '@/core/musicSheet'; 3bf6e62f2S猫头猫import {check, PERMISSIONS, request} from 'react-native-permissions'; 4bf6e62f2S猫头猫import TrackPlayer, {Capability} from 'react-native-track-player'; 5bf6e62f2S猫头猫import 'react-native-get-random-values'; 6e22d5e4fS猫头猫import Config from '@/core/config'; 70d39db21S猫头猫import RNBootSplash from 'react-native-bootsplash'; 8e14deecfS猫头猫import Download from '@/core/download'; 96780f402S猫头猫import pathConst from '@/constants/pathConst'; 10be0a3650S猫头猫import {checkAndCreateDir} from '@/utils/fileUtils'; 111e263108S猫头猫import {errorLog, trace} from '@/utils/log'; 1228bde18bS猫头猫import MediaMeta from '@/core/mediaMeta'; 133d6d339aS猫头猫import Cache from '@/core/cache'; 14927dbe93S猫头猫import PluginManager from '@/core/pluginManager'; 15ef714860S猫头猫import Network from '@/core/network'; 16*c30d30e1S猫头猫import {ImgAsset} from '@/constants/assetsConst'; 17bf6e62f2S猫头猫 188b88e961S猫头猫/** app加载前执行 198b88e961S猫头猫 * 1. 检查权限 208b88e961S猫头猫 * 2. 数据初始化 218b88e961S猫头猫 * 3. 228b88e961S猫头猫 */ 2394a1b1fcS猫头猫async function _bootstrap() { 24927dbe93S猫头猫 // 1. 检查权限 25bf6e62f2S猫头猫 const [readStoragePermission, writeStoragePermission] = await Promise.all([ 26bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), 27bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), 28bf6e62f2S猫头猫 ]); 29bf6e62f2S猫头猫 if ( 30bf6e62f2S猫头猫 !( 31bf6e62f2S猫头猫 readStoragePermission === 'granted' && 32bf6e62f2S猫头猫 writeStoragePermission === 'granted' 33bf6e62f2S猫头猫 ) 34bf6e62f2S猫头猫 ) { 35bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); 36bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); 37bf6e62f2S猫头猫 } 38bf6e62f2S猫头猫 39927dbe93S猫头猫 // 2. 数据初始化 406780f402S猫头猫 /** 初始化路径 */ 416780f402S猫头猫 await setupFolder(); 421e263108S猫头猫 trace('文件夹初始化完成'); 43bf6e62f2S猫头猫 // 加载配置 44ef714860S猫头猫 await Promise.all([ 45ef714860S猫头猫 Config.setup(), 46ef714860S猫头猫 MediaMeta.setup(), 47ef714860S猫头猫 MusicSheet.setup(), 48ef714860S猫头猫 Network.setup(), 49ef714860S猫头猫 ]); 501e263108S猫头猫 trace('配置初始化完成'); 51bf6e62f2S猫头猫 // 加载插件 5294a1b1fcS猫头猫 try { 53cfa0fc07S猫头猫 await TrackPlayer.setupPlayer({ 54b882a19dS猫头猫 maxCacheSize: 55b882a19dS猫头猫 Config.get('setting.basic.maxCacheSize') ?? 1024 * 1024 * 512, 56cfa0fc07S猫头猫 }); 5794a1b1fcS猫头猫 } catch (e: any) { 5894a1b1fcS猫头猫 if ( 594060c00aS猫头猫 e?.message !== 604060c00aS猫头猫 'The player has already been initialized via setupPlayer.' 6194a1b1fcS猫头猫 ) { 6294a1b1fcS猫头猫 throw e; 6394a1b1fcS猫头猫 } 6494a1b1fcS猫头猫 } 65bf6e62f2S猫头猫 await TrackPlayer.updateOptions({ 66*c30d30e1S猫头猫 icon: ImgAsset.logo, 67e2257bd6S猫头猫 progressUpdateEventInterval: 1, 68bf6e62f2S猫头猫 alwaysPauseOnInterruption: true, 69bf6e62f2S猫头猫 capabilities: [ 70bf6e62f2S猫头猫 Capability.Play, 71bf6e62f2S猫头猫 Capability.Pause, 72bf6e62f2S猫头猫 Capability.SkipToNext, 73bf6e62f2S猫头猫 Capability.SkipToPrevious, 74bf6e62f2S猫头猫 ], 75bf6e62f2S猫头猫 compactCapabilities: [ 76bf6e62f2S猫头猫 Capability.Play, 77bf6e62f2S猫头猫 Capability.Pause, 78bf6e62f2S猫头猫 Capability.SkipToNext, 79bf6e62f2S猫头猫 Capability.SkipToPrevious, 80bf6e62f2S猫头猫 ], 81bf6e62f2S猫头猫 notificationCapabilities: [ 82bf6e62f2S猫头猫 Capability.Play, 83bf6e62f2S猫头猫 Capability.Pause, 84bf6e62f2S猫头猫 Capability.SkipToNext, 85bf6e62f2S猫头猫 Capability.SkipToPrevious, 860d39db21S猫头猫 ], 870d39db21S猫头猫 }); 881e263108S猫头猫 trace('播放器初始化完成'); 894060c00aS猫头猫 await Cache.setup(); 901e263108S猫头猫 trace('缓存初始化完成'); 91e14deecfS猫头猫 await Download.setup(); 921e263108S猫头猫 trace('下载初始化完成'); 938b88e961S猫头猫 await PluginManager.setup(); 941e263108S猫头猫 trace('插件初始化完成'); 95927dbe93S猫头猫 await MusicQueue.setup(); 961e263108S猫头猫 trace('播放列表初始化完成'); 978b88e961S猫头猫 98c79c8a57S猫头猫 ErrorUtils.setGlobalHandler(error => { 99c79c8a57S猫头猫 errorLog('未捕获的错误', error); 100c79c8a57S猫头猫 }); 101bf6e62f2S猫头猫} 1026c6f45bdS猫头猫 1036c6f45bdS猫头猫/** 初始化 */ 1046c6f45bdS猫头猫async function setupFolder() { 1056780f402S猫头猫 await Promise.all([ 106be0a3650S猫头猫 checkAndCreateDir(pathConst.dataPath), 1077f771613S猫头猫 checkAndCreateDir(pathConst.logPath), 1087f771613S猫头猫 checkAndCreateDir(pathConst.cachePath), 109be0a3650S猫头猫 checkAndCreateDir(pathConst.storagePath), 110c79c8a57S猫头猫 checkAndCreateDir(pathConst.pluginPath), 11194a1b1fcS猫头猫 checkAndCreateDir(pathConst.lrcCachePath), 1126780f402S猫头猫 ]); 1136c6f45bdS猫头猫} 11494a1b1fcS猫头猫 11594a1b1fcS猫头猫export default async function () { 11694a1b1fcS猫头猫 try { 11794a1b1fcS猫头猫 await _bootstrap(); 11894a1b1fcS猫头猫 } catch (e) { 11994a1b1fcS猫头猫 errorLog('初始化出错', e); 12094a1b1fcS猫头猫 console.log(e); 12194a1b1fcS猫头猫 } 12294a1b1fcS猫头猫 // 隐藏开屏动画 12394a1b1fcS猫头猫 console.log('HIDE'); 12494a1b1fcS猫头猫 RNBootSplash.hide({fade: true}); 12594a1b1fcS猫头猫} 126