$(document).ready(function(e){
var theEnclosure = $('#tab-videosTableView')
var monitorsList = theEnclosure.find('.monitors_list')
var dateSelector = theEnclosure.find('.date_selector')
var videosTableDrawArea = $('#videosTable_draw_area')
var videosTablePreviewArea = $('#videosTable_preview_area')
var objectTagSearchField = $('#videosTable_tag_search')
var loadedVideosTable = [];
var redrawTimeout;
var frameUrlCache = {}
var frameUrlCacheTimeouts = {}
async function getSnapshotFromVideoTimeFrame(monitorId,startDate,endDate){
const frameUrlCacheId = `${monitorId}${startDate}${endDate}`
if(frameUrlCache[frameUrlCacheId]){
return frameUrlCache[frameUrlCacheId]
}else{
const frame = (await getTimelapseFrames(monitorId,startDate,endDate,1))[0]
const href = frame && frame.href ? frame.href : ''
frameUrlCache[frameUrlCacheId] = `${href}`
frameUrlCacheTimeouts[frameUrlCacheId] = setTimeout(() => {
delete(frameUrlCache[frameUrlCacheId])
delete(frameUrlCacheTimeouts[frameUrlCacheId])
},1000 * 60 * 15)
return href
}
}
function loadFramesForVideosInView(){
videosTableDrawArea.find('.video-thumbnail').each(async (n,imgEl) => {
const el = $(imgEl)
const monitorId = el.attr('data-mid')
const startDate = el.attr('data-time')
const endDate = el.attr('data-end')
const href = await getSnapshotFromVideoTimeFrame(monitorId,startDate,endDate)
imgEl.innerHTML = href ? `` : ''
})
}
function openVideosTableView(monitorId,startDate,endDate){
drawVideosTableViewElements(monitorId,startDate,endDate)
}
function getSelectedTime(asUtc){
var dateRange = dateSelector.data('daterangepicker')
var startDate = dateRange.startDate.clone()
var endDate = dateRange.endDate.clone()
if(asUtc){
startDate = startDate.utc()
endDate = endDate.utc()
}
startDate = startDate.format('YYYY-MM-DDTHH:mm:ss')
endDate = endDate.format('YYYY-MM-DDTHH:mm:ss')
return {
startDate: startDate,
endDate: endDate
}
}
dateSelector.daterangepicker({
startDate: moment().utc().subtract(2, 'days'),
endDate: moment().utc(),
timePicker: true,
locale: {
format: 'YYYY/MM/DD hh:mm:ss A'
}
}, function(start, end, label) {
drawVideosTableViewElements()
})
monitorsList.change(function(){
drawVideosTableViewElements()
})
objectTagSearchField.change(function(){
drawVideosTableViewElements()
})
async function drawVideosTableViewElements(usePreloadedData){
var dateRange = getSelectedTime(false)
var searchQuery = objectTagSearchField.val() || null
var startDate = dateRange.startDate
var endDate = dateRange.endDate
var monitorId = monitorsList.val()
var frameIconsHtml = ''
if(!usePreloadedData){
loadedVideosTable = (await getVideos({
monitorId,
startDate,
endDate,
searchQuery,
})).videos;
$.each(loadedVideosTable,function(n,v){
loadedVideosInMemory[`${monitorId}${v.time}`]
})
}
// for (let i = 0; i < loadedVideosTable.length; i++) {
// const file = loadedVideosTable[i]
// const frameUrl = await getSnapshotFromVideoTimeFrame(file.mid,file.time,file.end);
// file.frameUrl = frameUrl
// }
videosTableDrawArea.bootstrapTable('destroy')
videosTableDrawArea.bootstrapTable({
onPostBody: loadFramesForVideosInView,
onPageChange: () => {
setTimeout(() => {
loadFramesForVideosInView()
},500)
},
pagination: true,
search: true,
columns: [
{
field: 'mid',
title: '',
checkbox: true,
formatter: () => {
return {
checked: false
}
},
},
{
field: 'image',
title: '',
},
{
field: 'Monitor',
title: '',
},
{
field: 'time',
title: lang['Time Created'],
},
{
field: 'end',
title: lang['Ended']
},
{
field: 'objects',
title: lang['Objects Found']
},
{
field: 'size',
title: ''
},
{
field: 'buttons',
title: ''
}
],
data: loadedVideosTable.map((file) => {
var href = getFullOrigin(true) + file.href
var loadedMonitor = loadedMonitors[file.mid]
return {
image: `