/* global CloudCmd */ import philip from 'philip'; import Images from './images.js'; import {FS} from '../../common/cloudfunc.js'; import DOM from '.'; import Dialog from './dialog.js'; const {getCurrentDirPath: getPathWhenRootEmpty} = DOM; export default (items) => { if (items.length) Images.show('top'); const entries = Array.from(items).map((item) => { return item.webkitGetAsEntry(); }); const dirPath = getPathWhenRootEmpty(); const path = dirPath .replace(/\/$/, ''); const progress = Dialog.progress('Uploading...'); progress.catch(() => { Dialog.alert('Upload aborted'); uploader.abort(); }); const uploader = philip(entries, (type, name, data, i, n, callback) => { const {prefixURL} = CloudCmd; 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); progress.setProgress(value); }); }); uploader.on('error', (error) => { Dialog.alert(error); uploader.abort(); }); uploader.on('end', CloudCmd.refresh); }; function percent(i, n, per = 100) { return Math.round(i * per / n); } function uploadFile(url, data) { return DOM.load.put(url, data); } function uploadDir(url) { return DOM.load.put(url + '?dir'); }