Added automatic clipboard.

Ylian Saint-Hilaire committed Jun 14, 2021 at 18:46 UTC d8fa07941d9b548171fea78685f8ca6cc26b1abe
2 files changed +21 -3
agents/meshcore.js
+1
@@ -1400,6 +1400,7 @@ function serverFetchFile() {
1400 if ((Object.keys(agentFileHttpRequests).length > 4) || (agentFileHttpPendingRequests.length == 0)) return; // No more than 4 active HTTPS requests to the server.
1401 var data = agentFileHttpPendingRequests.shift();
1402 if ((data.overwrite !== true) && fs.existsSync(data.path)) return; // Don't overwrite an existing file.
1403 + //try { fs.unlinkSync(data.path); } catch (ex) { } // Remove the old file.
1404 if (data.createFolder) { try { fs.mkdirSync(data.folder); } catch (ex) { } } // If requested, create the local folder.
1405 data.url = 'http' + getServerTargetUrlEx('*/').substring(2);
1406 var agentFileHttpOptions = http.parseUri(data.url);
views/default.handlebars
+20 -3
@@ -1254,6 +1254,7 @@
1254 <div id="d7otherset2" style="display:block">
1255 <label style="display:block"><input type="checkbox" id="d7deskSwapMouse" />Swap Mouse Buttons</label>
1256 <label style="display:block"><input type="checkbox" id="d7deskRemoteKeyMap" />Use Remote Keyboard Map</label>
1257 + <label style="display:block" id="d7deskAutoClipboardLabel"><input type="checkbox" id="d7deskAutoClipboard" />Automatic Clipboard</label>
1258 </div>
1259 </div>
1260 </div>
@@ -1376,6 +1377,7 @@
1377 var miscState = {};
1378 var checkedNodeids = {};
1379 var deskKeyboardShortcuts = [];
1380 + var deskLastClipboardSent = null;
1381
1382 // Console Message Display Timers
1383 var p11DeskConsoleMsgTimer = null;
@@ -7673,7 +7675,7 @@
7675 QE('connectbutton1h', hwonline);
7676 QV('deskFocusBtn', (desktop != null) && (desktop.contype == 2) && (deskState != 0) && (desktopsettings.showfocus));
7677 QE('DeskClip', deskState == 3);
7676 - QV('DeskClip', (inputAllowed) && (currentNode.agent) && (currentNode.agent.id != 11) && (currentNode.agent.id != 16) && ((desktop == null) || (desktop.contype != 2))); // Clipboard not supported on macOS
7678 + QV('DeskClip', (inputAllowed) && (currentNode.agent) && (currentNode.agent.id != 11) && (currentNode.agent.id != 16) && ((desktop == null) || (desktop.contype != 2)) && (desktopsettings.autoclipboard != true)); // Clipboard not supported on macOS
7679 QE('DeskESC', deskState == 3);
7680 QV('DeskESC', browserfullscreen && inputAllowed);
7681 QE('DeskType', deskState == 3);
@@ -7684,8 +7686,9 @@
7686 QV('DeskTimer', deskState == 3);
7687
7688 // Enable browser clipboard read if supported
7687 - QV('DeskClipboardOutButton', online && inputAllowed && (navigator.clipboard != null) && (navigator.clipboard.readText != null));
7688 - QV('DeskClipboardInButton', online && inputAllowed && (navigator.clipboard != null) && (navigator.clipboard.writeText != null));
7689 + QV('DeskClipboardOutButton', online && inputAllowed && (navigator.clipboard != null) && (navigator.clipboard.readText != null) && (desktopsettings.autoclipboard != true));
7690 + QV('d7deskAutoClipboardLabel', navigator.clipboard.readText != null);
7691 + QV('DeskClipboardInButton', online && inputAllowed && (navigator.clipboard != null) && (navigator.clipboard.writeText != null) && (desktopsettings.autoclipboard != true));
7692
7693 if (deskState != 3) { QV('DeskInputLockedButton', false); QV('DeskInputUnLockedButton', false); }
7694
@@ -7968,6 +7971,7 @@
7971 case 3:
7972 if (desktop && (desktop.serverIsRecording == true)) { QV('deskRecordIcon', true); }
7973 desktop.startTime = new Date();
7974 + deskLastClipboardSent = null;
7975 if (updateSessionTimer == null) { updateSessionTimer = setInterval(updateSessionTime, 1000); }
7976 break;
7977 default:
@@ -7987,6 +7991,16 @@
7991 if (desktop.latency && (desktop.latency.current >= 0)) { latencyStr = format('{0} ms, ', desktop.latency.current); }
7992 seconds = Math.floor((new Date() - desktop.startTime) / 1000);
7993 QH('DeskTimer', latencyStr + zeroPad(Math.floor(seconds / 3600), 2) + ':' + zeroPad((Math.floor(seconds / 60) % 60), 2) + ':' + zeroPad((seconds % 60), 2));
7994 + if ((desktopsettings.autoclipboard === true) && (navigator.clipboard != null) && (navigator.clipboard.readText != null)) {
7995 + try {
7996 + navigator.clipboard.readText().then(function(text) {
7997 + if ((text != null) && (deskLastClipboardSent != text)) {
7998 + meshserver.send({ action: 'msg', type: 'setclip', nodeid: currentNode._id, data: text });
7999 + deskLastClipboardSent = text;
8000 + }
8001 + }).catch(function(err) { });
8002 + } catch (ex) { console.log(ex); }
8003 + }
8004 } else {
8005 QH('DeskTimer', '');
8006 }
@@ -8020,9 +8034,11 @@
8034 desktopsettings.framerate = d7framelimiter.value;
8035 desktopsettings.swapmouse = d7deskSwapMouse.checked;
8036 desktopsettings.remotekeymap = d7deskRemoteKeyMap.checked;
8037 + desktopsettings.autoclipboard = d7deskAutoClipboard.checked;
8038 desktopsettings.localkeymap = d7localKeyMap.checked;
8039 localStorage.setItem('desktopsettings', JSON.stringify(desktopsettings));
8040 applyDesktopSettings();
8041 + updateDesktopButtons();
8042 if (desktop) {
8043 if (desktop.contype == 1) {
8044 desktop.m.SwapMouse = desktopsettings.swapmouse;
@@ -8051,6 +8067,7 @@
8067 if (desktopsettings.framerate) { d7framelimiter.value = desktopsettings.framerate; } else { d7framelimiter.value = 100; }
8068 if (desktopsettings.swapmouse != null) { d7deskSwapMouse.checked = desktopsettings.swapmouse; }
8069 if (desktopsettings.remotekeymap != null) { d7deskRemoteKeyMap.checked = desktopsettings.remotekeymap; }
8070 + if (desktopsettings.autoclipboard != null) { d7deskAutoClipboard.checked = desktopsettings.autoclipboard; }
8071 if (desktopsettings.localkeymap) { d7localKeyMap.checked = desktopsettings.localkeymap; }
8072 QV('deskFocusBtn', (desktop != null) && (desktop.contype == 2) && (desktop.state != 0) && (desktopsettings.showfocus));
8073 }