diff --git a/src/renderer/pages/version-viewer.component.tsx b/src/renderer/pages/version-viewer.component.tsx index ebf7a45d..51c33559 100644 --- a/src/renderer/pages/version-viewer.component.tsx +++ b/src/renderer/pages/version-viewer.component.tsx @@ -1,17 +1,98 @@ -import { useLocation } from 'react-router-dom' +import { BSVersion } from 'main/services/bs-version-manager.service'; +import { useEffect, useState } from 'react'; +import { useLocation } from 'react-router-dom'; +import { BsDownloaderService } from 'renderer/services/bs-downloader.service'; +import { map, Subscription } from 'rxjs'; +import BSLogo from '../../../assets/bs-logo.png'; +import BeatRunning from '../../../assets/beat-running.png'; +import { BSLauncherService, LaunchResult } from 'renderer/services/bs-launcher.service'; export function VersionViewer() { - const {state} = useLocation(); - console.log(state); + const {state} = useLocation() as {state: BSVersion}; + + const bsDownloaderService = BsDownloaderService.getInstance(); + const bsLauncherService = BSLauncherService.getInstance(); + + const [oculusMode, setOculusMode] = useState(false); + const [desktopMode, setDesktopMode] = useState(false); + const [debugMode, setDebugMode] = useState(false); + const [downloading, setDownloading] = useState(false); + const [downloadProgress, setDownloadProgress] = useState(0); + + const [subs, setSubs] = useState([] as Subscription[]); + + const [launchRes, setLaunchRes] = useState(null); + + useEffect(() => { + const downloadingSub = bsDownloaderService.currentBsVersionDownload$.subscribe(version => { + if(!version){ setDownloading(false); return } + if(state.BSVersion === version.BSVersion){ setDownloading(true); return } + setDownloading(false); + }); + setSubs([...subs, downloadingSub]); + + return () => { + subs.forEach(s => s.unsubscribe()); + setOculusMode(false); setDebugMode(false); setDesktopMode(false); + setDownloading(false); + setLaunchRes(null); + } + }, [state]); + + useEffect(() => { + if(!downloading){ return; } + const progressSub = bsDownloaderService.downloadProgress$.subscribe(progress => { + if(downloading){ setDownloadProgress(progress); } + }); + setSubs([...subs, progressSub]); + }, [downloading]) + + + + + const setMode = (mode: string, value: boolean) => { + if(mode === "debug"){ setDebugMode(value); } + if(mode === "oculus"){ setOculusMode(value); setDesktopMode(false); } + if(mode === "desktop"){ setDesktopMode(value); setOculusMode(false); } + } const launchBs = () => { - window.electron.ipcRenderer.sendMessage('bs-launch.steam'); //Temporary + bsLauncherService.launch(state, oculusMode, desktopMode, debugMode).then(res => setLaunchRes(res)); } return ( -
- +
+
+ +

{state.BSVersion}

+ { launchRes === LaunchResult.STEAM_NOT_RUNNING &&

STEAM NOT RUNNING

} + { launchRes === LaunchResult.EXE_NOT_FIND &&

EXECUTABLE NOT EXIST

} +
+
+ setMode("debug", e.target.checked)} checked={debugMode} type="checkbox" name="debug-mode" id="debug-mode" /> + +
+
+ setMode("oculus", e.target.checked)} checked={oculusMode} type="checkbox" name="oculus-mode" id="oculus-mode" /> + +
+
+ setMode("desktop", e.target.checked)} checked={desktopMode} type="checkbox" name="decktop-mode" id="decktop-mode" /> + +
+
+ {downloading && +
+ +
+
+
+ {`${downloadProgress}%`} +
+ } + { !downloading && } +
) }