bitburner-src/src/Terminal/commands/cat.ts
Snarling 6290ce562a
Prevent errors thrown from terminal (#443)
At least from getFilepath function
2023-03-23 12:01:58 -04:00

60 lines
2.1 KiB
TypeScript

import { Terminal } from "../../Terminal";
import { BaseServer } from "../../Server/BaseServer";
import { MessageFilenames, showMessage } from "../../Message/MessageHelpers";
import { showLiterature } from "../../Literature/LiteratureHelpers";
import { dialogBoxCreate } from "../../ui/React/DialogBox";
import { checkEnum } from "../../utils/helpers/enum";
export function cat(args: (string | number | boolean)[], server: BaseServer): void {
if (args.length !== 1) {
Terminal.error("Incorrect usage of cat command. Usage: cat [file]");
return;
}
const relative_filename = args[0] + "";
const filename = Terminal.getFilepath(relative_filename);
if (!filename) return Terminal.error(`Invalid filename: ${relative_filename}`);
if (
!filename.endsWith(".msg") &&
!filename.endsWith(".lit") &&
!filename.endsWith(".txt") &&
!filename.endsWith(".script") &&
!filename.endsWith(".js")
) {
Terminal.error(
"Only .msg, .txt, .lit, .script and .js files are viewable with cat (filename must end with .msg, .txt, .lit, .script or .js)",
);
return;
}
if (filename.endsWith(".msg") || filename.endsWith(".lit")) {
for (let i = 0; i < server.messages.length; ++i) {
if (filename.endsWith(".lit") && server.messages[i] === filename) {
const file = server.messages[i];
if (file.endsWith(".msg")) throw new Error(".lit file should not be a .msg");
showLiterature(file);
return;
} else if (filename.endsWith(".msg")) {
const file = server.messages[i];
if (file !== filename) continue;
if (!checkEnum(MessageFilenames, file)) return;
showMessage(file);
return;
}
}
} else if (filename.endsWith(".txt")) {
const txt = Terminal.getTextFile(relative_filename);
if (txt != null) {
txt.show();
return;
}
} else if (filename.endsWith(".script") || filename.endsWith(".js")) {
const script = Terminal.getScript(relative_filename);
if (script != null) {
dialogBoxCreate(`${script.filename}\n\n${script.code}`);
return;
}
}
Terminal.error(`No such file ${filename}`);
}