mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2025-01-01 10:57:33 +01:00
112 lines
3.5 KiB
TypeScript
112 lines
3.5 KiB
TypeScript
import { ITerminal } from "../ITerminal";
|
|
import { IRouter } from "../../ui/Router";
|
|
import { IPlayer } from "../../PersonObjects/IPlayer";
|
|
import { BaseServer } from "../../Server/BaseServer";
|
|
import { GetServer } from "../../Server/AllServers";
|
|
import { isScriptFilename } from "../../Script/isScriptFilename";
|
|
|
|
export function scp(
|
|
terminal: ITerminal,
|
|
router: IRouter,
|
|
player: IPlayer,
|
|
server: BaseServer,
|
|
args: (string | number | boolean)[],
|
|
): void {
|
|
try {
|
|
if (args.length !== 2) {
|
|
terminal.error("Incorrect usage of scp command. Usage: scp [file] [destination hostname]");
|
|
return;
|
|
}
|
|
const scriptname = terminal.getFilepath(args[0] + "");
|
|
if (!scriptname.endsWith(".lit") && !isScriptFilename(scriptname) && !scriptname.endsWith(".txt")) {
|
|
terminal.error("scp only works for scripts, text files (.txt), and literature files (.lit)");
|
|
return;
|
|
}
|
|
|
|
const destServer = GetServer(args[1] + "");
|
|
if (destServer == null) {
|
|
terminal.error(`Invalid destination. ${args[1]} not found`);
|
|
return;
|
|
}
|
|
|
|
// Scp for lit files
|
|
if (scriptname.endsWith(".lit")) {
|
|
let found = false;
|
|
for (let i = 0; i < server.messages.length; ++i) {
|
|
if (server.messages[i] == scriptname) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!found) {
|
|
return terminal.error("No such file exists!");
|
|
}
|
|
|
|
for (let i = 0; i < destServer.messages.length; ++i) {
|
|
if (destServer.messages[i] === scriptname) {
|
|
terminal.print(scriptname + " copied over to " + destServer.hostname);
|
|
return; // Already exists
|
|
}
|
|
}
|
|
destServer.messages.push(scriptname);
|
|
return terminal.print(scriptname + " copied over to " + destServer.hostname);
|
|
}
|
|
|
|
// Scp for txt files
|
|
if (scriptname.endsWith(".txt")) {
|
|
let txtFile = null;
|
|
for (let i = 0; i < server.textFiles.length; ++i) {
|
|
if (server.textFiles[i].fn === scriptname) {
|
|
txtFile = server.textFiles[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (txtFile === null) {
|
|
return terminal.error("No such file exists!");
|
|
}
|
|
|
|
const tRes = destServer.writeToTextFile(txtFile.fn, txtFile.text);
|
|
if (!tRes.success) {
|
|
terminal.error("scp failed");
|
|
return;
|
|
}
|
|
if (tRes.overwritten) {
|
|
terminal.print(`WARNING: ${scriptname} already exists on ${destServer.hostname} and will be overwriten`);
|
|
terminal.print(`${scriptname} overwritten on ${destServer.hostname}`);
|
|
return;
|
|
}
|
|
terminal.print(`${scriptname} copied over to ${destServer.hostname}`);
|
|
return;
|
|
}
|
|
|
|
// Get the current script
|
|
let sourceScript = null;
|
|
for (let i = 0; i < server.scripts.length; ++i) {
|
|
if (scriptname == server.scripts[i].filename) {
|
|
sourceScript = server.scripts[i];
|
|
break;
|
|
}
|
|
}
|
|
if (sourceScript == null) {
|
|
terminal.error("scp() failed. No such script exists");
|
|
return;
|
|
}
|
|
|
|
const sRes = destServer.writeToScriptFile(scriptname, sourceScript.code);
|
|
if (!sRes.success) {
|
|
terminal.error(`scp failed`);
|
|
return;
|
|
}
|
|
if (sRes.overwritten) {
|
|
terminal.print(`WARNING: ${scriptname} already exists on ${destServer.hostname} and will be overwritten`);
|
|
terminal.print(`${scriptname} overwritten on ${destServer.hostname}`);
|
|
return;
|
|
}
|
|
terminal.print(`${scriptname} copied over to ${destServer.hostname}`);
|
|
} catch (e) {
|
|
terminal.error(e + "");
|
|
}
|
|
}
|