'use client' import { useEffect, useState } from 'react' import axios from 'axios' import { app } from '@tauri-apps/api' import { invoke } from '@tauri-apps/api/core' import { openUrl } from '@tauri-apps/plugin-opener' import { arch, platform } from '@tauri-apps/plugin-os' import { BaseDirectory, create, exists, readTextFile, writeTextFile } from '@tauri-apps/plugin-fs' import './App.css' interface LauncherUpdate { id: string releaseDate: number downloadUrl: string sha512sum: string } export default function App () { const [state, setState] = useState('Loading...') useEffect(() => { ;(async () => { setState('Checking for updates...') let updaterLatestRequest let launcherLatestRequest let launcherUpdateData: LauncherUpdate | null try { updaterLatestRequest = await axios.get( 'https://games.lncvrt.xyz/api/launcher/loader/latest' ) launcherLatestRequest = await axios.get( 'https://games.lncvrt.xyz/api/launcher/latest' ) } catch { setState('Failed. Check internet connection.') return } if ( updaterLatestRequest.status !== 200 || launcherLatestRequest.status !== 200 ) { setState('Failed. Try again later.') return } const version = await app.getVersion() if (version !== updaterLatestRequest.data) { setState('Loader update required') return } const options = { baseDir: BaseDirectory.AppLocalData } let latest = false if (await exists('.version', options)) latest = (await readTextFile('.version', options)) == launcherLatestRequest.data if (!latest) { setState('Downloading new update...') try { const launcherUpdateRequest = await axios.get( `https://games.lncvrt.xyz/api/launcher/loader/update-data?platform=${platform()}&arch=${arch()}` ) launcherUpdateData = launcherUpdateRequest.data } catch { setState('Failed. Check internet connection.') return } if (!launcherUpdateData) { setState('Failed. Check internet connection.') return } const downloadResult = await invoke('download', { url: launcherUpdateData.downloadUrl, hash: launcherUpdateData.sha512sum }) if (downloadResult == '-1') { setState('Failed. Check internet connection.') return } else if (downloadResult == '-2') { setState('File integrity check failed.') return } else if (downloadResult == '-3') { setState('Failed to unzip update.') return } if (await exists('.version', options)) await create('.version', options) await writeTextFile('.version', launcherLatestRequest.data, options) } setState('Starting...') invoke('load') })() }, []) return ( <>

{state}

) }