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'; 86780f402S猫头猫import pathConst from '@/constants/pathConst'; 9be0a3650S猫头猫import {checkAndCreateDir} from '@/utils/fileUtils'; 101e263108S猫头猫import {errorLog, trace} from '@/utils/log'; 1128bde18bS猫头猫import MediaMeta from '@/core/mediaMeta'; 123d6d339aS猫头猫import Cache from '@/core/cache'; 13927dbe93S猫头猫import PluginManager from '@/core/pluginManager'; 14ef714860S猫头猫import Network from '@/core/network'; 15c30d30e1S猫头猫import {ImgAsset} from '@/constants/assetsConst'; 160e4173cdS猫头猫import LocalMusicSheet from '@/core/localMusicSheet'; 1795f955b7S猫头猫import {StatusBar} from 'react-native'; 18a27adc20S猫头猫import Theme from '@/core/theme'; 19*57277364S猫头猫import LyricManager from '@/core/lyricManager'; 20bf6e62f2S猫头猫 218b88e961S猫头猫/** app加载前执行 228b88e961S猫头猫 * 1. 检查权限 238b88e961S猫头猫 * 2. 数据初始化 248b88e961S猫头猫 * 3. 258b88e961S猫头猫 */ 2694a1b1fcS猫头猫async function _bootstrap() { 27927dbe93S猫头猫 // 1. 检查权限 28bf6e62f2S猫头猫 const [readStoragePermission, writeStoragePermission] = await Promise.all([ 29bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), 30bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), 31bf6e62f2S猫头猫 ]); 32bf6e62f2S猫头猫 if ( 33bf6e62f2S猫头猫 !( 34bf6e62f2S猫头猫 readStoragePermission === 'granted' && 35bf6e62f2S猫头猫 writeStoragePermission === 'granted' 36bf6e62f2S猫头猫 ) 37bf6e62f2S猫头猫 ) { 38bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); 39bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); 40bf6e62f2S猫头猫 } 41bf6e62f2S猫头猫 42927dbe93S猫头猫 // 2. 数据初始化 436780f402S猫头猫 /** 初始化路径 */ 446780f402S猫头猫 await setupFolder(); 451e263108S猫头猫 trace('文件夹初始化完成'); 46bf6e62f2S猫头猫 // 加载配置 47ef714860S猫头猫 await Promise.all([ 48ef714860S猫头猫 Config.setup(), 49ef714860S猫头猫 MediaMeta.setup(), 50ef714860S猫头猫 MusicSheet.setup(), 51ef714860S猫头猫 Network.setup(), 52ef714860S猫头猫 ]); 531e263108S猫头猫 trace('配置初始化完成'); 54bf6e62f2S猫头猫 // 加载插件 5594a1b1fcS猫头猫 try { 56cfa0fc07S猫头猫 await TrackPlayer.setupPlayer({ 57b882a19dS猫头猫 maxCacheSize: 58b882a19dS猫头猫 Config.get('setting.basic.maxCacheSize') ?? 1024 * 1024 * 512, 59cfa0fc07S猫头猫 }); 6094a1b1fcS猫头猫 } catch (e: any) { 6194a1b1fcS猫头猫 if ( 624060c00aS猫头猫 e?.message !== 634060c00aS猫头猫 'The player has already been initialized via setupPlayer.' 6494a1b1fcS猫头猫 ) { 6594a1b1fcS猫头猫 throw e; 6694a1b1fcS猫头猫 } 6794a1b1fcS猫头猫 } 68bf6e62f2S猫头猫 await TrackPlayer.updateOptions({ 692aa88193S猫头猫 icon: ImgAsset.logoTransparent, 7003051250S猫头猫 alwaysPauseOnInterruption: true, 71e2257bd6S猫头猫 progressUpdateEventInterval: 1, 72bf6e62f2S猫头猫 capabilities: [ 73bf6e62f2S猫头猫 Capability.Play, 74bf6e62f2S猫头猫 Capability.Pause, 75bf6e62f2S猫头猫 Capability.SkipToNext, 76bf6e62f2S猫头猫 Capability.SkipToPrevious, 77bf6e62f2S猫头猫 ], 78bf6e62f2S猫头猫 compactCapabilities: [ 79bf6e62f2S猫头猫 Capability.Play, 80bf6e62f2S猫头猫 Capability.Pause, 81bf6e62f2S猫头猫 Capability.SkipToNext, 82bf6e62f2S猫头猫 Capability.SkipToPrevious, 83bf6e62f2S猫头猫 ], 84bf6e62f2S猫头猫 notificationCapabilities: [ 85bf6e62f2S猫头猫 Capability.Play, 86bf6e62f2S猫头猫 Capability.Pause, 87bf6e62f2S猫头猫 Capability.SkipToNext, 88bf6e62f2S猫头猫 Capability.SkipToPrevious, 890d39db21S猫头猫 ], 900d39db21S猫头猫 }); 911e263108S猫头猫 trace('播放器初始化完成'); 924060c00aS猫头猫 await Cache.setup(); 931e263108S猫头猫 trace('缓存初始化完成'); 948b88e961S猫头猫 await PluginManager.setup(); 951e263108S猫头猫 trace('插件初始化完成'); 96927dbe93S猫头猫 await MusicQueue.setup(); 971e263108S猫头猫 trace('播放列表初始化完成'); 980e4173cdS猫头猫 await LocalMusicSheet.setup(); 990e4173cdS猫头猫 trace('本地音乐初始化完成'); 100a27adc20S猫头猫 Theme.setup(); 101a27adc20S猫头猫 trace('主题初始化完成'); 102*57277364S猫头猫 await LyricManager.setup(); 1038b88e961S猫头猫 10495f955b7S猫头猫 StatusBar.setBackgroundColor('transparent'); 10595f955b7S猫头猫 StatusBar.setTranslucent(true); 10634a18328S猫头猫 // Linking.addEventListener('url', (data) => { 10734a18328S猫头猫 // console.log(data); 10834a18328S猫头猫 // }) 10995f955b7S猫头猫 110c79c8a57S猫头猫 ErrorUtils.setGlobalHandler(error => { 111c79c8a57S猫头猫 errorLog('未捕获的错误', error); 112c79c8a57S猫头猫 }); 113bf6e62f2S猫头猫} 1146c6f45bdS猫头猫 1156c6f45bdS猫头猫/** 初始化 */ 1166c6f45bdS猫头猫async function setupFolder() { 1176780f402S猫头猫 await Promise.all([ 118be0a3650S猫头猫 checkAndCreateDir(pathConst.dataPath), 1197f771613S猫头猫 checkAndCreateDir(pathConst.logPath), 1207f771613S猫头猫 checkAndCreateDir(pathConst.cachePath), 121c79c8a57S猫头猫 checkAndCreateDir(pathConst.pluginPath), 12294a1b1fcS猫头猫 checkAndCreateDir(pathConst.lrcCachePath), 1230e4173cdS猫头猫 checkAndCreateDir(pathConst.downloadPath).then(() => { 1240e4173cdS猫头猫 checkAndCreateDir(pathConst.downloadMusicPath); 1250e4173cdS猫头猫 }), 1266780f402S猫头猫 ]); 1276c6f45bdS猫头猫} 12894a1b1fcS猫头猫 12994a1b1fcS猫头猫export default async function () { 13094a1b1fcS猫头猫 try { 13194a1b1fcS猫头猫 await _bootstrap(); 13294a1b1fcS猫头猫 } catch (e) { 13394a1b1fcS猫头猫 errorLog('初始化出错', e); 13494a1b1fcS猫头猫 console.log(e); 13594a1b1fcS猫头猫 } 13694a1b1fcS猫头猫 // 隐藏开屏动画 13794a1b1fcS猫头猫 console.log('HIDE'); 13894a1b1fcS猫头猫 RNBootSplash.hide({fade: true}); 13994a1b1fcS猫头猫} 140