import React from "react"; import { GetAllServers } from "../Server/AllServers"; import { getServer } from "../Server/ServerHelpers"; 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 { ip: string; } function ServerAccordion(props: IServerProps): React.ReactElement { const server = getServer(props.ip); if (server === null) throw new Error("server 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 in GetAllServers()) { keys.push(key); } 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((ip: string) => ( ))} ); }