From 11d9e1fef2cfcc83b7e7becb80b1b7c6b3ef02fc Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 6 Jul 2015 07:50:54 -0400 Subject: [PATCH] feature(rest) streamPack: add one-click folder download --- lib/client/menu.js | 10 ++++++---- lib/server/rest.js | 45 ++++++++++++++++++++++++++++++--------------- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/lib/client/menu.js b/lib/client/menu.js index b0d6f94a..f2181bbd 100644 --- a/lib/client/menu.js +++ b/lib/client/menu.js @@ -270,7 +270,7 @@ var CloudCmd, Util, DOM, CloudFunc, MenuIO; } function download() { - var TIME = 1000, + var TIME = 30 * 1000, apiURL = CloudFunc.apiURL, FS = CloudFunc.FS, date = Date.now(), @@ -281,12 +281,14 @@ var CloudCmd, Util, DOM, CloudFunc, MenuIO; selected = DOM.isSelected(file), path = DOM.getCurrentPath(file), id = DOM.load.getIdBySrc(path), - isDir = DOM.isCurrentIsDir(file), - dir = isDir ? '&&json' : ''; + isDir = DOM.isCurrentIsDir(file); CloudCmd.log('downloading file ' + path + '...'); - path = apiURL + FS + path + '?download' + dir; + if (isDir) + path = apiURL + '/pack' + path + '.tar.gz'; + else + path = apiURL + FS + path + '?download'; element = DOM.load({ id : id + '-' + date, diff --git a/lib/server/rest.js b/lib/server/rest.js index 049cf0f1..dd646306 100644 --- a/lib/server/rest.js +++ b/lib/server/rest.js @@ -135,25 +135,40 @@ if (p.name[0] === '/') cmd = p.name.replace('/', ''); - switch(cmd) { - case '': - p.data = json.stringify({ - info: 'Cloud Commander API v1' - }); + if (/^pack/.test(cmd)) { + cmd = cmd.replace(/^pack/, ''); + streamPack(cmd, p.response, callback); + } else { + switch(cmd) { + case '': + p.data = json.stringify({ + info: 'Cloud Commander API v1' + }); + + callback(null, {name: 'api.json'}, p.data); + break; - callback(null, {name: 'api.json'}, p.data); - break; - - default: - json = { - message: 'Error: command not found!' - }; - - callback(json); - break; + default: + json = { + message: 'Error: command not found!' + }; + + callback(json); + break; + } } } + function streamPack(cmd, response, fn) { + var filename = cmd.replace(/\.tar\.gz$/, ''), + dir = path.dirname(filename), + names = [ + path.basename(filename) + ]; + + operation('pack', dir, response, names, fn); + } + function auth(code, callback) { var storage = binom('storage', Modules), gh = binom('GitHub', storage),