diff --git a/libs/timelapse.js b/libs/timelapse.js index 7e59c672..99538238 100644 --- a/libs/timelapse.js +++ b/libs/timelapse.js @@ -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, } diff --git a/web/assets/js/bs5.fileBin.js b/web/assets/js/bs5.fileBin.js index e4c115ec..9112e88a 100644 --- a/web/assets/js/bs5.fileBin.js +++ b/web/assets/js/bs5.fileBin.js @@ -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: `${loadedMonitors[file.mid]?.name || file.mid}`, name: file.name, @@ -86,8 +94,11 @@ $(document).ready(function(e){ `, size: convertKbToHumanSize(file.size), buttons: ` - - ${file.details.video ? `` : ``} +
+ + ${isVideo ? `` : ``} + ${permissionCheck('video_delete',file.mid) ? `` : ''} +
`, } }) @@ -97,6 +108,24 @@ $(document).ready(function(e){ function drawPreviewVideo(href){ fileBinPreviewArea.html(``) } + 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() diff --git a/web/assets/js/bs5.videos.js b/web/assets/js/bs5.videos.js index 73f90a2f..3a118bff 100644 --- a/web/assets/js/bs5.videos.js +++ b/web/assets/js/bs5.videos.js @@ -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'