From fd96fc8f0143f724362363fa0629e5b558641b26 Mon Sep 17 00:00:00 2001 From: Chris Brown Date: Tue, 17 May 2016 14:40:29 +0100 Subject: [PATCH] When downloading several files or folders, name the archive 'item1[+n].zip', and ensure that filenames are encoded correctly --- package.json | 1 + plugins/c9.ide.download/download.js | 14 ++++++++++---- plugins/c9.vfs.client/vfs_client.js | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 4317d547..157706fd 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ ], "c9plugins": { "c9.ide.language": "#79bcb2fe06", + "c9.ide.language.core": "#undefined", "c9.ide.language.css": "#be07d72209", "c9.ide.language.generic": "#3949510863", "c9.ide.language.html": "#22fdc74869", diff --git a/plugins/c9.ide.download/download.js b/plugins/c9.ide.download/download.js index dd6a585f..ab8e5280 100644 --- a/plugins/c9.ide.download/download.js +++ b/plugins/c9.ide.download/download.js @@ -91,24 +91,30 @@ define(function(require, exports, module) { } function downloadProject() { - vfs.download("/", info.getWorkspace().name + getArchiveFileExtension()); + vfs.download("/", makeArchiveFilename(info.getWorkspace().name)); } function downloadPaths(paths) { - vfs.download(paths, info.getWorkspace().name + getArchiveFileExtension()); + var lastPart = paths[0].match(/([^\/]*)\/?$/)[1]; + var filename = lastPart ? (lastPart + "[+" + (paths.length - 1) + "]") : info.getWorkspace().name; + vfs.download(paths, makeArchiveFilename(filename)); } function downloadFolder(path) { var withTrailingSlash = path.replace(/\/*$/, "/"); var parts = withTrailingSlash.split("/"); - var lastPart = parts[parts.length - 2]; - vfs.download(withTrailingSlash, lastPart + getArchiveFileExtension()); + var folderName = parts[parts.length - 2]; + vfs.download(withTrailingSlash, makeArchiveFilename(folderName)); } function downloadFile(path) { vfs.download(path.replace(/\/*$/, ""), null, true); } + function makeArchiveFilename(filename) { + return filename + getArchiveFileExtension(); + } + function getArchiveFileExtension() { var downloadFilesAs = settings.get(SETTING_PATH); if (downloadFilesAs === 'auto' || !downloadFilesAs) { diff --git a/plugins/c9.vfs.client/vfs_client.js b/plugins/c9.vfs.client/vfs_client.js index 0fd09d42..44f3b1a1 100644 --- a/plugins/c9.vfs.client/vfs_client.js +++ b/plugins/c9.vfs.client/vfs_client.js @@ -193,12 +193,12 @@ define(function(require, exports, module) { extraPaths = path; path = path[0]; extraPaths = "," + extraPaths.map(function(p) { - return p[0] == path[0] && p != path ? escape(p) : ""; + return p[0] == path[0] && p != path ? encodeURI(p) : ""; }).filter(Boolean).join(","); } window.open(vfsUrl(path) + extraPaths + "?download" - + (filename ? "=" + escape(filename) : "") + + (filename ? "=" + encodeURIComponent(filename) : "") + (isfile ? "&isfile=1" : "")); }