mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-27 17:19:27 +01:00
...but it was broken for adding tracks before current so there's a PR open for that now and a local fix installed
82 lines
2.0 KiB
TypeScript
82 lines
2.0 KiB
TypeScript
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<void> {
|
|
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 <Text>Loading THE GOOD SHIT...</Text>
|
|
}
|
|
return (
|
|
<View style={{ flex: 1 }}>{children}</View>
|
|
);
|
|
}
|
|
|
|
export default SplashPage;
|