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® 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' });