import React, { useEffect, useState } from 'react'; import { Text, View } from 'react-native'; import RNFS from 'react-native-fs'; import TrackPlayer, { Capability, Track } from 'react-native-track-player'; import paths from '../paths'; async function mkdir(path: string): Promise { const exists = await RNFS.exists(path); if (exists) { const isDir = (await RNFS.stat(path)).isDirectory(); if (!isDir) { throw new Error(`path exists and is not a directory: ${path}`); } else { return; } } return await RNFS.mkdir(path); } const SplashPage: React.FC<{}> = ({ children }) => { const [ready, setReady] = useState(false); const minSplashTime = new Promise(resolve => setTimeout(resolve, 1)); const prepare = async () => { await mkdir(paths.imageCache); await mkdir(paths.songCache); await mkdir(paths.songs); await TrackPlayer.setupPlayer(); TrackPlayer.updateOptions({ capabilities: [ Capability.Play, Capability.Pause, Capability.Stop, Capability.SkipToNext, Capability.SkipToPrevious, ], compactCapabilities: [ Capability.Play, Capability.Pause, Capability.SkipToNext, Capability.SkipToPrevious, ], }); const castlevania: Track = { id: 'castlevania', url: 'http://www.vgmuseum.com/mrp/cv1/music/03.mp3', title: 'Stage 1: Castle Entrance', artist: 'Kinuyo Yamashita and S.Terishima', duration: 110, artwork: 'https://webgames.host/uploads/2017/03/castlevania-3-draculas-curse.jpg', genre: 'BGM', date: new Date(1989, 1).toISOString(), } await TrackPlayer.add([castlevania]); // TrackPlayer.play(); } const promise = Promise.all([ prepare(), minSplashTime, ]); useEffect(() => { promise.then(() => { setReady(true); }); }) if (!ready) { return Loading THE GOOD SHIT... } return ( {children} ); } export default SplashPage;