import React from "react"; import { GetServer, GetAllServers } from "../Server/AllServers"; import { Modal } from "../ui/React/Modal"; import { numeralWrapper } from "../ui/numeralFormat"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; import Paper from "@mui/material/Paper"; import Accordion from "@mui/material/Accordion"; import AccordionSummary from "@mui/material/AccordionSummary"; import AccordionDetails from "@mui/material/AccordionDetails"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; interface IServerProps { hostname: string; } function ServerAccordion(props: IServerProps): React.ReactElement { const server = GetServer(props.hostname); if (server === null) throw new Error(`server '${props.hostname}' should not be null`); let totalSize = 0; for (const f of server.scripts) { totalSize += f.code.length; } for (const f of server.textFiles) { totalSize += f.text.length; } if (totalSize === 0) { return <>; } interface File { name: string; size: number; } const files: File[] = []; for (const f of server.scripts) { files.push({ name: f.filename, size: f.code.length }); } for (const f of server.textFiles) { files.push({ name: f.fn, size: f.text.length }); } files.sort((a: File, b: File): number => b.size - a.size); return ( }> {server.hostname} ({numeralWrapper.formatBigNumber(totalSize)}b) Filename Size {files.map((file: File) => ( {file.name} {numeralWrapper.formatBigNumber(file.size)}b ))}
); } interface IProps { open: boolean; onClose: () => void; } export function FileDiagnosticModal(props: IProps): React.ReactElement { const keys: string[] = []; for (const key of GetAllServers()) { keys.push(key.hostname); } return ( <> Welcome to the file diagnostic! If your save file is really big it's likely because you have too many text/scripts. This tool can help you narrow down where they are. {keys.map((hostname: string) => ( ))} ); }