diff --git a/web/skins/classic/views/js/montagereview.js b/web/skins/classic/views/js/montagereview.js index 403ca2982..7cc1c239b 100644 --- a/web/skins/classic/views/js/montagereview.js +++ b/web/skins/classic/views/js/montagereview.js @@ -176,7 +176,7 @@ function getFrame(monId, time, last_Frame) { if (!Event.FramesById) { console.log('No FramesById for event ', Event.Id); - load_Frames(Event).then(function() { + load_Frames([Event]).then(function() { if (!Event.FramesById) { console.log("No FramesById after load_Frames!", Event); } @@ -223,30 +223,30 @@ function getFrame(monId, time, last_Frame) { // time is seconds since epoch function getImageSource(monId, time) { - if ( liveMode == 1 ) { - var new_url = monitorImageObject[monId].src.replace( + if (liveMode == 1) { + let new_url = monitorImageObject[monId].src.replace( /rand=\d+/i, 'rand='+Math.floor(Math.random() * 1000000) ); - if ( auth_hash ) { + if (auth_hash) { // update auth hash new_url = new_url.replace(/auth=[a-z0-9]+/i, 'auth='+auth_hash); } return new_url; } - var frame_id; + let frame_id; - var Frame = getFrame(monId, time); - if ( Frame ) { + const Frame = getFrame(monId, time); + if (Frame) { + const e = events[Frame.EventId]; // Adjust for bulk frames - if ( Frame.NextFrameId ) { - var e = events[Frame.EventId]; - var NextFrame = e.FramesById[Frame.NextFrameId]; - if ( !NextFrame ) { + if (Frame.NextFrameId) { + const NextFrame = e.FramesById[Frame.NextFrameId]; + if (!NextFrame) { console.log("No next frame for " + Frame.NextFrameId); - } else if ( NextFrame.Type == 'Bulk' ) { + } else if (NextFrame.Type == 'Bulk') { // There is time between this frame and a bulk frame - var duration = Frame.NextTimeStampSecs - Frame.TimeStampSecs; + const duration = Frame.NextTimeStampSecs - Frame.TimeStampSecs; frame_id = Frame.FrameId + parseInt( (NextFrame.FrameId-Frame.FrameId) * ( time-Frame.TimeStampSecs )/duration ); //console.log("Have NextFrame: duration: " + duration + " frame_id = " + frame_id + " from " + NextFrame.FrameId + ' - ' + Frame.FrameId + " time: " + (time-Frame.TimeStampSecs) ); } else { @@ -255,24 +255,18 @@ function getImageSource(monId, time) { } else { frame_id = Frame.FrameId; } - Event = events[Frame.EventId]; - var storage = Storage[Event.StorageId]; - if ( !storage ) { - // Storage[0] is guaranteed to exist as we make sure it is there in montagereview.js.php - console.log("No storage area for id " + Event.StorageId); - storage = Storage[0]; - } + // Storage[0] is guaranteed to exist as we make sure it is there in montagereview.js.php + const storage = Storage[e.StorageId] ? Storage[e.StorageId] : Storage[0]; // monitorServerId may be 0, which gives us the default Server entry - var server = storage.ServerId ? Servers[storage.ServerId] : Servers[monitorServerId[monId]]; + const server = storage.ServerId ? Servers[storage.ServerId] : Servers[monitorServerId[monId]]; return server.PathToIndex + '?view=image&eid=' + Frame.EventId + '&fid='+frame_id + "&width=" + monitorCanvasObj[monId].width + "&height=" + monitorCanvasObj[monId].height; } // end found Frame return ''; - //return "no data"; -} +} // end function getImageSource // callback when loading an image. Will load itself to the canvas, or draw no data function imagedone( obj, monId, success ) { @@ -536,7 +530,7 @@ function drawGraph() { var x1=parseInt( (Frame.TimeStampSecs - minTimeSecs) / rangeTimeSecs * cWidth); // round low end down var x2=parseInt( (Frame.TimeStampSecs - minTimeSecs) / rangeTimeSecs * cWidth + 0.5 ); // round up if (x2-x1 < 2) x2=x1+2; // So it is visible make them all at least this number of seconds wide - ctx.fillStyle=monitorColour[Event.MonitorId]; + //ctx.fillStyle=monitorColour[Event.MonitorId]; ctx.globalAlpha = 0.4 + 0.6 * (1 - Frame.Score/maxScore); // Background is scaled but even lowest is twice as dark as the background ctx.fillRect(x1, monitorIndex[Event.MonitorId]*rowHeight, x2-x1, rowHeight); } // end foreach frame @@ -1093,11 +1087,8 @@ function initPage() { }); }); - - if ( !liveMode ) { - for (const event_id in events) { - load_Frames(events[event_id]); - } + if (!liveMode) { + load_Frames(events); canvas = document.getElementById('timeline'); canvas.addEventListener('mousemove', mmove, false); @@ -1219,49 +1210,67 @@ window.addEventListener("resize", redrawScreen, {passive: true}); // Kick everything off window.addEventListener('DOMContentLoaded', initPage); -function load_Frames(zm_event) { +function load_Frames(zm_events) { + console.log(zm_events); + return new Promise(function(resolve, reject) { - $j.ajax(Servers[serverId].urlToApi()+'/frames/index/EventId:'+zm_event.Id+'.json?'+auth_relay, - { - timeout: 0, - success: function(data) { - if (data.frames.length) { - /* - const zm_event = events[data.frames[0].Frame.EventId]; - if (!zm_event) { - console.error("No event object found for " + data.frames[0].Frame.EventId); - reject(Error("There was an error")); - return; + let url = Servers[serverId].urlToApi()+'/frames/index'; + console.log(Array.isArray(zm_events), zm_events.length, typeof(zm_events)); + + let query = ''; + let ids = Object.keys(zm_events); + + while (ids.length) { + const event_id = ids.shift(); + const zm_event = zm_events[event_id]; + console.log(zm_event); + + query += '/EventId:'+zm_event.Id; + if (!ids.length || (query.length > 1000)) { + console.log(url,query, url+query+'.json?'+auth_relay); + $j.ajax(url+query+'.json?'+auth_relay, + { + timeout: 0, + success: function(data) { + if (data.frames.length) { + zm_event.FramesById = []; + let last_frame = null; + + for (let i=0, len=data.frames.length; i