'use strict'; const Promise = require("bluebird"); const checkit = require("checkit"); const debounce = require("debounce"); const validatorAdd = require("../lib/form-validators/disk-images/add"); module.exports = function({db, imageStore}) { let router = require("express-promise-router")(); router.get("/", (req, res) => { return Promise.try(() => { return db("images"); }).then((results) => { res.render("disk-images/list", { images: results }); }); }); router.get("/add", (req, res) => { res.render("disk-images/add"); }); router.post("/add", (req, res) => { return Promise.try(() => { return validatorAdd.run(req.body); }).then((result) => { /* FIXME: Only allow 'local' for administrators! */ if (req.body.source === "http") { return Promise.try(() => { return imageStore.addFromUrl(req.body.url); }).then((downloadTracker) => { downloadTracker.on("progress", debounce((progress, description) => { console.log("Download progress:", (Math.round(progress * 10000) / 100), "%"); }, 200)); return downloadTracker.await(); }); } else if (req.body.source === "local") { return imageStore.addFromPath(req.body.path); } }).then((imageId) => { let source; if (req.body.source === "http") { source = req.body.url; } else if (req.body.source === "local") { source = req.body.path; } return db("images").insert({ userId: 0, fileId: imageId, name: req.body.name, description: req.body.description, sourceType: req.body.source, source: source, imageType: "disk", public: true, isInstallMedium: true }); }).then(() => { res.redirect("/disk-images"); }); }); return router; }