47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
var getVideoLength = v => require('video-length')(v, {bin: "mediainfo"});
|
|
var getDiskInfo = require('diskusage').check;
|
|
var fs = require("fs");
|
|
var path = require("path");
|
|
|
|
var cached = {};
|
|
|
|
async function getList() {
|
|
if (!cached.list || Date.now() - cached.time > 30000) {
|
|
cached.list = await generateList();
|
|
cached.diskinfo = await getDiskInfo(process.env.DOWNLOADS);
|
|
cached.time = Date.now();
|
|
}
|
|
return cached;
|
|
}
|
|
|
|
async function generateList() {
|
|
var files = fs.readdirSync(process.env.DOWNLOADS, {withFileTypes: true}).filter(f => f.isFile()).map(f => f.name);
|
|
var list = await Promise.all(files.map(async name => {
|
|
var filepath = path.join(process.env.DOWNLOADS, name);
|
|
var metapath = path.join(process.env.DOWNLOADS, "metadata", name) + ".json";
|
|
|
|
try {
|
|
var metadata = JSON.parse(fs.readFileSync(metapath, "utf8"));
|
|
} catch (error) {
|
|
var metadata = {};
|
|
try {
|
|
metadata.duration = await getVideoLength(filepath);
|
|
} catch(error) {console.error(error.message)};
|
|
fs.writeFileSync(metapath, JSON.stringify(metadata));
|
|
}
|
|
|
|
var {mtime, size} = fs.statSync(filepath);
|
|
return {name, mtime, size, duration: metadata.duration};
|
|
}));
|
|
|
|
list = list.sort((a,b) => a.mtime - b.mtime);
|
|
return list;
|
|
}
|
|
|
|
function uncacheList() {
|
|
cached = {};
|
|
}
|
|
|
|
|
|
|
|
module.exports = {getList, generateList, uncacheList}; |