From 3c2e0708ef6ff2bf28e0621b616b40538e432a12 Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Sun, 28 Dec 2025 17:40:29 -0700 Subject: [PATCH] Add remote desktop viewer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create viewer.html with canvas-based video display - Implement protobuf parsing for VideoFrame/RawFrame - Add zstd decompression using fzstd library - Convert BGRA to RGBA for canvas rendering - Add mouse event capture and encoding - Add keyboard event capture and encoding - Add Ctrl+Alt+Del special key support - Add fullscreen toggle - Update dashboard to open viewer in new window - Auto-reconnect on connection loss 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- server/static/dashboard.html | 10 +- server/static/viewer.html | 684 +++++++++++++++++++++++++++++++++++ 2 files changed, 690 insertions(+), 4 deletions(-) create mode 100644 server/static/viewer.html diff --git a/server/static/dashboard.html b/server/static/dashboard.html index 546287f..5164955 100644 --- a/server/static/dashboard.html +++ b/server/static/dashboard.html @@ -630,8 +630,9 @@ } function joinSession(sessionId) { - // TODO: Open viewer in new window - alert("Viewer not yet implemented.\\n\\nSession ID: " + sessionId + "\\n\\nWebSocket: wss://connect.azcomputerguru.com/ws/viewer?session_id=" + sessionId); + // Open viewer in new window + const viewerUrl = "/viewer.html?session_id=" + sessionId; + window.open(viewerUrl, "viewer_" + sessionId, "width=1280,height=800,menubar=no,toolbar=no,location=no,status=no"); } // Initial load and auto-refresh every 3 seconds @@ -716,8 +717,9 @@ } function connectToMachine(sessionId) { - // TODO: Open viewer in new window - alert("Viewer not yet implemented.\\n\\nSession ID: " + sessionId + "\\n\\nWebSocket: wss://connect.azcomputerguru.com/ws/viewer?session_id=" + sessionId); + // Open viewer in new window + const viewerUrl = "/viewer.html?session_id=" + sessionId; + window.open(viewerUrl, "viewer_" + sessionId, "width=1280,height=800,menubar=no,toolbar=no,location=no,status=no"); } async function disconnectMachine(sessionId, machineName) { diff --git a/server/static/viewer.html b/server/static/viewer.html new file mode 100644 index 0000000..2597698 --- /dev/null +++ b/server/static/viewer.html @@ -0,0 +1,684 @@ + + + + + + GuruConnect Viewer + + + + +
+ + + +
+
+
FPS: 0
+
Resolution: -
+
Frames: 0
+
+
Connecting...
+
+ +
+ +
+ +
+
+
+
Connecting to remote desktop...
+
+
+ + + +