You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ti...@apache.org on 2012/08/16 00:25:51 UTC
[3/3] js commit: [CB-1233] - actually include the file transfer file
[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 <ti...@nitobi.com>
Authored: Wed Aug 15 15:23:13 2012 -0700
Committer: Tim Kim <ti...@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);