const configManager = require('./configManager'); const recursive = require('./recursiveTraversal'); const filepreview = require('filepreview'); const fs = require('fs'); var privateVideos = null; var publicVideos = null; function createIndex(filename, videos, templateKey) { return new Promise(function(resolve, reject) { console.log("Generating icon for " + filename); var splitArray = filename.split('/'); var name = splitArray[splitArray.length -1]; const icon = './icon/' + templateKey + '/' + name + ".png"; if (!fs.existsSync(icon)) { var options = { width: 200, quality: 50, previewTime: '00:05:00.000' }; filepreview.generate(filename, icon, options, function (error) { if (error) { resolve(); } console.log('File preview is located ' + icon); resolve(); }); } else { resolve(); } }) } async function runTasksSync(files, videos, templateKey) { for(var file of files) { await createIndex(file, videos, templateKey); } } module.exports = { indexVideos: function(rootDir, videos, templateKey) { return new Promise(function(resolve, reject) { recursive(rootDir, function (err, files) { files.forEach(file => { videos.push({name: file.replace(rootDir, '')}); }); runTasksSync(files.splice(0, files.length/2), videos, templateKey); runTasksSync(files.splice(files.length/2, files.length), videos, templateKey); resolve(); }); }).catch(function(error) { //console.log(error); }) }, getVideosForTemplate: function(templateContext, templateKey) { return new Promise(function(resolve, reject) { var videos, rootDir; if(templateKey === "public") { videos = publicVideos; rootDir = configManager.getPublicDirectory(); } else { videos = privateVideos; rootDir = configManager.getRootDirectory(); } if(videos === null) { videos = []; module.exports.indexVideos(rootDir, videos, templateKey) .then(function() { templateContext[templateKey] = videos; if(templateKey === "public") publicVideos = videos; else privateVideos = videos; resolve(); }) } else { templateContext[templateKey] = videos; resolve(); } }) }, isPublicVideo: function(videoName) { if(publicVideos == null) { publicVideos = []; rootDir = configManager.getPublicDirectory(); module.exports.indexVideos(rootDir, publicVideos, "public").then(function() { for(var i = 0; i < publicVideos.length; i++) { const splitArray = publicVideos[i].name.split('/'); const name = splitArray[splitArray.length -1]; if(name === videoName) { return true; } } return false; }); } else { for(var i = 0; i < publicVideos.length; i++) { const splitArray = publicVideos[i].name.split('/'); const name = splitArray[splitArray.length -1]; if(name === videoName) { return true; } } return false; } }, reIndexVideos: function() { publicVideos = []; privateVideos = []; module.exports.indexVideos(configManager.getPublicDirectory(), publicVideos, "public"); module.exports.indexVideos(configManager.getRootDirectory(), privateVideos, "private"); }, getPublicVideoCount: function() { return (publicVideos === null) ? 0: publicVideos.length; }, getPrivateVideoCount: function() { return (privateVideos === null) ? 0: privateVideos.length; } };