You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bh...@apache.org on 2014/05/08 20:05:08 UTC

git commit: CB-3440 [BlackBerry10] Update implementation to use modules from file plugin

Repository: cordova-plugin-file-transfer
Updated Branches:
  refs/heads/master 67ae8d885 -> c6bafea30


CB-3440 [BlackBerry10] Update implementation to use modules from file plugin


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/commit/c6bafea3
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/tree/c6bafea3
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/diff/c6bafea3

Branch: refs/heads/master
Commit: c6bafea30e273d617e34bbcf6feac033263aa666
Parents: 67ae8d8
Author: Bryan Higgins <bh...@blackberry.com>
Authored: Thu May 8 14:00:02 2014 -0400
Committer: Bryan Higgins <bh...@blackberry.com>
Committed: Thu May 8 14:01:06 2014 -0400

----------------------------------------------------------------------
 plugin.xml                            |  12 +-
 www/blackberry10/FileTransferProxy.js |  36 ++++
 www/blackberry10/XHRImplementation.js | 201 ----------------------
 www/blackberry10/xhrFileTransfer.js   | 259 +++++++++++++++++++++++++++++
 4 files changed, 304 insertions(+), 204 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/blob/c6bafea3/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index 333123b..96e0bdd 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -80,14 +80,20 @@
         <source-file src="src/ubuntu/file-transfer.cpp" />
     </platform>
 
+    <!-- blackberry10 -->
     <platform name="blackberry10">
         <config-file target="www/config.xml" parent="/widget">
             <feature name="FileTransfer" value="FileTransfer"></feature>
         </config-file>
-        <js-module src="www/blackberry10/FileTransfer.js" name="BB10FileTransfer">
-            <clobbers target="window.FileTransfer"></clobbers>
+        <js-module src="www/blackberry10/FileTransferProxy.js" name="FileTransferProxy" >
+            <runs />
         </js-module>
-        <js-module src="www/blackberry10/XHRImplementation.js" name="BB10XHRImplementation"></js-module>
+        <js-module src="www/blackberry10/xhrFileTransfer.js" name="xhrFileTransfer" />
+        <!--
+        <js-module src="www/blackberry10/abort.js" name="abortProxy" />
+        <js-module src="www/blackberry10/download.js" name="downloadProxy" />
+        <js-module src="www/blackberry10/upload.js" name="uploadProxy" />
+        -->
     </platform>
 
     <!-- ios -->

http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/blob/c6bafea3/www/blackberry10/FileTransferProxy.js
----------------------------------------------------------------------
diff --git a/www/blackberry10/FileTransferProxy.js b/www/blackberry10/FileTransferProxy.js
new file mode 100644
index 0000000..438999a
--- /dev/null
+++ b/www/blackberry10/FileTransferProxy.js
@@ -0,0 +1,36 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/*
+ * FileTransferProxy
+ *
+ * Register all FileTransfer exec calls to be handled by proxy
+ */
+
+var xhrFileTransfer = require('org.apache.cordova.file-transfer.xhrFileTransfer');
+
+module.exports = {
+    abort: xhrFileTransfer.abort,
+    download: xhrFileTransfer.download,
+    upload: xhrFileTransfer.upload
+};
+
+require('cordova/exec/proxy').add('FileTransfer', module.exports);

http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/blob/c6bafea3/www/blackberry10/XHRImplementation.js
----------------------------------------------------------------------
diff --git a/www/blackberry10/XHRImplementation.js b/www/blackberry10/XHRImplementation.js
deleted file mode 100644
index 974e06f..0000000
--- a/www/blackberry10/XHRImplementation.js
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-/*global Blob:false */
-var cordova = require('cordova'),
-    nativeResolveLocalFileSystemURI = function(uri, success, fail) {
-        if (uri.substring(0,11) !== "filesystem:") {
-            uri = "filesystem:" + uri;
-        }
-        resolveLocalFileSystemURI(uri, success, fail);
-    },
-    xhr;
-
-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);
-}
-
-function checkURL(url) {
-    return url.indexOf(' ') === -1 ?  true : false;
-}
-
-module.exports = {
-    abort: function () {
-        return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"};
-    },
-
-    upload: function(win, fail, args) {
-        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 (!checkURL(server)) {
-            fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, server, filePath));
-        }
-
-        nativeResolveLocalFileSystemURI(filePath, function(entry) {
-            entry.file(function(file) {
-                function uploadFile(blobFile) {
-                    var fd = new FormData();
-
-                    fd.append(fileKey, blobFile, fileName);
-                    for (var prop in params) {
-                        if(params.hasOwnProperty(prop)) {
-                            fd.append(prop, params[prop]);
-                        }
-                    }
-
-                    xhr = new XMLHttpRequest();
-                    xhr.open("POST", server);
-                    xhr.onload = function(evt) {
-                        if (xhr.status === 200) {
-                            var result = new FileUploadResult();
-                            result.bytesSent = file.size;
-                            result.responseCode = xhr.status;
-                            result.response = xhr.response;
-                            win(result);
-                        } else if (xhr.status === 404) {
-                            fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, server, filePath, xhr.status, xhr.response));
-                        } else {
-                            fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr.status, xhr.response));
-                        }
-                    };
-                    xhr.ontimeout = function(evt) {
-                        fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr.status, xhr.response));
-                    };
-                    xhr.onerror = function () {
-                        fail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, this.status, xhr.response));
-                    };
-                    xhr.onprogress = function (evt) {
-                        win(evt);
-                    };
-
-                    for (var header in headers) {
-                        if (headers.hasOwnProperty(header)) {
-                            xhr.setRequestHeader(header, headers[header]);
-                        }
-                    }
-
-                    xhr.send(fd);
-                }
-
-                var bytesPerChunk;
-                if (chunkedMode === true) {
-                    bytesPerChunk = 1024 * 1024; // 1MB chunk sizes.
-                } else {
-                    bytesPerChunk = file.size;
-                }
-                var start = 0;
-                var end = bytesPerChunk;
-                while (start < file.size) {
-                    var chunk = file.nativeFile.slice(start, end, mimeType);
-                    uploadFile(chunk);
-                    start = end;
-                    end = start + bytesPerChunk;
-                }
-            }, function(error) {
-                fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, server, filePath));
-            });
-        }, function(error) {
-            fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, server, filePath));
-        });
-
-        return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"};
-    },
-
-    download: function (win, fail, args) {
-        var source = args[0],
-            target = args[1],
-            headers = args[4],
-            fileWriter;
-
-        if (!checkURL(source)) {
-            fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target));
-        }
-
-        xhr = new XMLHttpRequest();
-
-        function writeFile(entry) {
-            entry.nativeEntry.createWriter(function (writer) {
-                fileWriter = writer;
-                fileWriter.onwriteend = function (evt) {
-                    if (!evt.target.error) {
-                        win(entry);
-                    } else {
-                        fail(evt.target.error);
-                    }
-                };
-                fileWriter.onerror = function (evt) {
-                    fail(evt.target.error);
-                };
-                fileWriter.write(new Blob([xhr.response]));
-            }, function (error) {
-                fail(error);
-            });
-        }
-
-        xhr.onerror = function (e) {
-            fail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr.status, xhr.response));
-        };
-
-        xhr.onload = function () {
-            if (xhr.readyState === xhr.DONE) {
-                if (xhr.status === 200 && xhr.response) {
-                    nativeResolveLocalFileSystemURI(getParentPath(target), function (dir) {
-                        dir.getFile(getFileName(target), {create: true}, writeFile, function (error) {
-                            fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, source, target, xhr.status, xhr.response));
-                        });
-                    }, function (error) {
-                        fail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, source, target, xhr.status, xhr.response));
-                    });
-                } else if (xhr.status === 404) {
-                    fail(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target, xhr.status, xhr.response));
-                } else {
-                    fail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr.status, xhr.response));
-                }
-            }
-        };
-        xhr.onprogress = function (evt) {
-            win(evt);
-        };
-        xhr.open("GET", source, true);
-        for (var header in headers) {
-            if (headers.hasOwnProperty(header)) {
-                xhr.setRequestHeader(header, headers[header]);
-            }
-        }
-        xhr.responseType = "blob";
-        xhr.send();
-        return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "async"};
-    }
-};

http://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer/blob/c6bafea3/www/blackberry10/xhrFileTransfer.js
----------------------------------------------------------------------
diff --git a/www/blackberry10/xhrFileTransfer.js b/www/blackberry10/xhrFileTransfer.js
new file mode 100644
index 0000000..4c6d590
--- /dev/null
+++ b/www/blackberry10/xhrFileTransfer.js
@@ -0,0 +1,259 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/*global Blob:false */
+var cordova = require('cordova'),
+    resolve = cordova.require('org.apache.cordova.file.resolveLocalFileSystemURIProxy'),
+    requestAnimationFrame = cordova.require('org.apache.cordova.file.bb10RequestAnimationFrame'),
+    xhr = {};
+
+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);
+}
+
+function checkURL(url) {
+    return url.indexOf(' ') === -1 ?  true : false;
+}
+
+module.exports = {
+    abort: function (win, fail, args) {
+        var id = args[0];
+        if (xhr[id]) {
+            xhr[id].abort();
+            if (typeof(win) === 'function') {
+                win();
+            }
+        } else if (typeof(fail) === 'function') {
+            fail();
+        }
+    },
+
+    upload: function(win, fail, args) {
+        var filePath = args[0],
+            server = args[1],
+            fileKey = args[9],
+            fileName = args[3],
+            mimeType = args[4],
+            params = args[5],
+            /*trustAllHosts = args[6],*/
+            chunkedMode = args[7],
+            headers = args[8],
+            onSuccess = function (data) {
+                if (typeof(win) === 'function') {
+                    win(data);
+                }
+            },
+            onFail = function (code) {
+                delete xhr[fileKey];
+                if (typeof(fail) === 'function') {
+                    fail(code);
+                }
+            };
+
+        if (!checkURL(server)) {
+            onFail(new FileTransferError(FileTransferError.INVALID_URL_ERR, server, filePath));
+        }
+
+        xhr[fileKey] = new XMLHttpRequest();
+        xhr[fileKey].onabort = function () {
+            onFail(new FileTransferError(FileTransferError.ABORT_ERR, server, filePath, this.status, xhr[fileKey].response));
+        };
+
+        resolve(function(entry) {
+            requestAnimationFrame(function () {
+                entry.nativeEntry.file(function(file) {
+                    function uploadFile(blobFile) {
+                        var fd = new FormData();
+
+                        fd.append(fileKey, blobFile, fileName);
+                        for (var prop in params) {
+                            if(params.hasOwnProperty(prop)) {
+                                fd.append(prop, params[prop]);
+                            }
+                        }
+
+                        xhr[fileKey].open("POST", server);
+                        xhr[fileKey].onload = function(evt) {
+                            if (xhr[fileKey].status === 200) {
+                                var result = new FileUploadResult();
+                                result.bytesSent = file.size;
+                                result.responseCode = xhr[fileKey].status;
+                                result.response = xhr[fileKey].response;
+                                delete xhr[fileKey];
+                                onSuccess(result);
+                            } else if (xhr[fileKey].status === 404) {
+                                onFail(new FileTransferError(FileTransferError.INVALID_URL_ERR, server, filePath, xhr[fileKey].status, xhr[fileKey].response));
+                            } else {
+                                onFail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr[fileKey].status, xhr[fileKey].response));
+                            }
+                        };
+                        xhr[fileKey].ontimeout = function(evt) {
+                            onFail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, xhr[fileKey].status, xhr[fileKey].response));
+                        };
+                        xhr[fileKey].onerror = function () {
+                            onFail(new FileTransferError(FileTransferError.CONNECTION_ERR, server, filePath, this.status, xhr[fileKey].response));
+                        };
+                        xhr[fileKey].upload.onprogress = function (evt) {
+                            if (evt.loaded > 0) {
+                                onSuccess(evt);
+                            }
+                        };
+
+                        for (var header in headers) {
+                            if (headers.hasOwnProperty(header)) {
+                                xhr[fileKey].setRequestHeader(header, headers[header]);
+                            }
+                        }
+
+                        requestAnimationFrame(function () {
+                            xhr[fileKey].send(fd);
+                        });
+                    }
+
+                    var bytesPerChunk;
+                    if (chunkedMode === true) {
+                        bytesPerChunk = 1024 * 1024; // 1MB chunk sizes.
+                    } else {
+                        bytesPerChunk = file.size;
+                    }
+                    var start = 0;
+                    var end = bytesPerChunk;
+                    while (start < file.size) {
+                        var chunk = file.slice(start, end, mimeType);
+                        uploadFile(chunk);
+                        start = end;
+                        end = start + bytesPerChunk;
+                    }
+                }, function(error) {
+                    onFail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, server, filePath));
+                });
+            });
+        }, function(error) {
+            onFail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, server, filePath));
+        }, [filePath]);
+    },
+
+    download: function (win, fail, args) {
+        var source = args[0],
+            target = args[1],
+            id = args[3],
+            headers = args[4],
+            fileWriter,
+            onSuccess = function (entry) {
+                if (typeof(win) === 'function') {
+                    win(entry);
+                }
+            },
+            onFail = function (error) {
+                var reader;
+                delete xhr[id];
+                if (typeof(fail) === 'function') {
+                    if (error && error.body && typeof(error.body) === 'object') {
+                        reader = new FileReader()._realReader;
+                        reader.onloadend = function () {
+                            error.body = this.result;
+                            fail(error);
+                        };
+                        reader.onerror = function () {
+                            fail(error);
+                        };
+                        reader.readAsText(error.body);
+                    } else {
+                        fail(error);
+                    }
+                }
+            };
+
+        if (!checkURL(source)) {
+            onFail(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target));
+        }
+
+        xhr[id] = new XMLHttpRequest();
+
+        function writeFile(entry) {
+            entry.createWriter(function (writer) {
+                fileWriter = writer;
+                fileWriter.onwriteend = function (evt) {
+                    if (!evt.target.error) {
+                        entry.filesystemName = entry.filesystem.name;
+                        delete xhr[id];
+                        onSuccess(entry);
+                    } else {
+                        onFail(evt.target.error);
+                    }
+                };
+                fileWriter.onerror = function (evt) {
+                    onFail(evt.target.error);
+                };
+                fileWriter.write(new Blob([xhr[id].response]));
+            }, function (error) {
+                onFail(error);
+            });
+        }
+
+        xhr[id].onerror = function (e) {
+            onFail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr[id].status, xhr[id].response));
+        };
+
+        xhr[id].onabort = function (e) {
+            onFail(new FileTransferError(FileTransferError.ABORT_ERR, source, target, xhr[id].status, xhr[id].response));
+        }
+
+        xhr[id].onload = function () {
+            if (xhr[id].readyState === xhr[id].DONE) {
+                if (xhr[id].status === 200 && xhr[id].response) {
+                    resolveLocalFileSystemURI(getParentPath(target), function (dir) {
+                        dir.getFile(getFileName(target), {create: true}, writeFile, function (error) {
+                            onFail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, source, target, xhr[id].status, xhr[id].response));
+                        });
+                    }, function (error) {
+                        onFail(new FileTransferError(FileTransferError.FILE_NOT_FOUND_ERR, source, target, xhr[id].status, xhr[id].response));
+                    });
+                } else if (xhr[id].status === 404) {
+                    onFail(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target, xhr[id].status, xhr[id].response));
+                } else {
+                    onFail(new FileTransferError(FileTransferError.CONNECTION_ERR, source, target, xhr[id].status, xhr[id].response));
+                }
+            }
+        };
+        xhr[id].onprogress = function (evt) {
+            onSuccess(evt);
+        };
+        xhr[id].open("GET", source, true);
+        for (var header in headers) {
+            if (headers.hasOwnProperty(header)) {
+                xhr[id].setRequestHeader(header, headers[header]);
+            }
+        }
+        xhr[id].responseType = "blob";
+        requestAnimationFrame(function () {
+            if (xhr[id]) {
+                xhr[id].send();
+            }
+        });
+    }
+};