From b49777cd379896d57234a3a1caa47d4261b6f121 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Fri, 2 Aug 2019 16:54:44 +0200 Subject: [PATCH 01/11] Move make-backup.js to common --- www/{settings => common}/make-backup.js | 0 www/settings/inner.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename www/{settings => common}/make-backup.js (100%) diff --git a/www/settings/make-backup.js b/www/common/make-backup.js similarity index 100% rename from www/settings/make-backup.js rename to www/common/make-backup.js diff --git a/www/settings/inner.js b/www/settings/inner.js index d785391d0..37143a617 100644 --- a/www/settings/inner.js +++ b/www/settings/inner.js @@ -12,7 +12,7 @@ define([ '/customize/credential.js', '/customize/application_config.js', '/api/config', - '/settings/make-backup.js', + '/common/make-backup.js', '/common/common-feedback.js', '/bower_components/file-saver/FileSaver.min.js', From 043808d9dbb0f8197510de1f7bc00ba990b06b33 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Mon, 5 Aug 2019 10:12:32 +0200 Subject: [PATCH 02/11] Add dummy download folders and pads --- www/drive/inner.js | 89 ++++++++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 31 deletions(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index fd7723bca..0fdcd4491 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -8,6 +8,7 @@ define([ '/common/common-interface.js', '/common/common-constants.js', '/common/common-feedback.js', + '/common/make-backup.js', '/bower_components/nthen/index.js', '/common/sframe-common.js', '/common/common-realtime.js', @@ -32,6 +33,7 @@ define([ UI, Constants, Feedback, + Backup, nThen, SFCommon, CommonRealtime, @@ -90,7 +92,7 @@ define([ var faEmpty = 'fa-trash-o'; var faRestore = 'fa-repeat'; var faShowParent = 'fa-location-arrow'; - var faDownload = 'cptools-file'; + var faDownload = 'fa-download'; var $folderIcon = $('', { "class": faFolder + " cptools cp-app-drive-icon-folder cp-app-drive-content-icon" }); @@ -325,22 +327,20 @@ define([ 'data-icon': faCollapseAll, }, Messages.fc_collapseAll)), $separator.clone()[0], - h('li', h('a.cp-app-drive-context-color.dropdown-item.cp-app-drive-context-editable', { - 'tabindex': '-1', - 'data-icon': faColor, - }, Messages.fc_color)), - h('li', h('a.cp-app-drive-context-download.dropdown-item', { - 'tabindex': '-1', - 'data-icon': faDownload, - }, Messages.download_mt_button)), - h('li', h('a.cp-app-drive-context-share.dropdown-item', { - 'tabindex': '-1', - 'data-icon': 'fa-shhare-alt', - }, Messages.shareButton)), h('li', h('a.cp-app-drive-context-openparent.dropdown-item', { 'tabindex': '-1', 'data-icon': faShowParent, }, Messages.fm_openParent)), + $separator.clone()[0], + h('li', h('a.cp-app-drive-context-share.dropdown-item', { + 'tabindex': '-1', + 'data-icon': 'fa-shhare-alt', + }, Messages.shareButton)), + h('li', h('a.cp-app-drive-context-download.dropdown-item', { + 'tabindex': '-1', + 'data-icon': faDownload, + }, Messages.download_mt_button)), + $separator.clone()[0], h('li', h('a.cp-app-drive-context-newfolder.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', 'data-icon': faFolder, @@ -349,10 +349,6 @@ define([ 'tabindex': '-1', 'data-icon': faSharedFolder, }, Messages.fc_newsharedfolder)), - h('li', h('a.cp-app-drive-context-hashtag.dropdown-item.cp-app-drive-context-editable', { - 'tabindex': '-1', - 'data-icon': faTags, - }, Messages.fc_hashtag)), $separator.clone()[0], h('li', h('a.cp-app-drive-context-newdoc.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', @@ -393,6 +389,19 @@ define([ 'tabindex': '-1', 'data-icon': faRename, }, Messages.fc_rename)), + h('li', h('a.cp-app-drive-context-color.dropdown-item.cp-app-drive-context-editable', { + 'tabindex': '-1', + 'data-icon': faColor, + }, Messages.fc_color)), + h('li', h('a.cp-app-drive-context-hashtag.dropdown-item.cp-app-drive-context-editable', { + 'tabindex': '-1', + 'data-icon': faTags, + }, Messages.fc_hashtag)), + h('li', h('a.cp-app-drive-context-properties.dropdown-item', { + 'tabindex': '-1', + 'data-icon': faProperties, + }, Messages.fc_prop)), + $separator.clone()[0], h('li', h('a.cp-app-drive-context-delete.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', 'data-icon': faTrash, @@ -409,10 +418,6 @@ define([ 'tabindex': '-1', 'data-icon': faDelete, }, Messages.fc_remove_sharedfolder)), - h('li', h('a.cp-app-drive-context-properties.dropdown-item', { - 'tabindex': '-1', - 'data-icon': faProperties, - }, Messages.fc_prop)), ]) ]); $(menu).find("li a.dropdown-item").each(function (i, el) { @@ -1008,9 +1013,6 @@ define([ // We can only open parent in virtual categories hide.push('openparent'); } - if (!$element.is('.cp-border-color-file')) { - hide.push('download'); - } if ($element.is('.cp-app-drive-element-file')) { // No folder in files hide.push('color'); @@ -3554,13 +3556,38 @@ define([ } else if ($(this).hasClass('cp-app-drive-context-download')) { if (paths.length !== 1) { return; } - el = manager.find(paths[0].path); - if (!manager.isFile(el)) { return; } - data = manager.getFileData(el); - APP.FM.downloadFile(data, function (err, obj) { - console.log(err, obj); - console.log('DONE'); - }); + var path = paths[0]; + el = manager.find(path.path); + console.log("paths", paths); + console.log("el", el); + + // folder + if (manager.isFolder(el)) { + // folder + if (!manager.isSharedFolder(el)) { + console.log("--isFolder--"); + } + // shared folder + else { + console.log("--isSharedFolder--"); + } + } + // file + else if (manager.isFile(el)) { + // imported file + if (path.element.is(".cp-border-color-file")) { + console.log("--isFile--"); + data = manager.getFileData(el); + APP.FM.downloadFile(data, function (err, obj) { + console.log(err, obj); + console.log('DONE'); + }); + } + // pad + else { + console.log("--isPad--"); + } + } } else if ($(this).hasClass('cp-app-drive-context-share')) { if (paths.length !== 1) { return; } From 4f26986fde95b96c5349ecf357c94e910b6353c0 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Tue, 6 Aug 2019 12:27:54 +0200 Subject: [PATCH 03/11] Download pads in drive - test --- www/common/sframe-common-file.js | 172 +++++++++++++++++++++++++++++++ www/drive/inner.js | 9 ++ 2 files changed, 181 insertions(+) diff --git a/www/common/sframe-common-file.js b/www/common/sframe-common-file.js index 099176afd..d374737ca 100644 --- a/www/common/sframe-common-file.js +++ b/www/common/sframe-common-file.js @@ -447,14 +447,26 @@ define([ createUploader(config.dropArea, config.hoverArea, config.body); File.downloadFile = function (fData, cb) { + console.error("SFC FILE -DOWNLOAD FILE"); + console.log("fData", fData); var parsed = Hash.parsePadUrl(fData.href || fData.roHref); var hash = parsed.hash; var name = fData.filename || fData.title; var secret = Hash.getSecrets('file', hash, fData.password); var src = Hash.getBlobPathFromHex(secret.channel); var key = secret.keys && secret.keys.cryptKey; + console.log('key', key); + console.log('src', src); + console.log('secret', secret); + console.log('name', name); + console.log('hash', hash); + console.log('parsed', parsed); common.getFileSize(secret.channel, function (e, data) { + console.warn("GET FILE SIZE"); + console.log("data", data); var todo = function (file) { + console.warn("TODO"); + console.log("file", file); if (queue.inProgress) { return; } queue.inProgress = true; var id = file.id; @@ -522,6 +534,76 @@ define([ }); }; + File.downloadPad = function (pData, cb) { + console.error("SFC FILE -DOWNLOAD PAD"); + console.log("pData", pData); + var todo = function (file) { + console.warn("TODO"); + console.log("file", file); + if (queue.inProgress) { return; } + queue.inProgress = true; + var id = file.id; + + var $row = $table.find('tr[id="'+id+'"]'); + var $pv = $row.find('.cp-fileupload-table-progress-value'); + var $pb = $row.find('.cp-fileupload-table-progress-container'); + var $pc = $row.find('.cp-fileupload-table-progress'); + var $link = $row.find('.cp-fileupload-table-link'); + + var done = function () { + $row.find('.cp-fileupload-table-cancel').text('-'); + queue.inProgress = false; + queue.next(); + }; + + var updateDLProgress = function (progressValue) { + var text = Math.round(progressValue*100) + '%'; + text += ' ('+ Messages.download_step1 +'...)'; + $pv.text(text); + $pb.css({ + width: progressValue * $pc.width()+'px' + }); + }; + var updateProgress = function (progressValue) { + var text = Math.round(progressValue*100) + '%'; + text += progressValue === 1 ? '' : ' ('+ Messages.download_step2 +'...)'; + $pv.text(text); + $pb.css({ + width: progressValue * $pc.width()+'px' + }); + }; + + var dl = module.downloadPad(pData, function (err, obj) { + $link.prepend($('', {'class': 'fa fa-external-link'})) + .attr('href', '#') + .click(function (e) { + e.preventDefault(); + obj.download(); + }); + done(); + if (obj) { obj.download(); } + cb(err, obj); + }, { + common: common, + progress: updateDLProgress, + progress2: updateProgress, + }); + + var $cancel = $('', {'class': 'cp-fileupload-table-cancel-button fa fa-times'}).click(function () { + dl.cancel(); + $cancel.remove(); + $row.find('.cp-fileupload-table-progress-value').text(Messages.upload_cancelled); + done(); + }); + $row.find('.cp-fileupload-table-cancel').html('').append($cancel); + }; + queue.push({ + dl: todo, + size: 0, + name: pData.title, + }); + }; + return File; }; @@ -565,5 +647,95 @@ define([ }; }; + + var getPad = function (common, data, cb) { + var sframeChan = common.getSframeChannel(); + sframeChan.query("Q_CRYPTGET", data, function (err, obj) { + if (err) { return void cb(err); } + if (obj.error) { return void cb(obj.error); } + cb(null, obj.data); + }, { timeout: 60000 }); + }; + + var transform = function (type, sjson, cb) { + console.error("SFCfile - transform"); + console.log('type', type); + console.log('sjson', sjson); + + var result = { + data: sjson, + ext: '.json', + }; + console.log('result', result); + var json; + try { + json = JSON.parse(sjson); + } catch (e) { + return void cb(result); + } + console.log('json', json); + var path = '/' + type + '/export.js'; + require([path], function (Exporter) { + Exporter.main(json, function (data) { + result.ext = Exporter.ext || ''; + result.data = data; + cb(result); + }); + }, function () { + cb(result); + }); + }; + + module.downloadPad = function (pData, cb, obj) { + console.error("SFC file - downloadPad"); + console.log(pData, pData); + var cancelled = false; + var cancel = function () { + cancelled = true; + }; + + var parsed = Hash.parsePadUrl(pData.href || pData.roHref); + var hash = parsed.hash; + var name = pData.filename || pData.title; + var opts = { + password: pData.password + }; + console.log('parsed', parsed); + console.log('hash', hash); + console.log('name', name); + console.log('opts', opts); + obj.progress(0); + getPad(obj.common, { + hash: parsed.hash, + opts: opts + }, function (err, val) { + if (cancelled) { return; } + if (err) { return; } + if (!val) { return; } + console.log('val', val); + obj.progress(1); + + transform(parsed.type, val, function (res) { + console.error("transform callback"); + console.log('res', res); + if (cancelled) { return; } + if (!res.data) { return; } + obj.progress2(1); + var dl = function () { + saveAs(res.data, Util.fixFileName(name)); + }; + cb(null, { + metadata: res.metadata, + content: res.data, + download: dl + }); + console.log('DONE ---- ' + name); + }); + }); + return { + cancel: cancel + }; + }; + return module; }); diff --git a/www/drive/inner.js b/www/drive/inner.js index 0fdcd4491..4726d7633 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -3555,11 +3555,14 @@ define([ refresh(); } else if ($(this).hasClass('cp-app-drive-context-download')) { + console.error('DOWNLOAD'); if (paths.length !== 1) { return; } var path = paths[0]; el = manager.find(path.path); console.log("paths", paths); console.log("el", el); + console.log('path', path); + console.log("APP", APP); // folder if (manager.isFolder(el)) { @@ -3586,6 +3589,12 @@ define([ // pad else { console.log("--isPad--"); + data = manager.getFileData(el); + console.log("data:", data); + APP.FM.downloadPad(data, function (err, obj) { + console.log(err, obj); + console.log('DONE'); + }); } } } From 4b027e83ad56030206c49ce5c9befabcba870527 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Tue, 6 Aug 2019 13:48:55 +0200 Subject: [PATCH 04/11] Download folders in drive - test (no UI) --- www/common/make-backup.js | 12 +++++++++- www/drive/inner.js | 48 ++++++++++++++++++++++++++++++++++++++- www/drive/main.js | 25 ++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/www/common/make-backup.js b/www/common/make-backup.js index b86f1f3b2..38a47f308 100644 --- a/www/common/make-backup.js +++ b/www/common/make-backup.js @@ -21,16 +21,22 @@ define([ }; var transform = function (ctx, type, sjson, cb) { + console.error("backup - transform"); + console.log('type', type); + console.log('sjson', sjson); + var result = { data: sjson, ext: '.json', }; + console.log('result', result); var json; try { json = JSON.parse(sjson); } catch (e) { return void cb(result); } + console.log('json', json); var path = '/' + type + '/export.js'; require([path], function (Exporter) { Exporter.main(json, function (data) { @@ -46,6 +52,8 @@ define([ // Add a file to the zip. We have to cryptget&transform it if it's a pad // or fetch&decrypt it if it's a file. var addFile = function (ctx, zip, fData, existingNames) { + console.error('backup - addFile'); + console.log('fData', fData); if (!fData.href && !fData.roHref) { return void ctx.errors.push({ error: 'EINVAL', @@ -54,6 +62,7 @@ define([ } var parsed = Hash.parsePadUrl(fData.href || fData.roHref); + console.log('parsed', parsed); if (['pad', 'file'].indexOf(parsed.hashData.type) === -1) { return; } // waitFor is used to make sure all the pads and files are process before downloading the zip. @@ -189,6 +198,7 @@ define([ var ctx = { get: getPad, data: data.uo.drive, + folder: data.folder || ctx.data.root, sf: data.sf, zip: new JsZip(), errors: [], @@ -201,7 +211,7 @@ define([ nThen(function (waitFor) { ctx.waitFor = waitFor; var zipRoot = ctx.zip.folder('Root'); - makeFolder(ctx, ctx.data.root, zipRoot, ctx.data.filesData); + makeFolder(ctx, ctx.folder, zipRoot, ctx.data.filesData); progress('download', {}); }).nThen(function () { console.log(ctx.zip); diff --git a/www/drive/inner.js b/www/drive/inner.js index 4726d7633..a611a7829 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -3467,6 +3467,41 @@ define([ }); }); }; + + + var downloadFolder = function (folderElement, folderName) { + console.warn("downloadFolder"); + var todo = function (data) { + var getPad = function (data, cb) { + sframeChan.query("Q_CRYPTGET", data, function (err, obj) { + if (err) { return void cb(err); } + if (obj.error) { return void cb(obj.error); } + cb(null, obj.data); + }, { timeout: 60000 }); + }; + + data.folder = folderElement; + folderName = Util.fixFileName(folderName) + '.zip'; + console.log("data", data); + console.log("folderName", folderName); + + Backup.create(data, getPad, function (blob, errors) { + console.log("blob", blob); + window.saveAs(blob, folderName); + console.error(errors); + }, function () {}); + }; + sframeChan.query("Q_SETTINGS_DRIVE_GET", "full", function (err, data) { + console.warn("sframeChan.query Q_SETTINGS_DRIVE_GET callback"); + console.log("err", err); + console.log("data", data); + if (err) { return void console.error(err); } + if (data.error) { return void console.error(data.error); } + todo(data); + }); + }; + + $contextMenu.on("click", "a", function(e) { e.stopPropagation(); var paths = $contextMenu.data('paths'); @@ -3563,16 +3598,27 @@ define([ console.log("el", el); console.log('path', path); console.log("APP", APP); - // folder if (manager.isFolder(el)) { // folder + var name, folderEl; if (!manager.isSharedFolder(el)) { console.log("--isFolder--"); + name = path.path[path.path.length - 1]; + console.log('name', name); + folderEl = el; + downloadFolder(folderEl, name); } // shared folder else { console.log("--isSharedFolder--"); + data = manager.getSharedFolderData(el); + name = data.title; + folderEl = manager.find(path.path.concat("root")); + console.log("folderEl", folderEl); + console.log("data:", data); + console.log('name', name); + downloadFolder(folderEl, name); } } // file diff --git a/www/drive/main.js b/www/drive/main.js index 907be7451..c4918cf9d 100644 --- a/www/drive/main.js +++ b/www/drive/main.js @@ -63,6 +63,31 @@ define([ Utils.LocalStore.clearThumbnail(); window.location.reload(); }); + sframeChan.on('Q_SETTINGS_DRIVE_GET', function (d, cb) { + Cryptpad.getUserObject(function (obj) { + if (obj.error) { return void cb(obj); } + if (d === "full") { + // We want shared folders too + var result = { + uo: obj, + sf: {} + }; + if (!obj.drive || !obj.drive.sharedFolders) { return void cb(result); } + Utils.nThen(function (waitFor) { + Object.keys(obj.drive.sharedFolders).forEach(function (id) { + Cryptpad.getSharedFolder(id, waitFor(function (obj) { + result.sf[id] = obj; + })); + }); + }).nThen(function () { + cb(result); + }); + return; + } + // We want only the user object + cb(obj); + }); + }); sframeChan.on('Q_DRIVE_USEROBJECT', function (data, cb) { Cryptpad.userObjectCommand(data, cb); }); From 095dfadbb0513078cf738dab71dfc948b987a572 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Fri, 9 Aug 2019 11:48:57 +0200 Subject: [PATCH 05/11] Revert some pending stuff to be able to merge to staging --- www/drive/inner.js | 43 +++++++++---------------------------------- 1 file changed, 9 insertions(+), 34 deletions(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index 0fdcd4491..5fa82edfb 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -8,7 +8,6 @@ define([ '/common/common-interface.js', '/common/common-constants.js', '/common/common-feedback.js', - '/common/make-backup.js', '/bower_components/nthen/index.js', '/common/sframe-common.js', '/common/common-realtime.js', @@ -33,7 +32,6 @@ define([ UI, Constants, Feedback, - Backup, nThen, SFCommon, CommonRealtime, @@ -1013,6 +1011,9 @@ define([ // We can only open parent in virtual categories hide.push('openparent'); } + if (!$element.is('.cp-border-color-file')) { + hide.push('download'); + } if ($element.is('.cp-app-drive-element-file')) { // No folder in files hide.push('color'); @@ -3556,38 +3557,12 @@ define([ } else if ($(this).hasClass('cp-app-drive-context-download')) { if (paths.length !== 1) { return; } - var path = paths[0]; - el = manager.find(path.path); - console.log("paths", paths); - console.log("el", el); - - // folder - if (manager.isFolder(el)) { - // folder - if (!manager.isSharedFolder(el)) { - console.log("--isFolder--"); - } - // shared folder - else { - console.log("--isSharedFolder--"); - } - } - // file - else if (manager.isFile(el)) { - // imported file - if (path.element.is(".cp-border-color-file")) { - console.log("--isFile--"); - data = manager.getFileData(el); - APP.FM.downloadFile(data, function (err, obj) { - console.log(err, obj); - console.log('DONE'); - }); - } - // pad - else { - console.log("--isPad--"); - } - } + el = manager.find(paths[0].path); + data = manager.getFileData(el); + APP.FM.downloadFile(data, function (err, obj) { + console.log(err, obj); + console.log('DONE'); + }); } else if ($(this).hasClass('cp-app-drive-context-share')) { if (paths.length !== 1) { return; } From a5405cb6a012ad668acd2e1a3e78809af1da8d3c Mon Sep 17 00:00:00 2001 From: ClemDee Date: Wed, 14 Aug 2019 10:30:32 +0200 Subject: [PATCH 06/11] Set properties at the bottom of the contextmenu --- www/drive/inner.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index 5fa82edfb..b3c6a71f0 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -395,10 +395,6 @@ define([ 'tabindex': '-1', 'data-icon': faTags, }, Messages.fc_hashtag)), - h('li', h('a.cp-app-drive-context-properties.dropdown-item', { - 'tabindex': '-1', - 'data-icon': faProperties, - }, Messages.fc_prop)), $separator.clone()[0], h('li', h('a.cp-app-drive-context-delete.dropdown-item.cp-app-drive-context-editable', { 'tabindex': '-1', @@ -416,6 +412,11 @@ define([ 'tabindex': '-1', 'data-icon': faDelete, }, Messages.fc_remove_sharedfolder)), + $separator.clone()[0], + h('li', h('a.cp-app-drive-context-properties.dropdown-item', { + 'tabindex': '-1', + 'data-icon': faProperties, + }, Messages.fc_prop)), ]) ]); $(menu).find("li a.dropdown-item").each(function (i, el) { @@ -1077,6 +1078,7 @@ define([ hide.push('openparent'); hide.push('hashtag'); hide.push('download'); + hide.push('share'); } if (containsFolder && paths.length > 1) { // Cannot open multiple folders From bb9898fa35c623c84501137f7bc82191c5f24a0e Mon Sep 17 00:00:00 2001 From: ClemDee Date: Wed, 14 Aug 2019 14:49:40 +0200 Subject: [PATCH 07/11] Download files code refractoring --- www/common/make-backup.js | 101 +++++++-- www/common/sframe-common-file.js | 340 ++++++------------------------- www/common/sframe-common.js | 8 + www/drive/inner.js | 25 +-- www/drive/main.js | 25 --- www/settings/inner.js | 11 +- 6 files changed, 168 insertions(+), 342 deletions(-) diff --git a/www/common/make-backup.js b/www/common/make-backup.js index 38a47f308..0d50dfde4 100644 --- a/www/common/make-backup.js +++ b/www/common/make-backup.js @@ -1,11 +1,13 @@ define([ '/common/cryptget.js', + '/file/file-crypto.js', '/common/common-hash.js', - '/common/sframe-common-file.js', + '/common/common-util.js', '/bower_components/nthen/index.js', '/bower_components/saferphore/index.js', '/bower_components/jszip/dist/jszip.min.js', -], function (Crypt, Hash, SFCFile, nThen, Saferphore, JsZip) { +], function (Crypt, FileCrypto, Hash, Util, nThen, Saferphore, JsZip) { + var saveAs = window.saveAs; var sanitize = function (str) { return str.replace(/[\\/?%*:|"<>]/gi, '_')/*.toLowerCase()*/; @@ -21,22 +23,16 @@ define([ }; var transform = function (ctx, type, sjson, cb) { - console.error("backup - transform"); - console.log('type', type); - console.log('sjson', sjson); - var result = { data: sjson, ext: '.json', }; - console.log('result', result); var json; try { json = JSON.parse(sjson); } catch (e) { return void cb(result); } - console.log('json', json); var path = '/' + type + '/export.js'; require([path], function (Exporter) { Exporter.main(json, function (data) { @@ -49,11 +45,86 @@ define([ }); }; + + var _downloadFile = function (ctx, fData, cb, updateProgress) { + var cancelled = false; + var cancel = function () { + cancelled = true; + }; + var parsed = Hash.parsePadUrl(fData.href || fData.roHref); + var hash = parsed.hash; + var name = fData.filename || fData.title; + var secret = Hash.getSecrets('file', hash, fData.password); + var src = Hash.getBlobPathFromHex(secret.channel); + var key = secret.keys && secret.keys.cryptKey; + Util.fetch(src, function (err, u8) { + if (cancelled) { return; } + if (err) { return void cb('E404'); } + FileCrypto.decrypt(u8, key, function (err, res) { + if (cancelled) { return; } + if (err) { return void cb(err); } + if (!res.content) { return void cb('EEMPTY'); } + var dl = function () { + saveAs(res.content, name || res.metadata.name); + }; + cb(null, { + metadata: res.metadata, + content: res.content, + download: dl + }); + }, updateProgress && updateProgress.progress2); + }, updateProgress && updateProgress.progress); + return { + cancel: cancel + }; + + }; + + + var _downloadPad = function (ctx, pData, cb, updateProgress) { + var cancelled = false; + var cancel = function () { + cancelled = true; + }; + + var parsed = Hash.parsePadUrl(pData.href || pData.roHref); + var name = pData.filename || pData.title; + var opts = { + password: pData.password + }; + updateProgress.progress(0); + ctx.get({ + hash: parsed.hash, + opts: opts + }, function (err, val) { + if (cancelled) { return; } + if (err) { return; } + if (!val) { return; } + updateProgress.progress(1); + + transform(ctx, parsed.type, val, function (res) { + if (cancelled) { return; } + if (!res.data) { return; } + updateProgress.progress2(1); + var dl = function () { + saveAs(res.data, Util.fixFileName(name)); + }; + cb(null, { + metadata: res.metadata, + content: res.data, + download: dl + }); + }); + }); + return { + cancel: cancel + }; + + }; + // Add a file to the zip. We have to cryptget&transform it if it's a pad // or fetch&decrypt it if it's a file. var addFile = function (ctx, zip, fData, existingNames) { - console.error('backup - addFile'); - console.log('fData', fData); if (!fData.href && !fData.roHref) { return void ctx.errors.push({ error: 'EINVAL', @@ -62,7 +133,6 @@ define([ } var parsed = Hash.parsePadUrl(fData.href || fData.roHref); - console.log('parsed', parsed); if (['pad', 'file'].indexOf(parsed.hashData.type) === -1) { return; } // waitFor is used to make sure all the pads and files are process before downloading the zip. @@ -135,7 +205,7 @@ define([ // Files (mediatags...) var todoFile = function () { var it; - var dl = SFCFile.downloadFile(fData, function (err, res) { + var dl = _downloadFile(ctx, fData, function (err, res) { if (it) { clearInterval(it); } if (err) { return void error(err); } var opts = { @@ -232,7 +302,12 @@ define([ }; }; + + return { - create: create + create: create, + downloadFile: _downloadFile, + downloadPad: _downloadPad, + }; }); diff --git a/www/common/sframe-common-file.js b/www/common/sframe-common-file.js index d374737ca..da26531c1 100644 --- a/www/common/sframe-common-file.js +++ b/www/common/sframe-common-file.js @@ -1,6 +1,7 @@ define([ 'jquery', '/file/file-crypto.js', + '/common/make-backup.js', '/common/common-thumbnail.js', '/common/common-interface.js', '/common/common-ui-elements.js', @@ -11,9 +12,8 @@ define([ '/bower_components/file-saver/FileSaver.min.js', '/bower_components/tweetnacl/nacl-fast.min.js', -], function ($, FileCrypto, Thumb, UI, UIElements, Util, Hash, h, Messages) { +], function ($, FileCrypto, MakeBackup, Thumb, UI, UIElements, Util, Hash, h, Messages) { var Nacl = window.nacl; - var saveAs = window.saveAs; var module = {}; var blobToArrayBuffer = function (blob, cb) { @@ -446,88 +446,73 @@ define([ createUploader(config.dropArea, config.hoverArea, config.body); + var updateProgressbar = function (file, data, downloadFunction, cb) { + if (queue.inProgress) { return; } + queue.inProgress = true; + var id = file.id; + + var $row = $table.find('tr[id="'+id+'"]'); + var $pv = $row.find('.cp-fileupload-table-progress-value'); + var $pb = $row.find('.cp-fileupload-table-progress-container'); + var $pc = $row.find('.cp-fileupload-table-progress'); + var $link = $row.find('.cp-fileupload-table-link'); + + var done = function () { + $row.find('.cp-fileupload-table-cancel').text('-'); + queue.inProgress = false; + queue.next(); + }; + + var updateDLProgress = function (progressValue) { + var text = Math.round(progressValue * 100) + '%'; + text += ' (' + Messages.download_step1 + '...)'; + $pv.text(text); + $pb.css({ + width: progressValue * $pc.width() + 'px' + }); + }; + var updateProgress = function (progressValue) { + var text = Math.round(progressValue*100) + '%'; + text += progressValue === 1 ? '' : ' (' + Messages.download_step2 + '...)'; + $pv.text(text); + $pb.css({ + width: progressValue * $pc.width()+'px' + }); + }; + + var ctx = { + get: common.getPad, + }; + var dl = downloadFunction(ctx, data, function (err, obj) { + $link.prepend($('', {'class': 'fa fa-external-link'})) + .attr('href', '#') + .click(function (e) { + e.preventDefault(); + obj.download(); + }); + done(); + if (obj) { obj.download(); } + cb(err, obj); + }, { + progress: updateDLProgress, + progress2: updateProgress, + }); + + var $cancel = $('', {'class': 'cp-fileupload-table-cancel-button fa fa-times'}).click(function () { + dl.cancel(); + $cancel.remove(); + $row.find('.cp-fileupload-table-progress-value').text(Messages.upload_cancelled); + done(); + }); + $row.find('.cp-fileupload-table-cancel').html('').append($cancel); + }; + + File.downloadFile = function (fData, cb) { - console.error("SFC FILE -DOWNLOAD FILE"); - console.log("fData", fData); - var parsed = Hash.parsePadUrl(fData.href || fData.roHref); - var hash = parsed.hash; var name = fData.filename || fData.title; - var secret = Hash.getSecrets('file', hash, fData.password); - var src = Hash.getBlobPathFromHex(secret.channel); - var key = secret.keys && secret.keys.cryptKey; - console.log('key', key); - console.log('src', src); - console.log('secret', secret); - console.log('name', name); - console.log('hash', hash); - console.log('parsed', parsed); - common.getFileSize(secret.channel, function (e, data) { - console.warn("GET FILE SIZE"); - console.log("data", data); - var todo = function (file) { - console.warn("TODO"); - console.log("file", file); - if (queue.inProgress) { return; } - queue.inProgress = true; - var id = file.id; - - var $row = $table.find('tr[id="'+id+'"]'); - var $pv = $row.find('.cp-fileupload-table-progress-value'); - var $pb = $row.find('.cp-fileupload-table-progress-container'); - var $pc = $row.find('.cp-fileupload-table-progress'); - var $link = $row.find('.cp-fileupload-table-link'); - - var done = function () { - $row.find('.cp-fileupload-table-cancel').text('-'); - queue.inProgress = false; - queue.next(); - }; - - var updateDLProgress = function (progressValue) { - var text = Math.round(progressValue*100) + '%'; - text += ' ('+ Messages.download_step1 +'...)'; - $pv.text(text); - $pb.css({ - width: progressValue * $pc.width()+'px' - }); - }; - var updateProgress = function (progressValue) { - var text = Math.round(progressValue*100) + '%'; - text += progressValue === 1 ? '' : ' ('+ Messages.download_step2 +'...)'; - $pv.text(text); - $pb.css({ - width: progressValue * $pc.width()+'px' - }); - }; - - var dl = module.downloadFile(fData, function (err, obj) { - $link.prepend($('', {'class': 'fa fa-external-link'})) - .attr('href', '#') - .click(function (e) { - e.preventDefault(); - obj.download(); - }); - done(); - if (obj) { obj.download(); } - cb(err, obj); - }, { - src: src, - key: key, - name: name, - progress: updateDLProgress, - progress2: updateProgress, - }); - - var $cancel = $('', {'class': 'cp-fileupload-table-cancel-button fa fa-times'}).click(function () { - dl.cancel(); - $cancel.remove(); - $row.find('.cp-fileupload-table-progress-value').text(Messages.upload_cancelled); - done(); - }); - $row.find('.cp-fileupload-table-cancel').html('').append($cancel); - }; + common.getFileSize(fData.channel, function (e, data) { queue.push({ - dl: todo, + dl: function (file) { updateProgressbar(file, fData, MakeBackup.downloadFile, cb); }, size: data, name: name }); @@ -535,70 +520,8 @@ define([ }; File.downloadPad = function (pData, cb) { - console.error("SFC FILE -DOWNLOAD PAD"); - console.log("pData", pData); - var todo = function (file) { - console.warn("TODO"); - console.log("file", file); - if (queue.inProgress) { return; } - queue.inProgress = true; - var id = file.id; - - var $row = $table.find('tr[id="'+id+'"]'); - var $pv = $row.find('.cp-fileupload-table-progress-value'); - var $pb = $row.find('.cp-fileupload-table-progress-container'); - var $pc = $row.find('.cp-fileupload-table-progress'); - var $link = $row.find('.cp-fileupload-table-link'); - - var done = function () { - $row.find('.cp-fileupload-table-cancel').text('-'); - queue.inProgress = false; - queue.next(); - }; - - var updateDLProgress = function (progressValue) { - var text = Math.round(progressValue*100) + '%'; - text += ' ('+ Messages.download_step1 +'...)'; - $pv.text(text); - $pb.css({ - width: progressValue * $pc.width()+'px' - }); - }; - var updateProgress = function (progressValue) { - var text = Math.round(progressValue*100) + '%'; - text += progressValue === 1 ? '' : ' ('+ Messages.download_step2 +'...)'; - $pv.text(text); - $pb.css({ - width: progressValue * $pc.width()+'px' - }); - }; - - var dl = module.downloadPad(pData, function (err, obj) { - $link.prepend($('', {'class': 'fa fa-external-link'})) - .attr('href', '#') - .click(function (e) { - e.preventDefault(); - obj.download(); - }); - done(); - if (obj) { obj.download(); } - cb(err, obj); - }, { - common: common, - progress: updateDLProgress, - progress2: updateProgress, - }); - - var $cancel = $('', {'class': 'cp-fileupload-table-cancel-button fa fa-times'}).click(function () { - dl.cancel(); - $cancel.remove(); - $row.find('.cp-fileupload-table-progress-value').text(Messages.upload_cancelled); - done(); - }); - $row.find('.cp-fileupload-table-cancel').html('').append($cancel); - }; queue.push({ - dl: todo, + dl: function (file) { updateProgressbar(file, pData, MakeBackup.downloadPad, cb); }, size: 0, name: pData.title, }); @@ -607,135 +530,6 @@ define([ return File; }; - module.downloadFile = function (fData, cb, obj) { - var cancelled = false; - var cancel = function () { - cancelled = true; - }; - var src, key, name; - if (obj && obj.src && obj.key && obj.name) { - src = obj.src; - key = obj.key; - name = obj.name; - } else { - var parsed = Hash.parsePadUrl(fData.href || fData.roHref); - var hash = parsed.hash; - name = fData.filename || fData.title; - var secret = Hash.getSecrets('file', hash, fData.password); - src = Hash.getBlobPathFromHex(secret.channel); - key = secret.keys && secret.keys.cryptKey; - } - Util.fetch(src, function (err, u8) { - if (cancelled) { return; } - if (err) { return void cb('E404'); } - FileCrypto.decrypt(u8, key, function (err, res) { - if (cancelled) { return; } - if (err) { return void cb(err); } - if (!res.content) { return void cb('EEMPTY'); } - var dl = function () { - saveAs(res.content, name || res.metadata.name); - }; - cb(null, { - metadata: res.metadata, - content: res.content, - download: dl - }); - }, obj && obj.progress2); - }, obj && obj.progress); - return { - cancel: cancel - }; - }; - - - var getPad = function (common, data, cb) { - var sframeChan = common.getSframeChannel(); - sframeChan.query("Q_CRYPTGET", data, function (err, obj) { - if (err) { return void cb(err); } - if (obj.error) { return void cb(obj.error); } - cb(null, obj.data); - }, { timeout: 60000 }); - }; - - var transform = function (type, sjson, cb) { - console.error("SFCfile - transform"); - console.log('type', type); - console.log('sjson', sjson); - - var result = { - data: sjson, - ext: '.json', - }; - console.log('result', result); - var json; - try { - json = JSON.parse(sjson); - } catch (e) { - return void cb(result); - } - console.log('json', json); - var path = '/' + type + '/export.js'; - require([path], function (Exporter) { - Exporter.main(json, function (data) { - result.ext = Exporter.ext || ''; - result.data = data; - cb(result); - }); - }, function () { - cb(result); - }); - }; - - module.downloadPad = function (pData, cb, obj) { - console.error("SFC file - downloadPad"); - console.log(pData, pData); - var cancelled = false; - var cancel = function () { - cancelled = true; - }; - - var parsed = Hash.parsePadUrl(pData.href || pData.roHref); - var hash = parsed.hash; - var name = pData.filename || pData.title; - var opts = { - password: pData.password - }; - console.log('parsed', parsed); - console.log('hash', hash); - console.log('name', name); - console.log('opts', opts); - obj.progress(0); - getPad(obj.common, { - hash: parsed.hash, - opts: opts - }, function (err, val) { - if (cancelled) { return; } - if (err) { return; } - if (!val) { return; } - console.log('val', val); - obj.progress(1); - - transform(parsed.type, val, function (res) { - console.error("transform callback"); - console.log('res', res); - if (cancelled) { return; } - if (!res.data) { return; } - obj.progress2(1); - var dl = function () { - saveAs(res.data, Util.fixFileName(name)); - }; - cb(null, { - metadata: res.metadata, - content: res.data, - download: dl - }); - console.log('DONE ---- ' + name); - }); - }); - return { - cancel: cancel - }; - }; return module; }); diff --git a/www/common/sframe-common.js b/www/common/sframe-common.js index f93021bd3..82c71ace2 100644 --- a/www/common/sframe-common.js +++ b/www/common/sframe-common.js @@ -459,6 +459,14 @@ define([ }); }; */ + funcs.getPad = function (data, cb) { + ctx.sframeChan.query("Q_CRYPTGET", data, function (err, obj) { + if (err) { return void cb(err); } + if (obj.error) { return void cb(obj.error); } + cb(null, obj.data); + }, { timeout: 60000 }); + }; + funcs.gotoURL = function (url) { ctx.sframeChan.event('EV_GOTO_URL', url); }; funcs.openURL = function (url) { ctx.sframeChan.event('EV_OPEN_URL', url); }; funcs.openUnsafeURL = function (url) { diff --git a/www/drive/inner.js b/www/drive/inner.js index a611a7829..b6e480a9d 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -3472,32 +3472,20 @@ define([ var downloadFolder = function (folderElement, folderName) { console.warn("downloadFolder"); var todo = function (data) { - var getPad = function (data, cb) { - sframeChan.query("Q_CRYPTGET", data, function (err, obj) { - if (err) { return void cb(err); } - if (obj.error) { return void cb(obj.error); } - cb(null, obj.data); - }, { timeout: 60000 }); - }; - data.folder = folderElement; folderName = Util.fixFileName(folderName) + '.zip'; console.log("data", data); console.log("folderName", folderName); - Backup.create(data, getPad, function (blob, errors) { + Backup.create(data, common.getPad, function (blob, errors) { console.log("blob", blob); window.saveAs(blob, folderName); console.error(errors); }, function () {}); }; - sframeChan.query("Q_SETTINGS_DRIVE_GET", "full", function (err, data) { - console.warn("sframeChan.query Q_SETTINGS_DRIVE_GET callback"); - console.log("err", err); - console.log("data", data); - if (err) { return void console.error(err); } - if (data.error) { return void console.error(data.error); } - todo(data); + todo({ + uo: proxy, + sf: folders, }); }; @@ -3594,10 +3582,8 @@ define([ if (paths.length !== 1) { return; } var path = paths[0]; el = manager.find(path.path); - console.log("paths", paths); console.log("el", el); console.log('path', path); - console.log("APP", APP); // folder if (manager.isFolder(el)) { // folder @@ -3625,7 +3611,6 @@ define([ else if (manager.isFile(el)) { // imported file if (path.element.is(".cp-border-color-file")) { - console.log("--isFile--"); data = manager.getFileData(el); APP.FM.downloadFile(data, function (err, obj) { console.log(err, obj); @@ -3634,9 +3619,7 @@ define([ } // pad else { - console.log("--isPad--"); data = manager.getFileData(el); - console.log("data:", data); APP.FM.downloadPad(data, function (err, obj) { console.log(err, obj); console.log('DONE'); diff --git a/www/drive/main.js b/www/drive/main.js index c4918cf9d..907be7451 100644 --- a/www/drive/main.js +++ b/www/drive/main.js @@ -63,31 +63,6 @@ define([ Utils.LocalStore.clearThumbnail(); window.location.reload(); }); - sframeChan.on('Q_SETTINGS_DRIVE_GET', function (d, cb) { - Cryptpad.getUserObject(function (obj) { - if (obj.error) { return void cb(obj); } - if (d === "full") { - // We want shared folders too - var result = { - uo: obj, - sf: {} - }; - if (!obj.drive || !obj.drive.sharedFolders) { return void cb(result); } - Utils.nThen(function (waitFor) { - Object.keys(obj.drive.sharedFolders).forEach(function (id) { - Cryptpad.getSharedFolder(id, waitFor(function (obj) { - result.sf[id] = obj; - })); - }); - }).nThen(function () { - cb(result); - }); - return; - } - // We want only the user object - cb(obj); - }); - }); sframeChan.on('Q_DRIVE_USEROBJECT', function (data, cb) { Cryptpad.userObjectCommand(data, cb); }); diff --git a/www/settings/inner.js b/www/settings/inner.js index 37143a617..a7a006b23 100644 --- a/www/settings/inner.js +++ b/www/settings/inner.js @@ -1082,18 +1082,9 @@ define([ var exportDrive = function () { Feedback.send('FULL_DRIVE_EXPORT_START'); var todo = function (data, filename) { - var getPad = function (data, cb) { - sframeChan.query("Q_CRYPTGET", data, function (err, obj) { - if (err) { return void cb(err); } - if (obj.error) { return void cb(obj.error); } - cb(null, obj.data); - }, { timeout: 60000 }); - }; - var ui = createExportUI(); - var bu = Backup.create(data, getPad, function (blob, errors) { - console.log(blob); + var bu = Backup.create(data, common.getPad, function (blob, errors) { saveAs(blob, filename); sframeChan.event('EV_CRYPTGET_DISCONNECT'); ui.complete(function () { From f017215300733b23fd19288e6e77f914c42c3144 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Wed, 14 Aug 2019 15:42:32 +0200 Subject: [PATCH 08/11] Add progress bar for pad download --- www/common/make-backup.js | 13 +++++++++---- www/common/sframe-common-file.js | 1 + www/common/sframe-common-outer.js | 7 ++++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/www/common/make-backup.js b/www/common/make-backup.js index 0d50dfde4..3e9426be5 100644 --- a/www/common/make-backup.js +++ b/www/common/make-backup.js @@ -92,7 +92,15 @@ define([ var opts = { password: pData.password }; - updateProgress.progress(0); + var done = false; + ctx.sframeChan.on("EV_CRYPTGET_PROGRESS", function (data) { + if (done || data.hash !== parsed.hash) { return; } + updateProgress.progress(data.progress); + if (data.progress === 1) { + done = true; + updateProgress.progress2(1); + } + }); ctx.get({ hash: parsed.hash, opts: opts @@ -100,12 +108,9 @@ define([ if (cancelled) { return; } if (err) { return; } if (!val) { return; } - updateProgress.progress(1); - transform(ctx, parsed.type, val, function (res) { if (cancelled) { return; } if (!res.data) { return; } - updateProgress.progress2(1); var dl = function () { saveAs(res.data, Util.fixFileName(name)); }; diff --git a/www/common/sframe-common-file.js b/www/common/sframe-common-file.js index da26531c1..0836a8553 100644 --- a/www/common/sframe-common-file.js +++ b/www/common/sframe-common-file.js @@ -482,6 +482,7 @@ define([ var ctx = { get: common.getPad, + sframeChan: sframeChan, }; var dl = downloadFunction(ctx, data, function (err, obj) { $link.prepend($('', {'class': 'fa fa-external-link'})) diff --git a/www/common/sframe-common-outer.js b/www/common/sframe-common-outer.js index 0103cdbaf..44fcde159 100644 --- a/www/common/sframe-common-outer.js +++ b/www/common/sframe-common-outer.js @@ -880,7 +880,12 @@ define([ error: err, data: val }); - }, data.opts); + }, data.opts, function (progress) { + sframeChan.event("EV_CRYPTGET_PROGRESS", { + hash: data.hash, + progress: progress, + }); + }); }; //return void todo(); if (i > 30) { From a0d85c6e34e69b03b67daafb667295ba3e6e8562 Mon Sep 17 00:00:00 2001 From: ClemDee Date: Wed, 14 Aug 2019 17:27:37 +0200 Subject: [PATCH 09/11] Export folder is now working in drive --- www/common/make-backup.js | 26 ++++++++++++++++++++-- www/common/sframe-common-file.js | 37 +++++++++++++++++++++++--------- www/drive/inner.js | 27 +++++++---------------- 3 files changed, 59 insertions(+), 31 deletions(-) diff --git a/www/common/make-backup.js b/www/common/make-backup.js index 3e9426be5..d9fb62d96 100644 --- a/www/common/make-backup.js +++ b/www/common/make-backup.js @@ -282,11 +282,12 @@ define([ max: 0, done: 0 }; + var filesData = data.sharedFolderId && ctx.sf[data.sharedFolderId] ? ctx.sf[data.sharedFolderId].filesData : ctx.data.filesData; progress('reading', -1); nThen(function (waitFor) { ctx.waitFor = waitFor; var zipRoot = ctx.zip.folder('Root'); - makeFolder(ctx, ctx.folder, zipRoot, ctx.data.filesData); + makeFolder(ctx, ctx.folder, zipRoot, filesData); progress('download', {}); }).nThen(function () { console.log(ctx.zip); @@ -308,11 +309,32 @@ define([ }; + var _downloadFolder = function (ctx, data, cb, updateProgress) { + create(data, ctx.get, function (blob, errors) { + console.error(errors); // TODO show user errors + var dl = function () { + saveAs(blob, data.folderName); + }; + cb(null, {download: dl}); + }, function (state, progress) { + if (state === "reading") { + updateProgress.folderProgress(0); + } + if (state === "download") { + if (typeof progress.current !== "number") { return; } + updateProgress.folderProgress(progress.current / progress.max); + } + else if (state === "done") { + updateProgress.folderProgress(1); + } + }); + }; + return { create: create, downloadFile: _downloadFile, downloadPad: _downloadPad, - + downloadFolder: _downloadFolder, }; }); diff --git a/www/common/sframe-common-file.js b/www/common/sframe-common-file.js index 0836a8553..32f031010 100644 --- a/www/common/sframe-common-file.js +++ b/www/common/sframe-common-file.js @@ -471,7 +471,7 @@ define([ width: progressValue * $pc.width() + 'px' }); }; - var updateProgress = function (progressValue) { + var updateDecryptProgress = function (progressValue) { var text = Math.round(progressValue*100) + '%'; text += progressValue === 1 ? '' : ' (' + Messages.download_step2 + '...)'; $pv.text(text); @@ -479,12 +479,19 @@ define([ width: progressValue * $pc.width()+'px' }); }; + var updateProgress = function (progressValue) { + var text = Math.round(progressValue*100) + '%'; + $pv.text(text); + $pb.css({ + width: progressValue * $pc.width()+'px' + }); + }; var ctx = { get: common.getPad, sframeChan: sframeChan, }; - var dl = downloadFunction(ctx, data, function (err, obj) { + downloadFunction(ctx, data, function (err, obj) { $link.prepend($('', {'class': 'fa fa-external-link'})) .attr('href', '#') .click(function (e) { @@ -496,16 +503,18 @@ define([ cb(err, obj); }, { progress: updateDLProgress, - progress2: updateProgress, + progress2: updateDecryptProgress, + folderProgress: updateProgress, }); - var $cancel = $('', {'class': 'cp-fileupload-table-cancel-button fa fa-times'}).click(function () { - dl.cancel(); - $cancel.remove(); - $row.find('.cp-fileupload-table-progress-value').text(Messages.upload_cancelled); - done(); - }); - $row.find('.cp-fileupload-table-cancel').html('').append($cancel); +// var $cancel = $('', {'class': 'cp-fileupload-table-cancel-button fa fa-times'}).click(function () { +// dl.cancel(); +// $cancel.remove(); +// $row.find('.cp-fileupload-table-progress-value').text(Messages.upload_cancelled); +// done(); +// }); +// $row.find('.cp-fileupload-table-cancel').html('').append($cancel); + $row.find('.cp-fileupload-table-cancel').html(''); }; @@ -528,6 +537,14 @@ define([ }); }; + File.downloadFolder = function (data, cb) { + queue.push({ + dl: function (file) { updateProgressbar(file, data, MakeBackup.downloadFolder, cb); }, + size: 0, + name: data.folderName, + }); + }; + return File; }; diff --git a/www/drive/inner.js b/www/drive/inner.js index 1745fa2f7..c75a9a1a6 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -3597,19 +3597,16 @@ define([ }; - var downloadFolder = function (folderElement, folderName) { - console.warn("downloadFolder"); + var downloadFolder = function (folderElement, folderName, sfId) { var todo = function (data) { data.folder = folderElement; - folderName = Util.fixFileName(folderName) + '.zip'; - console.log("data", data); - console.log("folderName", folderName); + data.sharedFolderId = sfId; + data.folderName = Util.fixFileName(folderName) + '.zip'; - Backup.create(data, common.getPad, function (blob, errors) { - console.log("blob", blob); - window.saveAs(blob, folderName); - console.error(errors); - }, function () {}); + APP.FM.downloadFolder(data, function (err, obj) { + console.log(err, obj); + console.log('DONE'); + }); }; todo({ uo: proxy, @@ -3711,29 +3708,21 @@ define([ if (paths.length !== 1) { return; } var path = paths[0]; el = manager.find(path.path); - console.log("el", el); - console.log('path', path); // folder if (manager.isFolder(el)) { // folder var name, folderEl; if (!manager.isSharedFolder(el)) { - console.log("--isFolder--"); name = path.path[path.path.length - 1]; - console.log('name', name); folderEl = el; downloadFolder(folderEl, name); } // shared folder else { - console.log("--isSharedFolder--"); data = manager.getSharedFolderData(el); name = data.title; folderEl = manager.find(path.path.concat("root")); - console.log("folderEl", folderEl); - console.log("data:", data); - console.log('name', name); - downloadFolder(folderEl, name); + downloadFolder(folderEl, name, el); } } // file From 792ce4133b89db06882bca23e123f9a7bf0bc5fb Mon Sep 17 00:00:00 2001 From: ClemDee Date: Wed, 14 Aug 2019 17:54:01 +0200 Subject: [PATCH 10/11] Fix a little thing that disappeared with the merge --- www/drive/inner.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/www/drive/inner.js b/www/drive/inner.js index 456b3588d..e0c0167de 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -1095,9 +1095,6 @@ define([ // We can only open parent in virtual categories hide.push('openparent'); } - if (!$element.is('.cp-border-color-file')) { - hide.push('download'); - } if ($element.is('.cp-app-drive-element-file')) { // No folder in files hide.push('color'); From ba24cde76dd6e4042486c0878b87a730702d4efb Mon Sep 17 00:00:00 2001 From: yflory Date: Fri, 16 Aug 2019 10:23:58 +0200 Subject: [PATCH 11/11] Fix cryptget not stopping chainpad-netflux when done --- www/common/cryptget.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/common/cryptget.js b/www/common/cryptget.js index 9ca05164c..1fc248a19 100644 --- a/www/common/cryptget.js +++ b/www/common/cryptget.js @@ -21,9 +21,9 @@ define([ S.leave(); } catch (e) { console.log(e); } } - if (S.session && S.session.stop) { + if (S.realtime && S.realtime.stop) { try { - S.session.stop(); + S.realtime.stop(); } catch (e) { console.error(e); } } var abort = Util.find(S, ['session', 'realtime', 'abort']);