bitburner-src/src/Terminal/commands/scp.ts

74 lines
2.7 KiB
TypeScript
Raw Normal View History

2022-09-06 15:07:12 +02:00
import { Terminal } from "../../Terminal";
2021-09-16 01:50:44 +02:00
import { BaseServer } from "../../Server/BaseServer";
2021-10-07 22:56:01 +02:00
import { GetServer } from "../../Server/AllServers";
2021-09-24 22:34:21 +02:00
import { isScriptFilename } from "../../Script/isScriptFilename";
2021-09-16 01:50:44 +02:00
2022-09-06 15:07:12 +02:00
export function scp(args: (string | number | boolean)[], server: BaseServer): void {
2021-09-16 01:50:44 +02:00
try {
if (args.length !== 2) {
2022-09-06 15:07:12 +02:00
Terminal.error("Incorrect usage of scp command. Usage: scp [file] [destination hostname]");
2021-09-16 01:50:44 +02:00
return;
}
2022-09-06 15:07:12 +02:00
const scriptname = Terminal.getFilepath(args[0] + "");
2021-09-16 01:50:44 +02:00
if (!scriptname.endsWith(".lit") && !isScriptFilename(scriptname) && !scriptname.endsWith(".txt")) {
2022-09-06 15:07:12 +02:00
Terminal.error("scp only works for scripts, text files (.txt), and literature files (.lit)");
2021-09-16 01:50:44 +02:00
return;
}
2021-10-07 22:56:01 +02:00
const destServer = GetServer(args[1] + "");
2021-09-16 01:50:44 +02:00
if (destServer == null) {
2022-09-06 15:07:12 +02:00
Terminal.error(`Invalid destination. ${args[1]} not found`);
2021-09-16 01:50:44 +02:00
return;
}
// Scp for lit files
if (scriptname.endsWith(".lit")) {
2022-09-06 15:07:12 +02:00
if (!server.messages.includes(scriptname)) return Terminal.error("No such file exists!");
2021-09-16 01:50:44 +02:00
2022-09-06 15:07:12 +02:00
const onDestServer = destServer.messages.includes(scriptname);
if (!onDestServer) destServer.messages.push(scriptname);
return Terminal.print(`${scriptname} ${onDestServer ? "was already on" : "copied to"} ${destServer.hostname}`);
2021-09-16 01:50:44 +02:00
}
// Scp for txt files
if (scriptname.endsWith(".txt")) {
2022-09-06 15:07:12 +02:00
const txtFile = server.textFiles.find((txtFile) => txtFile.fn === scriptname);
if (!txtFile) return Terminal.error("No such file exists!");
2021-09-16 01:50:44 +02:00
const tRes = destServer.writeToTextFile(txtFile.fn, txtFile.text);
if (!tRes.success) {
2022-09-06 15:07:12 +02:00
Terminal.error("scp failed");
2021-09-16 01:50:44 +02:00
return;
}
if (tRes.overwritten) {
2022-10-09 07:25:31 +02:00
Terminal.print(`WARNING: ${scriptname} already exists on ${destServer.hostname} and will be overwritten`);
2022-09-06 15:07:12 +02:00
Terminal.print(`${scriptname} overwritten on ${destServer.hostname}`);
2021-09-16 01:50:44 +02:00
return;
}
2022-09-06 15:07:12 +02:00
Terminal.print(`${scriptname} copied over to ${destServer.hostname}`);
2021-09-16 01:50:44 +02:00
return;
}
// Get the current script
2022-09-06 15:07:12 +02:00
const sourceScript = server.scripts.find((script) => script.filename === scriptname);
if (!sourceScript) {
Terminal.error("scp failed. No such script exists");
2021-09-16 01:50:44 +02:00
return;
}
2022-08-29 08:41:17 +02:00
const sRes = destServer.writeToScriptFile(scriptname, sourceScript.code);
2021-09-16 01:50:44 +02:00
if (!sRes.success) {
2022-09-06 15:07:12 +02:00
Terminal.error(`scp failed`);
2021-09-16 01:50:44 +02:00
return;
}
if (sRes.overwritten) {
2022-09-06 15:07:12 +02:00
Terminal.print(`WARNING: ${scriptname} already exists on ${destServer.hostname} and will be overwritten`);
Terminal.print(`${scriptname} overwritten on ${destServer.hostname}`);
2021-09-16 01:50:44 +02:00
return;
}
2022-09-06 15:07:12 +02:00
Terminal.print(`${scriptname} copied over to ${destServer.hostname}`);
2021-09-16 01:50:44 +02:00
} catch (e) {
2022-09-06 15:07:12 +02:00
Terminal.error(e + "");
2021-09-16 01:50:44 +02:00
}
}