'use client' import { useEffect } from 'react' import '@/app/Installs.css' import { invoke } from '@tauri-apps/api/core' import { useGlobal } from '@/app/GlobalProvider' import { useRouter, useSearchParams } from 'next/navigation' import { platform } from '@tauri-apps/plugin-os' import { faWarning } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { ask, message } from '@tauri-apps/plugin-dialog' import { BaseDirectory, exists, remove } from '@tauri-apps/plugin-fs' import { writeVersionsConfig } from '@/lib/BazookaManager' import { openFolder } from '@/lib/Util' export default function Installs () { const { showPopup, setShowPopup, setPopupMode, setFadeOut, setSelectedVersionList, downloadedVersionsConfig, normalConfig, setManagingVersion, getVersionInfo, getGameInfo, setSelectedGame, serverVersionList, category, setCategory, setDownloadedVersionsConfig, downloadVersions } = useGlobal() const params = useSearchParams() const router = useRouter() const id = Number(params.get('id') || 0) const game = serverVersionList?.games.find(g => g.id === id) useEffect(() => { if (!showPopup) return setSelectedVersionList([]) }, [normalConfig, setSelectedVersionList, showPopup]) if (!id || !game) return

Invalid game

const needsRevisionUpdate = ( lastRevision: number | undefined, version: string ) => { if (!lastRevision) return false return ( lastRevision > 0 && (downloadedVersionsConfig == undefined ? 0 : downloadedVersionsConfig?.list[version]) / 1000 <= lastRevision ) } return (

{game.name} Installs

{category == -1 && Object.entries(game.categoryNames) .sort(([a], [b]) => Number(b) - Number(a)) .filter(([key]) => { const count = Object.keys( downloadedVersionsConfig?.list ?? {} ).filter(v => { const info = getVersionInfo(v) if (!info) return false if ( platform() === 'linux' && info.wine && !normalConfig?.settings.useWineOnUnixWhenNeeded ) return false return info.game === id && info.category === Number(key) }).length return count >= 1 }) .map(([key, value]) => { return (
setCategory(Number(key))} >

{value}

e.stopPropagation()} >

{(() => { const count = Object.keys( downloadedVersionsConfig?.list ?? [] ).filter(v => { const info = getVersionInfo(v) if (!info) return false if ( platform() === 'linux' && info.wine && !normalConfig?.settings .useWineOnUnixWhenNeeded ) return false return ( info.game === id && info.category == Number(key) ) }).length ?? 0 return `${count} install${count === 1 ? '' : 's'}` })()}

) })} {Object.keys(downloadedVersionsConfig?.list ?? []).filter(v => { const info = getVersionInfo(v) if (!info) return false return info.game === id }).length != 0 ? ( Object.keys(downloadedVersionsConfig?.list ?? []) .sort((a, b) => { const infoA = getVersionInfo(a) const infoB = getVersionInfo(b) if (!infoA || !infoB) return -1 return infoB.place - infoA.place }) .filter(v => { const info = getVersionInfo(v) if (!info) return false if ( platform() === 'linux' && info.wine && !normalConfig?.settings.useWineOnUnixWhenNeeded ) return false return ( info.game === id && (category == -1 ? info.category == -1 : info.category == category) ) }) .map(entry => (
{ if ( needsRevisionUpdate( getVersionInfo(entry)?.lastRevision, entry ) ) { await message( "Can't launch game. Need revision update.", { title: 'Error launching game', kind: 'error' } ) return } const verInfo = getVersionInfo(entry) if (verInfo == undefined) return const gameInfo = getGameInfo(verInfo.game) if (gameInfo == undefined) return invoke('launch_game', { name: verInfo.id, executable: verInfo.executable, displayName: verInfo.displayName, useWine: !!( platform() === 'linux' && verInfo.wine && normalConfig?.settings.useWineOnUnixWhenNeeded ), wineCommand: normalConfig?.settings.wineOnUnixCommand }) }} onContextMenu={e => { e.preventDefault() setManagingVersion(entry) setPopupMode(2) setShowPopup(true) setFadeOut(false) }} >

{getVersionInfo(entry)?.displayName}{' '}

e.stopPropagation()} >

Installed{' '} {new Intl.DateTimeFormat(undefined).format( downloadedVersionsConfig?.list[entry] )}

e.stopPropagation()} hidden={ !needsRevisionUpdate( getVersionInfo(entry)?.lastRevision, entry ) } >

Needs revision update!

)) ) : (

No versions installed

)}
) }