- const recursive = require('./recursiveTraversal');
-
- const generatePreview = require('ffmpeg-generate-video-preview')
-
- 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 + ".gif";
- if (!fs.existsSync(icon))
- {
- var options =
- {
- input: filename,
- output: icon,
- width: 128,
- numFrames: 40
- };
- console.log(options);
- generatePreview(options).then(function(metaData)
- {
- console.log(metaData);
- resolve();
- }).catch(function(error)
- {
- 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)
- {
- if(files !== undefined)
- {
- 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();
- }
- else
- {
- 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 = process.env.PUBLIC_DIR
- }
- else
- {
- videos = privateVideos;
- rootDir = process.env.PRIVATE_DIR
- }
-
- 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 = [];
- module.exports.indexVideos(process.env.PUBLIC_DIR, publicVideos, "public").then(function()
- {
- for(var i = 0; i < publicVideos.length; i++)
- {
- const splitArray = publicVideos[i].name.split('/');
- const name = splitArray[splitArray.length -1];
- videoName = videoName.split('/').join("");
- 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];
-
- videoName = videoName.split('/').join("");
- if(name + "" === videoName)
- {
- return true;
- }
- }
- return false;
- }
- },
-
- reIndexVideos: function()
- {
- publicVideos = [];
- privateVideos = [];
- module.exports.indexVideos(process.env.PUBLIC_DIR, publicVideos, "public");
- module.exports.indexVideos(process.env.PRIVATE_DIR, privateVideos, "private");
- },
-
- getPublicVideoCount: function()
- {
- return (publicVideos === null) ? 0: publicVideos.length;
- },
-
- getPrivateVideoCount: function()
- {
- return (privateVideos === null) ? 0: privateVideos.length;
- }
- };
|