mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-10-09 15:58:34 +00:00
Merge main into terminal drag-drop zmodem
This commit is contained in:
+25
-2
@@ -2,6 +2,9 @@ import type { DropEntry } from "./sftpFileUtils";
|
||||
import { getPathForFile } from "./sftpFileUtils";
|
||||
import type { Host } from "../types";
|
||||
|
||||
const ZMODEM_RZ_MISSING_MARKER_PREFIX = "\x1b]1337;NetcattyRzMissing=";
|
||||
const ZMODEM_RZ_MISSING_MARKER_SUFFIX = "\x07";
|
||||
|
||||
export type ZmodemDragDropFile = {
|
||||
path?: string;
|
||||
name: string;
|
||||
@@ -18,12 +21,14 @@ export function supportsZmodemTerminalDragDrop(
|
||||
return (
|
||||
host.protocol === "ssh" ||
|
||||
host.protocol === "telnet" ||
|
||||
host.protocol === "mosh" ||
|
||||
host.protocol === "et" ||
|
||||
host.protocol === "serial"
|
||||
);
|
||||
}
|
||||
|
||||
export function supportsZmodemDragDropSftpFallback(host: Host): boolean {
|
||||
return host.protocol === "ssh" || Boolean(host.moshEnabled || host.etEnabled);
|
||||
}
|
||||
|
||||
export function getZmodemRemoteName(relativePath: string, fallbackName: string): string {
|
||||
const normalized = relativePath.replace(/\\/g, "/").replace(/^\/+/, "");
|
||||
if (!normalized) return fallbackName;
|
||||
@@ -31,6 +36,24 @@ export function getZmodemRemoteName(relativePath: string, fallbackName: string):
|
||||
return segments[segments.length - 1] || fallbackName;
|
||||
}
|
||||
|
||||
function quotePosixShellArg(value: string): string {
|
||||
return `'${value.replace(/'/g, "'\\''")}'`;
|
||||
}
|
||||
|
||||
export function createZmodemRzMissingToken(): string {
|
||||
return `rz-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
||||
}
|
||||
|
||||
export function buildZmodemDragDropUploadCommand(rzMissingToken: string): string {
|
||||
const markerFormat = `\\033]1337;NetcattyRzMissing=${rzMissingToken}\\007`;
|
||||
const script = `if command -v rz >/dev/null 2>&1; then exec rz; else printf ${quotePosixShellArg(markerFormat)}; fi`;
|
||||
return `sh -lc ${quotePosixShellArg(script)}\r`;
|
||||
}
|
||||
|
||||
export function containsZmodemRzMissingMarker(chunk: string, rzMissingToken: string): boolean {
|
||||
return chunk.includes(`${ZMODEM_RZ_MISSING_MARKER_PREFIX}${rzMissingToken}${ZMODEM_RZ_MISSING_MARKER_SUFFIX}`);
|
||||
}
|
||||
|
||||
export async function buildZmodemDragDropFiles(
|
||||
dropEntries: DropEntry[],
|
||||
): Promise<ZmodemDragDropFile[]> {
|
||||
|
||||
Reference in New Issue
Block a user