Fixed player.htm 404 error.

Ylian Saint-Hilaire committed Feb 11, 2020 at 15:34 UTC 9a9c6dde65108e1ea90aad66bc9e1b592c81e31b
3 files changed +67 -4
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.4.9-a",
3 + "version": "0.4.9-b",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",
views/player.handlebars
+65 -2
@@ -60,6 +60,8 @@
60 <option value=0.25>4x Speed</option>
61 <option value=0.1>10x Speed</option>
62 </select>
63 + <input id="SeekBackwardButton" type=button value="<<" disabled="disabled" onclick="seekBackward()">
64 + <input id="SeekForwardButton" type=button value=">>" disabled="disabled" onclick="seekForward()">
65 </div>
66 </div>
67 </div>
@@ -91,6 +93,7 @@
93 var recFileEndTime = 0;
94 var recFileMetadata = null;
95 var recFileProtocol = 0;
96 + var recFileIndexBasePtr = null;
97 var agentDesktop = null;
98 var amtDesktop = null;
99 var playing = false;
@@ -138,6 +141,22 @@
141 }
142 }
143
144 + function readBlockAt(ptr, func) {
145 + var fr = new FileReader();
146 + fr.onload = function () {
147 + var type = ReadShort(this.result, 0);
148 + var flags = ReadShort(this.result, 2);
149 + var size = ReadInt(this.result, 4);
150 + var time = (ReadInt(this.result, 8) << 32) + ReadInt(this.result, 12);
151 + if ((ptr + 16 + size) > recFile.size) { func(-1); } else {
152 + var fr2 = new FileReader();
153 + fr2.onload = function () { func(type, flags, time, this.result); };
154 + fr2.readAsBinaryString(recFile.slice(ptr + 16, ptr + 16 + size));
155 + }
156 + };
157 + fr.readAsBinaryString(recFile.slice(ptr, ptr + 16));
158 + }
159 +
160 function readLastBlock(func) {
161 if (recFile.size < 32) { func(-1); } else {
162 var fr = new FileReader();
@@ -181,6 +200,12 @@
200 else if (p == 101) { p = "Intel&reg; AMT Redirection"; }
201 x += addInfoNoEsc("Protocol", p);
202 }
203 + if (recFileMetadata.indexInterval) {
204 + recFileIndexBasePtr = recFilePtr;
205 + x += addInfoNoEsc("Seeking", format("Indexed every {0} seconds", recFileMetadata.indexInterval));
206 + QE('SeekBackwardButton', true);
207 + QE('SeekForwardButton', true);
208 + }
209 QV('DeskParent', true);
210 QV('TermParent', false);
211 if (recFileMetadata.protocol == 1) {
@@ -235,8 +260,8 @@
260 }
261 }
262
238 - function processBlockEx(type, flags, time, data) {
239 - if (playing == false) return;
263 + function processBlockEx(type, flags, time, data, forced) {
264 + if ((playing == false) && (forced !== true)) return;
265 var flagBinary = (flags & 1) != 0, flagUser = (flags & 2) != 0;
266
267 // Update the clock
@@ -298,6 +323,8 @@
323 QE('PlayButton', false);
324 QE('PauseButton', false);
325 QE('RestartButton', false);
326 + QE('SeekBackwardButton', false);
327 + QE('SeekForwardButton', false);
328 QS('progressbar').width = '0px';
329 QH('timespan', '00:00:00');
330 QV('metadatadiv', true);
@@ -491,6 +518,42 @@
518 }
519 }
520
521 + function seekBackward() {
522 + //console.log('seekBackward');
523 + seek(5);
524 + }
525 +
526 + function seekForward() {
527 + //console.log('seekForward');
528 + seek(10);
529 + }
530 +
531 +
532 + var SeekIndex;
533 + var SeekIndexPtr;
534 + function seek(indexNumber) {
535 + //console.log('seek', indexNumber);
536 + if ((recFileMetadata.indexes == null) || (recFileMetadata.indexes[indexNumber] == null)) return null;
537 + restart();
538 + //pause();
539 + if (agentDesktop) { agentDesktop.Canvas.clearRect(0, 0, agentDesktop.CanvasId.width, agentDesktop.CanvasId.height); }
540 + SeekIndex = recFileMetadata.indexes[indexNumber];
541 + SeekIndexPtr = 3;
542 + var ptr = SeekIndex[0];
543 + var width = SeekIndex[1];
544 + var height = SeekIndex[2];
545 + seekFetchNext();
546 + }
547 +
548 + function seekFetchNext() {
549 + if (SeekIndex[SeekIndexPtr] == null) { return; }
550 + readBlockAt(recFileIndexBasePtr + SeekIndex[SeekIndexPtr], function (type, flags, time, data) {
551 + SeekIndexPtr++;
552 + processBlockEx(type, flags, time, data, true);
553 + seekFetchNext();
554 + });
555 + }
556 +
557 //
558 // POPUP DIALOG
559 //
webserver.js
+1 -1
@@ -2088,7 +2088,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2088 // Server the player page
2089 function handlePlayerRequest(req, res) {
2090 const domain = checkUserIpAddress(req, res);
2091 - if ((domain == null) || (domain.redirects == null)) { res.sendStatus(404); return; }
2091 + if (domain == null) { res.sendStatus(404); return; }
2092
2093 parent.debug('web', 'handlePlayerRequest: sending player');
2094 res.set({ 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' });