diff --git a/src/Diagnostic/FileDiagnosticPopup.tsx b/src/Diagnostic/FileDiagnosticPopup.tsx new file mode 100644 index 000000000..e83420f90 --- /dev/null +++ b/src/Diagnostic/FileDiagnosticPopup.tsx @@ -0,0 +1,68 @@ +import React from "react"; +import { AllServers } from "../Server/AllServers"; +import { Script } from "../Script/Script"; +import { TextFile } from "../TextFile"; +import { Accordion } from "../ui/React/Accordion"; +import { numeralWrapper } from "../ui/numeralFormat"; + +interface IServerProps { + ip: string; +} + +export function ServerAccordion(props: IServerProps): React.ReactElement { + const server = AllServers[props.ip]; + 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)} + panelContent={} + /> +} + +interface IProps {} + +export function FileDiagnosticPopup(props: IProps): React.ReactElement { + const ips: string[] = []; + for(const ip of Object.keys(AllServers)) { + ips.push(ip); + } + + 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. +

+ {ips.map((ip: string) => )} + ); +} \ No newline at end of file diff --git a/src/engine.jsx b/src/engine.jsx index 1d000ca04..a29d6fcde 100644 --- a/src/engine.jsx +++ b/src/engine.jsx @@ -102,6 +102,9 @@ import { ActiveScriptsRoot } from "./ui/ActiveScripts/Root"; import { initializeMainMenuHeaders } from "./ui/MainMenu/Headers"; import { initializeMainMenuLinks, MainMenuLinks } from "./ui/MainMenu/Links"; +import { FileDiagnosticPopup } from "./Diagnostic/FileDiagnosticPopup"; +import { createPopup } from "./ui/React/createPopup"; + import { dialogBoxCreate } from "../utils/DialogBox"; import { gameOptionsBoxClose, gameOptionsBoxOpen } from "../utils/GameOptions"; import { exceptionAlert } from "../utils/helpers/exceptionAlert"; @@ -1523,6 +1526,12 @@ const Engine = { gameOptionsBoxClose(); return false; }); + + // DEBUG File diagnostic + document.getElementById("debug-files").addEventListener("click", function() { + createPopup("debug-files-diagnostic-popup", FileDiagnosticPopup, {}); + return false; + }); }, start: function() { diff --git a/src/index.html b/src/index.html index d6ba29f37..ae82924bd 100644 --- a/src/index.html +++ b/src/index.html @@ -608,6 +608,14 @@ if (htmlWebpackPlugin.options.googleAnalytics.trackingId) { %> Perform a soft reset. Resets everything as if you had just purchased an Augmentation. +