/* global CloudCmd */ 'use strict'; const philip = require('philip'); const Images = require('./images'); const {FS} = require('../../common/cloudfunc'); const DOM = require('.'); const { getCurrentDirPath: getPathWhenRootEmpty, } = DOM; module.exports = (items) => { const Dialog = DOM.Dialog; if (items.length) Images.show('top'); const entries = [...items].map((item) => { return item.webkitGetAsEntry(); }); const dirPath = getPathWhenRootEmpty(); const path = dirPath .replace(/\/$/, ''); const uploader = philip(entries, (type, name, data, i, n, callback) => { const prefixURL = CloudCmd.PREFIX_URL; const full = prefixURL + FS + path + name; let upload; switch(type) { case 'file': upload = uploadFile(full, data); break; case 'directory': upload = uploadDir(full); break; } upload.on('end', callback); upload.on('progress', (count) => { const current = percent(i, n); const next = percent(i + 1, n); const max = next - current; const value = current + percent(count, 100, max); setProgress(value); }); }); uploader.on('error', (error) => { Dialog.alert(error); uploader.abort(); }); uploader.on('progress', setProgress); uploader.on('end', CloudCmd.refresh); }; function percent(i, n, per = 100) { return Math.round(i * per / n); } function setProgress(count) { DOM.Images .setProgress(count) .show('top'); } function uploadFile(url, data) { return DOM.load.put(url, data); } function uploadDir(url) { return DOM.load.put(url + '?dir'); }