Add Button for FileBin file archival
parent
8eb0326e5d
commit
7442214efe
|
|
@ -350,7 +350,6 @@ module.exports = function(s,config,lang,app,io){
|
|||
const timeNow = new Date()
|
||||
const fileStats = await fs.promises.stat(finalMp4OutputLocation)
|
||||
const details = {
|
||||
video: true,
|
||||
start: frames[0].time,
|
||||
end: frames[frames.length - 1].time,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ $(document).ready(function(e){
|
|||
var dateSelector = theEnclosure.find('.date_selector')
|
||||
var fileBinDrawArea = $('#fileBin_draw_area')
|
||||
var fileBinPreviewArea = $('#fileBin_preview_area')
|
||||
var loadedVideosInMemory = {};
|
||||
var loadedFilesInMemory = {};
|
||||
function openFileBinView(monitorId,startDate,endDate){
|
||||
drawFileBinViewElements(monitorId,startDate,endDate)
|
||||
}
|
||||
|
|
@ -37,6 +37,10 @@ $(document).ready(function(e){
|
|||
monitorsList.change(function(){
|
||||
drawFileBinViewElements()
|
||||
})
|
||||
function loadFileData(video){
|
||||
delete(video.f)
|
||||
loadedFilesInMemory[`${video.mid}${video.name}`] = video
|
||||
}
|
||||
function drawFileBinViewElements(selectedMonitor,startDate,endDate){
|
||||
var dateRange = getSelectedTime(false)
|
||||
if(!startDate)startDate = dateRange.startDate
|
||||
|
|
@ -46,8 +50,11 @@ $(document).ready(function(e){
|
|||
var frameIconsHtml = ''
|
||||
var apiURL = getApiPrefix('fileBin') + '/' + selectedMonitor;
|
||||
var fileBinData = []
|
||||
loadedVideosInMemory = {}
|
||||
loadedFilesInMemory = {}
|
||||
$.getJSON(apiURL + '?' + queryString.join('&'),function(data){
|
||||
$.each(data.files,function(n,file){
|
||||
loadFileData(file)
|
||||
})
|
||||
fileBinDrawArea.bootstrapTable('destroy')
|
||||
fileBinDrawArea.bootstrapTable({
|
||||
pagination: true,
|
||||
|
|
@ -76,6 +83,7 @@ $(document).ready(function(e){
|
|||
],
|
||||
data: data.files.map((file) => {
|
||||
var href = getApiPrefix('fileBin') + '/' + selectedMonitor + '/' + file.name
|
||||
var isVideo = file.name.includes('.mp4') || file.name.includes('.webm')
|
||||
return {
|
||||
monitorName: `<b>${loadedMonitors[file.mid]?.name || file.mid}</b>`,
|
||||
name: file.name,
|
||||
|
|
@ -86,8 +94,11 @@ $(document).ready(function(e){
|
|||
`,
|
||||
size: convertKbToHumanSize(file.size),
|
||||
buttons: `
|
||||
<a class="btn btn-sm btn-primary" href="${href}" download title="${lang.Download}"><i class="fa fa-download"></i></a>
|
||||
${file.details.video ? `<a class="btn btn-sm btn-primary preview-video" href="${href}" title="${lang.Play}"><i class="fa fa-play"></i></a>` : ``}
|
||||
<div class="row-info" data-mid="${file.mid}" data-ke="${file.ke}" data-time="${file.time}" data-name="${file.name}">
|
||||
<a class="btn btn-sm btn-primary" href="${href}" download title="${lang.Download}"><i class="fa fa-download"></i></a>
|
||||
${isVideo ? `<a class="btn btn-sm btn-primary preview-video" href="${href}" title="${lang.Play}"><i class="fa fa-play"></i></a>` : ``}
|
||||
${permissionCheck('video_delete',file.mid) ? `<a class="btn btn-sm btn-${file.archive === 1 ? `success status-archived` : `default`} archive-file" title="${lang.Archive}"><i class="fa fa-${file.archive === 1 ? `lock` : `unlock-alt`}"></i></a>` : ''}
|
||||
</div>
|
||||
`,
|
||||
}
|
||||
})
|
||||
|
|
@ -97,6 +108,24 @@ $(document).ready(function(e){
|
|||
function drawPreviewVideo(href){
|
||||
fileBinPreviewArea.html(`<video class="video_video" style="width:100%" autoplay controls preload loop src="${href}"></video>`)
|
||||
}
|
||||
function archiveFile(video,unarchive){
|
||||
return archiveVideo(video,unarchive,true)
|
||||
}
|
||||
async function archiveFiles(videos){
|
||||
for (let i = 0; i < videos.length; i++) {
|
||||
var video = videos[i];
|
||||
await archiveFile(video,false)
|
||||
}
|
||||
}
|
||||
function unarchiveFile(video){
|
||||
return archiveFile(video,true)
|
||||
}
|
||||
async function unarchiveFiles(videos){
|
||||
for (let i = 0; i < videos.length; i++) {
|
||||
var video = videos[i];
|
||||
await unarchiveFile(video)
|
||||
}
|
||||
}
|
||||
$('body')
|
||||
.on('click','.open-fileBin-video',function(e){
|
||||
e.preventDefault()
|
||||
|
|
@ -112,6 +141,21 @@ $(document).ready(function(e){
|
|||
drawPreviewVideo(href)
|
||||
return false;
|
||||
})
|
||||
.on('click','.archive-file',function(e){
|
||||
e.preventDefault()
|
||||
var el = $(this).parents('[data-mid]')
|
||||
var monitorId = el.attr('data-mid')
|
||||
var filename = el.attr('data-name')
|
||||
var unarchive = $(this).hasClass('status-archived')
|
||||
var file = loadedFilesInMemory[`${monitorId}${filename}`]
|
||||
if(!file)return console.log(`No File`,monitorId,filename,unarchive,file);
|
||||
if(unarchive){
|
||||
unarchiveFile(file)
|
||||
}else{
|
||||
archiveFile(file)
|
||||
}
|
||||
return false;
|
||||
})
|
||||
addOnTabOpen('fileBinView', function () {
|
||||
drawMonitorListToSelector(monitorsList)
|
||||
drawFileBinViewElements()
|
||||
|
|
|
|||
|
|
@ -548,13 +548,13 @@ async function compressVideos(videos){
|
|||
await compressVideo(video)
|
||||
}
|
||||
}
|
||||
function getArchiveButtons(video){
|
||||
return $(`[data-mid="${video.mid}"][data-ke="${video.ke}"][data-time="${video.time}"] .archive-video`)
|
||||
function getArchiveButtons(video,isFileBin){
|
||||
return $(`[data-mid="${video.mid}"][data-ke="${video.ke}"][data-time="${video.time}"] .archive-${isFileBin ? `file` : 'video'}`)
|
||||
}
|
||||
var currentlyArchiving = {}
|
||||
function archiveVideo(video,unarchive){
|
||||
function archiveVideo(video,unarchive,isFileBin){
|
||||
return new Promise((resolve) => {
|
||||
var videoEndpoint = getApiPrefix(`videos`) + '/' + video.mid + '/' + video.filename
|
||||
var videoEndpoint = getApiPrefix(isFileBin ? `fileBin` : `videos`) + '/' + video.mid + '/' + (isFileBin ? video.name : video.filename)
|
||||
// var currentlyArchived = video.archive === 1
|
||||
if(currentlyArchiving[videoEndpoint]){
|
||||
resolve({ok: false})
|
||||
|
|
@ -563,7 +563,7 @@ function archiveVideo(video,unarchive){
|
|||
currentlyArchiving[videoEndpoint] = true
|
||||
$.getJSON(videoEndpoint + '/archive' + `${unarchive ? `?unarchive=1` : ''}`,function(data){
|
||||
if(data.ok){
|
||||
var archiveButtons = getArchiveButtons(video)
|
||||
var archiveButtons = getArchiveButtons(video,isFileBin)
|
||||
var classToRemove = 'btn-default'
|
||||
var classToAdd = 'btn-success status-archived'
|
||||
var iconToRemove = 'fa-unlock-alt'
|
||||
|
|
|
|||
Loading…
Reference in New Issue