'use client' import { faArrowUpRightFromSquare, faCheck, faCode, faHardDrive, faShieldHalved, faWarning } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { useGlobal } from '@/app/GlobalProvider' import { invoke } from '@tauri-apps/api/core' import { useEffect, useState } from 'react' import prettyBytes from 'pretty-bytes' import { 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 VersionVersionPopup () { const { getGameInfo, getVersionInfo, managingVersion, downloadedVersionsConfig, viewingInfoFromDownloads, setManagingVersion, closePopup, setDownloadedVersionsConfig, setPopupMode, setSelectedVersionList, downloadVersions } = useGlobal() const [versionSize, setVersionSize] = useState(0) useEffect(() => { if (viewingInfoFromDownloads) return invoke('folder_size', { version: managingVersion }).then(size => { setVersionSize(Number(size)) }) }, [managingVersion, setVersionSize, viewingInfoFromDownloads]) if (!managingVersion || !downloadedVersionsConfig) return <> const versionInfo = getVersionInfo(managingVersion) const gameInfo = getGameInfo(versionInfo?.game) return ( <>

Viewing {versionInfo?.displayName}

{ if (!versionInfo) return await message(atob(versionInfo.changelog), { title: 'Changelog for ' + versionInfo.displayName, kind: 'info' }) }} hidden={!versionInfo?.changelog} >

View Changelog

openFolder(managingVersion)} title="Click to browse the game's files." hidden={viewingInfoFromDownloads} > Open Folder
{ closePopup() setDownloadedVersionsConfig(prev => { if (!prev) return prev const updatedList = Object.fromEntries( Object.entries(prev.list).filter(([k]) => k !== managingVersion) ) const updatedConfig = { ...prev, list: updatedList } writeVersionsConfig(updatedConfig) return updatedConfig }) if ( await exists('game/' + managingVersion, { baseDir: BaseDirectory.AppLocalData }) ) await remove('game/' + managingVersion, { baseDir: BaseDirectory.AppLocalData, recursive: true }) }} title='Click to uninstall this game. This will NOT remove any progress or any save files.' hidden={viewingInfoFromDownloads} > Uninstall
{ //change popup to downloads setManagingVersion(null) setPopupMode(1) //uninstall setDownloadedVersionsConfig(prev => { if (!prev) return prev const updatedList = Object.fromEntries( Object.entries(prev.list).filter(([k]) => k !== managingVersion) ) const updatedConfig = { ...prev, list: updatedList } writeVersionsConfig(updatedConfig) return updatedConfig }) if ( await exists('game/' + managingVersion, { baseDir: BaseDirectory.AppLocalData }) ) await remove('game/' + managingVersion, { baseDir: BaseDirectory.AppLocalData, recursive: true }) //reinstall setSelectedVersionList([managingVersion]) downloadVersions([managingVersion]) }} title="Click to reinstall this game. This will NOT remove any progress or any save files. This WILL uninstall any modifications to the game's executable files." hidden={viewingInfoFromDownloads} > Reinstall
) }