[CB-1233] - actually include the file transfer file
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/03f21d41 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/03f21d41 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/03f21d41 Branch: refs/heads/master Commit: 03f21d410bfa7f26c0cbd8ebb5682fc88cf59fca Parents: a637a78 Author: Tim Kim <tim....@nitobi.com> Authored: Wed Aug 15 15:23:13 2012 -0700 Committer: Tim Kim <tim....@nitobi.com> Committed: Wed Aug 15 15:24:57 2012 -0700 ---------------------------------------------------------------------- lib/playbook/plugin/playbook/FileTransfer.js | 140 +++++++++++++++ lib/playbook/plugin/playbook/FileWriter.js | 2 +- .../plugin/playbook/resolveLocalFileSystemURI.js | 2 +- 3 files changed, 142 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/03f21d41/lib/playbook/plugin/playbook/FileTransfer.js ---------------------------------------------------------------------- diff --git a/lib/playbook/plugin/playbook/FileTransfer.js b/lib/playbook/plugin/playbook/FileTransfer.js new file mode 100644 index 0000000..4465621 --- /dev/null +++ b/lib/playbook/plugin/playbook/FileTransfer.js @@ -0,0 +1,140 @@ +var cordova = require('cordova'), +resolveLocalFileSystemURI = require('cordova/plugin/playbook/resolveLocalFileSystemURI'), +FileTransferError = require('cordova/plugin/FileTransferError'), +FileUploadResult = require('cordova/plugin/FileUploadResult'), +FileEntry = require('cordova/plugin/FileEntry'); + +var validURLProtocol = new RegExp('^(https?|ftp):\/\/'); + +function getParentPath(filePath) { + var pos = filePath.lastIndexOf('/'); + return filePath.substring(0, pos + 1); +} + +function getFileName(filePath) { + var pos = filePath.lastIndexOf('/'); + return filePath.substring(pos + 1); +} + +module.exports = { + upload: function (args, win, fail) { + var filePath = args[0], + server = args[1], + fileKey = args[2], + fileName = args[3], + mimeType = args[4], + params = args[5], + trustAllHosts = args[6], + chunkedMode = args[7], + headers = args[8]; + + if(!validURLProtocol.exec(server)){ + return { "status" : cordova.callbackStatus.ERROR, "message" : new FileTransferError(FileTransferError.INVALID_URL_ERR) }; + } + + resolveLocalFileSystemURI(filePath, fileWin, fail); + + function fileWin(entryObject){ + blackberry.io.file.readFile(filePath, readWin, false); + } + + function readWin(filePath, blobFile){ + var fd = new FormData(); + + fd.append(fileKey, blobFile, fileName); + for (var prop in params) { + if(params.hasOwnProperty(prop)) { + fd.append(prop, params[prop]); + } + } + + var xhr = new XMLHttpRequest(); + xhr.open("POST", server); + xhr.onload = function(evt) { + if (xhr.status == 200) { + var result = new FileUploadResult(); + result.bytesSent = xhr.response.length; + result.responseCode = xhr.status; + result.response = xhr.response; + win(result); + } else if (xhr.status == 404) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, null, null, xhr.status)); + } else if (xhr.status == 403) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, null, null, xhr.status)); + } else { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, null, null, xhr.status)); + } + }; + xhr.ontimeout = function(evt) { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, null, null, xhr.status)); + }; + + if(headers){ + for(var i in headers){ + xhr.setRequestHeader(i, headers[i]); + } + } + xhr.send(fd); + } + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + }, + + download: function(args, win, fail){ + var url = args[0], + filePath = args[1]; + + if(!validURLProtocol.exec(url)){ + return { "status" : cordova.callbackStatus.ERROR, "message" : new FileTransferError(FileTransferError.INVALID_URL_ERR) }; + } + + var xhr = new XMLHttpRequest(); + + function writeFile(fileEntry) { + fileEntry.createWriter(function(writer) { + writer.onwriteend = function(evt) { + if (!evt.target.error) { + win(new FileEntry(fileEntry.name, fileEntry.toURL())); + } else { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + } + }; + + writer.onerror = function(evt) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }; + + var blob = blackberry.utils.stringToBlob(xhr.response); + writer.write(blob); + + }, + function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + } + + xhr.onreadystatechange = function () { + if (xhr.readyState == xhr.DONE) { + if (xhr.status == 200 && xhr.response) { + resolveLocalFileSystemURI(getParentPath(filePath), function(dir) { + dir.getFile(getFileName(filePath), {create: true}, writeFile, function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + }, function(error) { + fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR)); + }); + } else if (xhr.status == 404) { + fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, null, null, xhr.status)); + } else { + fail(new FileTransferError(FileTransferError.CONNECTION_ERR, null, null, xhr.status)); + } + } + }; + + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.send(); + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "WebWorks Is On It" }; + } +}; http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/03f21d41/lib/playbook/plugin/playbook/FileWriter.js ---------------------------------------------------------------------- diff --git a/lib/playbook/plugin/playbook/FileWriter.js b/lib/playbook/plugin/playbook/FileWriter.js index a8cf4f8..3f13d24 100644 --- a/lib/playbook/plugin/playbook/FileWriter.js +++ b/lib/playbook/plugin/playbook/FileWriter.js @@ -113,7 +113,7 @@ FileWriter.prototype.write = function(text) { me.position = newText.length; me.length = me.position; - + if (typeof me.onwrite === "function") { me.onwrite(new ProgressEvent("write", {"target":me})); } http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/03f21d41/lib/playbook/plugin/playbook/resolveLocalFileSystemURI.js ---------------------------------------------------------------------- diff --git a/lib/playbook/plugin/playbook/resolveLocalFileSystemURI.js b/lib/playbook/plugin/playbook/resolveLocalFileSystemURI.js index 55758cc..cbca1ac 100644 --- a/lib/playbook/plugin/playbook/resolveLocalFileSystemURI.js +++ b/lib/playbook/plugin/playbook/resolveLocalFileSystemURI.js @@ -42,7 +42,7 @@ module.exports = function(uri, successCallback, errorCallback) { fail(FileError.NOT_FOUND_ERR); return; } - + // decode uri if % char found if(uri.indexOf('%')>=0){ uri = decodeURI(uri);