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;
|
|
}
|
|
};
|