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; }