add encoding options to remote desktop (#6198)

Signed-off-by: si458 <simonsmith5521@gmail.com>

Simon Smith committed Jun 23, 2024 at 21:00 UTC 602eb3c64a6de93d569e74a5702a9cd0c704d10f
4 files changed +73 -19
translate/translate.json
+18 -2
@@ -28311,7 +28311,9 @@
28311 "zh-cht": "編碼",
28312 "hu": "Kódolás",
28313 "xloc": [
28314 - "default-mobile.handlebars->dialog->3->dialog7->d7amtkvm->3->1->0->1"
28314 + "default-mobile.handlebars->dialog->3->dialog7->d7amtkvm->3->1->0->1",
28315 + "default-mobile.handlebars->dialog->3->dialog7->d7meshkvm->3->1->6->1",
28316 + "default.handlebars->container->dialog->dialogBody->dialog7->d7meshkvm->9->1"
28317 ]
28318 },
28319 {
@@ -40112,6 +40114,13 @@
40114 "zh-cht": "物品",
40115 "hu": "Elem"
40116 },
40117 + {
40118 + "en": "JPEG",
40119 + "xloc": [
40120 + "default-mobile.handlebars->dialog->3->dialog7->d7meshkvm->3->1->6->3->d7encoding->1",
40121 + "default.handlebars->container->dialog->dialogBody->dialog7->d7meshkvm->9->d7encoding->1"
40122 + ]
40123 + },
40124 {
40125 "bs": "JSON",
40126 "cs": "JSON",
@@ -43882,7 +43891,7 @@
43891 "zh-cht": "斷開連接鎖定",
43892 "hu": "Zárolás a kapcsolat bontásakor",
43893 "xloc": [
43885 - "default-mobile.handlebars->dialog->3->dialog7->d7meshkvm->3->1->6->3->d7deskAutoLockLabel",
43894 + "default-mobile.handlebars->dialog->3->dialog7->d7meshkvm->3->1->8->3->d7deskAutoLockLabel",
43895 "default.handlebars->container->dialog->dialogBody->dialog7->d7meshkvm->d7desktopOtherSettings->d7otherset2->d7deskAutoLockLabel"
43896 ]
43897 },
@@ -80665,6 +80674,13 @@
80674 "default.handlebars->47->113"
80675 ]
80676 },
80677 + {
80678 + "en": "WEBP",
80679 + "xloc": [
80680 + "default-mobile.handlebars->dialog->3->dialog7->d7meshkvm->3->1->6->3->d7encoding->3",
80681 + "default.handlebars->container->dialog->dialogBody->dialog7->d7meshkvm->9->d7encoding->3"
80682 + ]
80683 + },
80684 {
80685 "bs": "WIN + Down",
80686 "cs": "VYHRAJTE + Dolů",
views/default-mobile.handlebars
+25 -5
@@ -1,4 +1,4 @@
1 -<!DOCTYPE html>
1 +<!DOCTYPE html>
2 <html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta charset="utf-8">
@@ -1226,6 +1226,17 @@
1226 </select>
1227 </td>
1228 </tr>
1229 + <tr>
1230 + <td>
1231 + Encoding
1232 + </td>
1233 + <td style="width:100px">
1234 + <select id="d7encoding" style="float:right;width:200px" dir="rtl">
1235 + <option value=1>JPEG</option>
1236 + <option selected=selected value=4>WEBP</option>
1237 + </select>
1238 + </td>
1239 + </tr>
1240 <tr>
1241 <td></td>
1242 <td>
@@ -1344,7 +1355,13 @@
1355
1356 // Check if WebP is supported
1357 var webpSupport = false;
1347 - check_webp_feature('lossy', function (f, x) { webpSupport = x; });
1358 + check_webp_feature('lossy', function (f, x) {
1359 + webpSupport = x;
1360 + if (!x) {
1361 + d7encoding.options[1].disabled = true;
1362 + d7encoding.value = 1;
1363 + }
1364 + });
1365
1366 function startup() {
1367 if ((features & 32) == 0) {
@@ -4424,7 +4441,7 @@
4441
4442 var desktop;
4443 var desktopNode;
4427 - var desktopsettings = { encoding: 2, showfocus: false, showmouse: true, showcad: true, quality: 40, scaling: 1024, framerate: 50, autolock: false };
4444 + var desktopsettings = { encoding: 2, showfocus: false, showmouse: true, showcad: true, quality: 40, scaling: 1024, framerate: 50, autolock: false, agentencoding: 4 };
4445 function setupDesktop() {
4446 // Setup the remote desktop
4447 if ((desktopNode != currentNode) && (desktop != null)) { desktop.Stop(); desktopNode = null; desktop = null; }
@@ -4548,7 +4565,7 @@
4565 p11clearConsoleMsg();
4566 }
4567 }
4551 - desktop.m.ImageType = webpSupport ? 4 : 1; // Send 4 if WebP is supported, otherwise send 1 for JPEG.
4568 + desktop.m.ImageType = desktopsettings.agentencoding; // Send 4 if WebP is supported, otherwise send 1 for JPEG.
4569 desktop.m.CompressionLevel = desktopsettings.quality; // Number from 1 to 100. 50 or less is best.
4570 desktop.m.ScalingLevel = desktopsettings.scaling;
4571 desktop.m.FrameRateTimer = desktopsettings.framerate;
@@ -4632,12 +4649,14 @@
4649 desktopsettings.scaling = d7bitmapscaling.value;
4650 desktopsettings.framerate = d7framelimiter.value;
4651 desktopsettings.autolock = d7deskAutoLock.checked;
4652 + desktopsettings.agentencoding = d7encoding.value;
4653 localStorage.setItem('desktopsettings', JSON.stringify(desktopsettings));
4654 applyDesktopSettings();
4655 if (desktop) {
4656 if (desktop.contype == 1) {
4639 - if (desktop.State != 0) { desktop.m.SendCompressionLevel(webpSupport ? 4 : 1, desktopsettings.quality, desktopsettings.scaling, desktopsettings.framerate); }
4657 + if (desktop.State != 0) { desktop.m.SendCompressionLevel(desktopsettings.agentencoding, desktopsettings.quality, desktopsettings.scaling, desktopsettings.framerate); }
4658 desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"autolock","value":' + desktopsettings.autolock + '}');
4659 + desktop.m.SendRefresh();
4660 }
4661 if (desktop.contype == 2) {
4662 if (desktop.State != 0) { desktop.Stop(); setTimeout(function () { connectDesktop(null, 2); }, 50); }
@@ -4651,6 +4670,7 @@
4670 QH('d7bitmapquality', r);
4671 d7desktopmode.value = desktopsettings.encoding;
4672 d7bitmapquality.value = 40; // Default value
4673 + if (desktopsettings.agentencoding) { d7encoding.value = desktopsettings.agentencoding; } else { desktopsettings.agentencoding = 4; }
4674 if (ops.indexOf(parseInt(desktopsettings.quality)) >= 0) { d7bitmapquality.value = desktopsettings.quality; }
4675 d7bitmapscaling.value = desktopsettings.scaling;
4676 if (desktopsettings.framerate) { d7framelimiter.value = desktopsettings.framerate; }
views/default.handlebars
+29 -11
@@ -1402,6 +1402,13 @@
1402 <option value=1000>Very slow</option>
1403 </select>
1404 </div>
1405 + <div>
1406 + <div>Encoding</div>
1407 + <select id="d7encoding" dir="rtl">
1408 + <option value=1>JPEG</option>
1409 + <option selected=selected value=4>WEBP</option>
1410 + </select>
1411 + </div>
1412 <div id="d7desktopOtherSettings">
1413 <div>Other Settings</div>
1414 <div id="d7otherset2" style="display:block">
@@ -1524,8 +1531,8 @@
1531 var stars = {}; // Devices that have been "stared" by the user.
1532 var nodeShortIdent = 0;
1533 var desktop;
1527 - var desktopsettings = { encoding: 2, showfocus: false, showmouse: true, showcad: true, quality: 40, scaling: 1024, framerate: 50, localkeymap: false, swapmouse: false, remotekeymap: false, autoclipboard: false, autolock: false };
1528 - var multidesktopsettings = { quality: 20, scaling: 128, framerate: 1000 };
1534 + var desktopsettings = { encoding: 2, showfocus: false, showmouse: true, showcad: true, quality: 40, scaling: 1024, framerate: 50, localkeymap: false, swapmouse: false, remotekeymap: false, autoclipboard: false, autolock: false, agentencoding: 4 };
1535 + var multidesktopsettings = { quality: 20, scaling: 128, framerate: 1000, agentencoding: 4 };
1536 var terminal;
1537 var files;
1538 var debugLevel = parseInt('{{{debuglevel}}}');
@@ -1600,7 +1607,13 @@
1607
1608 // Check if WebP is supported
1609 var webpSupport = false;
1603 - check_webp_feature('lossy', function (f, x) { webpSupport = x; });
1610 + check_webp_feature('lossy', function (f, x) {
1611 + webpSupport = x;
1612 + if (!x) {
1613 + d7encoding.options[1].disabled = true;
1614 + d7encoding.value = 1;
1615 + }
1616 + });
1617
1618 function startup() {
1619 if ((features & 32) == 0) {
@@ -4612,7 +4625,7 @@
4625 c.removeAttribute('onmousemove');
4626 Q('xkvmid_' + shortid).appendChild(c);
4627 QH('skvmid_' + shortid, ["Disconnected", "Connecting...", "Setup...", '', ''][((desktop.m.State == null)?desktop.m.state:desktop.m.State)]);
4615 - if (desktop.m.SendCompressionLevel) { desktop.m.SendCompressionLevel(webpSupport?4:1, multidesktopsettings.quality, multidesktopsettings.scaling, multidesktopsettings.framerate); }
4628 + if (desktop.m.SendCompressionLevel) { desktop.m.SendCompressionLevel(multidesktopsettings.agentencoding, multidesktopsettings.quality, multidesktopsettings.scaling, multidesktopsettings.framerate); }
4629 desktop.shortid = shortid;
4630 desktop.onStateChanged = onMultiDesktopStateChange;
4631 desktop.m.onRemoteInputLockChanged = null;
@@ -5147,6 +5160,7 @@
5160 QV('d7desktopOtherSettings', false);
5161 d7bitmapquality.value = multidesktopsettings.quality;
5162 d7bitmapscaling.value = multidesktopsettings.scaling;
5163 + d7encoding.value = multidesktopsettings.agentencoding;
5164 if (multidesktopsettings.framerate) { d7framelimiter.value = multidesktopsettings.framerate; } else { d7framelimiter.value = 100; }
5165 setDialogMode(7, "Remote Desktop Settings", 3, showMultiDesktopSettingsChanged);
5166 }
@@ -5155,9 +5169,10 @@
5169 multidesktopsettings.quality = d7bitmapquality.value;
5170 multidesktopsettings.scaling = d7bitmapscaling.value;
5171 multidesktopsettings.framerate = d7framelimiter.value;
5172 + multidesktopsettings.agentencoding = d7encoding.value;
5173 localStorage.setItem('multidesktopsettings', JSON.stringify(multidesktopsettings));
5174 // Make changes to all current connections
5160 - for (var i in multiDesktop) { multiDesktop[i].m.SendCompressionLevel(webpSupport?4:1, multidesktopsettings.quality, multidesktopsettings.scaling, multidesktopsettings.framerate); }
5175 + for (var i in multiDesktop) { multiDesktop[i].m.SendCompressionLevel(multidesktopsettings.agentencoding, multidesktopsettings.quality, multidesktopsettings.scaling, multidesktopsettings.framerate); }
5176 }
5177
5178 function connectMultiDesktop(node, contype) {
@@ -5189,7 +5204,7 @@
5204 desk.attemptWebRTC = attemptWebRTC;
5205 desk.onStateChanged = onMultiDesktopStateChange;
5206 //desk.onConsoleMessageChange = function () { console.log('CONSOLEMSG:', desk.consoleMessage); }
5192 - desk.m.ImageType = webpSupport?4:1; // Send 4 if WebP is supported, otherwise send 1 for JPEG.
5207 + desk.m.ImageType = multidesktopsettings.agentencoding; // Send 4 if WebP is supported, otherwise send 1 for JPEG.
5208 desk.m.CompressionLevel = multidesktopsettings.quality;
5209 desk.m.ScalingLevel = multidesktopsettings.scaling;
5210 if (multidesktopsettings.framerate) { desk.m.FrameRateTimer = multidesktopsettings.framerate; }
@@ -9004,7 +9019,7 @@
9019 c.removeAttribute('onclick');
9020 Q('DeskParent').appendChild(c);
9021 desktop = xdesk;
9007 - if (desktop.m.SendCompressionLevel) { desktop.m.SendCompressionLevel(webpSupport?4:1, desktopsettings.quality, desktopsettings.scaling, desktopsettings.framerate); }
9022 + if (desktop.m.SendCompressionLevel) { desktop.m.SendCompressionLevel(desktopsettings.agentencoding, desktopsettings.quality, desktopsettings.scaling, desktopsettings.framerate); }
9023 desktop.onStateChanged = onDesktopStateChange;
9024 desktop.onMetadataChange = function(metadata) { updateMetadata(desktop, 'deskmetadata'); }
9025 if ((features2 & 0x2000) != 0) desktop.m.stopInput = true;
@@ -9277,7 +9292,7 @@
9292 }
9293 }
9294 desktop.onMetadataChange = function(metadata) { updateMetadata(desktop, 'deskmetadata'); }
9280 - desktop.m.ImageType = webpSupport?4:1; // Send 4 if WebP is supported, otherwise send 1 for JPEG.
9295 + desktop.m.ImageType = desktopsettings.agentencoding; // Send 4 if WebP is supported, otherwise send 1 for JPEG.
9296 desktop.m.CompressionLevel = desktopsettings.quality; // Number from 1 to 100. 50 or less is best.
9297 desktop.m.ScalingLevel = desktopsettings.scaling;
9298 if (desktopsettings.framerate) { desktop.m.FrameRateTimer = desktopsettings.framerate; }
@@ -9583,6 +9598,7 @@
9598 desktopsettings.quality = d7bitmapquality.value;
9599 desktopsettings.scaling = d7bitmapscaling.value;
9600 desktopsettings.framerate = d7framelimiter.value;
9601 + desktopsettings.agentencoding = d7encoding.value;
9602 desktopsettings.swapmouse = d7deskSwapMouse.checked;
9603 desktopsettings.rmw = d7deskrmw.checked;
9604 desktopsettings.remotekeymap = d7deskRemoteKeyMap.checked;
@@ -9601,16 +9617,17 @@
9617 applyDesktopSettings();
9618 updateDesktopButtons();
9619 if (desktop) {
9604 - if (desktop.contype == 1) { // Intel AMT KVM
9620 + if (desktop.contype == 1) { // Mesh Agent Remote Desktop
9621 desktop.m.SwapMouse = desktopsettings.swapmouse;
9622 desktop.m.ReverseMouseWheel = desktopsettings.rmw;
9623 desktop.m.remoteKeyMap = desktopsettings.remotekeymap;
9624 if (desktop.State != 0) {
9609 - desktop.m.SendCompressionLevel(webpSupport?4:1, desktopsettings.quality, desktopsettings.scaling, desktopsettings.framerate);
9625 + desktop.m.SendCompressionLevel(desktopsettings.agentencoding, desktopsettings.quality, desktopsettings.scaling, desktopsettings.framerate);
9626 desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"autolock","value":' + desktopsettings.autolock + '}');
9627 + desktop.m.SendRefresh();
9628 }
9629 }
9613 - if (desktop.contype == 2) { // Mesh Agent Remote Desktop
9630 + if (desktop.contype == 2) { // Intel AMT KVM
9631 desktop.m.ReverseMouseWheel = desktopsettings.kvmrmw;
9632 if (desktopsettings.showfocus == false) { desktop.m.focusmode = 0; deskFocusBtn.value = "All Focus"; }
9633 if (desktop.State != 0) { desktop.Stop(); setTimeout(function () { connectDesktop(null, 2); }, 50); }
@@ -9629,6 +9646,7 @@
9646 d7desktopmode.value = desktopsettings.encoding;
9647 d7showfocus.checked = desktopsettings.showfocus;
9648 d7showcursor.checked = desktopsettings.showmouse;
9649 + if (desktopsettings.agentencoding) { d7encoding.value = desktopsettings.agentencoding; } else { desktopsettings.agentencoding = 4; }
9650 d7bitmapquality.value = 40; // Default value
9651 if (ops.indexOf(parseInt(desktopsettings.quality)) >= 0) { d7bitmapquality.value = desktopsettings.quality; }
9652 d7bitmapscaling.value = desktopsettings.scaling;
webserver.js
+1 -1
@@ -8758,7 +8758,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
8758
8759 // Filter the user web site and only output state that we need to keep
8760 const acceptableUserWebStateStrings = ['webPageStackMenu', 'notifications', 'deviceView', 'nightMode', 'webPageFullScreen', 'search', 'showRealNames', 'sort', 'deskAspectRatio', 'viewsize', 'DeskControl', 'uiMode', 'footerBar'];
8761 - const acceptableUserWebStateDesktopStrings = ['encoding', 'showfocus', 'showmouse', 'showcad', 'limitFrameRate', 'noMouseRotate', 'quality', 'scaling']
8761 + const acceptableUserWebStateDesktopStrings = ['encoding', 'showfocus', 'showmouse', 'showcad', 'limitFrameRate', 'noMouseRotate', 'quality', 'scaling', 'agentencoding']
8762 obj.filterUserWebState = function (state) {
8763 if (typeof state == 'string') { try { state = JSON.parse(state); } catch (ex) { return null; } }
8764 if ((state == null) || (typeof state != 'object')) { return null; }