summaryrefslogtreecommitdiff
path: root/plugins/org.apache.cordova.file/www/blackberry10
diff options
context:
space:
mode:
authorPliablePixels <pliablepixels@gmail.com>2015-06-24 18:47:42 -0400
committerPliablePixels <pliablepixels@gmail.com>2015-06-24 18:47:42 -0400
commit855a0e8ddc273b58066530a1b55a946021dfc56e (patch)
tree26550033e855a31a265fc2da4da3df0cc2733dc1 /plugins/org.apache.cordova.file/www/blackberry10
parentd442629aa825aab6bc55ab6be19e3aba060867fe (diff)
Cleaned up code, commented, preparing for HTTPS via CordovaHTTP
Diffstat (limited to 'plugins/org.apache.cordova.file/www/blackberry10')
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/DirectoryEntry.js112
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/DirectoryReader.js54
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/Entry.js120
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/File.js56
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/FileEntry.js49
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/FileReader.js90
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/FileSystem.js27
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/FileWriter.js120
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/fileUtils.js52
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/requestFileSystem.js44
-rw-r--r--plugins/org.apache.cordova.file/www/blackberry10/resolveLocalFileSystemURI.js55
11 files changed, 779 insertions, 0 deletions
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/DirectoryEntry.js b/plugins/org.apache.cordova.file/www/blackberry10/DirectoryEntry.js
new file mode 100644
index 00000000..cb6628d5
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/DirectoryEntry.js
@@ -0,0 +1,112 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var argscheck = require('cordova/argscheck'),
+ utils = require('cordova/utils'),
+ Entry = require('./BB10Entry'),
+ FileError = require('./FileError'),
+ DirectoryReader = require('./BB10DirectoryReader'),
+ fileUtils = require('./BB10Utils'),
+ DirectoryEntry = function (name, fullPath, fileSystem) {
+ DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath, fileSystem);
+ };
+
+utils.extend(DirectoryEntry, Entry);
+
+function err(sandboxState, errorCallback) {
+ return function (e) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
+ errorCallback(e);
+ }
+};
+
+DirectoryEntry.prototype.createReader = function () {
+ return new DirectoryReader(this.fullPath);
+};
+
+DirectoryEntry.prototype.getDirectory = function (path, options, successCallback, errorCallback) {
+ var sandboxState,
+ currentPath = this.nativeEntry.fullPath;
+
+ cordova.exec(function (sandboxed) {
+ sandboxState = sandboxed;
+ }, function (e) {
+ console.log("[ERROR]: Could not retrieve sandbox state ", e);
+ }, "org.apache.cordova.file", "isSandboxed");
+
+ argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments);
+
+ if (fileUtils.isOutsideSandbox(path)) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [false]);
+ window.webkitRequestFileSystem(window.PERSISTENT, this.filesystem._size, function (fs) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
+ fs.root.getDirectory(currentPath + '/' + path, options, function (entry) {
+ successCallback(fileUtils.createEntry(entry));
+ }, err(sandboxState, errorCallback));
+ }, err(sandboxState, errorCallback));
+ } else {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [true]);
+ window.webkitRequestFileSystem(fileUtils.getFileSystemName(this.filesystem) === "persistent" ? window.PERSISTENT : window.TEMPORARY, this.filesystem._size, function (fs) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
+ fs.root.getDirectory(currentPath + '/' + path, options, function (entry) {
+ successCallback(fileUtils.createEntry(entry));
+ }, err(sandboxState, errorCallback));
+ }, err(sandboxState, errorCallback));
+ }
+};
+
+DirectoryEntry.prototype.removeRecursively = function (successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'DirectoryEntry.removeRecursively', arguments);
+ this.nativeEntry.removeRecursively(successCallback, errorCallback);
+};
+
+DirectoryEntry.prototype.getFile = function (path, options, successCallback, errorCallback) {
+ var sandboxState,
+ currentPath = this.nativeEntry.fullPath;
+
+ cordova.exec(function (sandboxed) {
+ sandboxState = sandboxed;
+ }, function (e) {
+ console.log("[ERROR]: Could not retrieve sandbox state ", e);
+ }, "org.apache.cordova.file", "isSandboxed");
+
+ argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments);
+
+ if (fileUtils.isOutsideSandbox(path)) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [false]);
+ window.webkitRequestFileSystem(window.PERSISTENT, this.filesystem._size, function (fs) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
+ fs.root.getFile(currentPath + '/' + path, options, function (entry) {
+ successCallback(fileUtils.createEntry(entry));
+ }, err(sandboxState, errorCallback));
+ }, err(sandboxState, errorCallback));
+ } else {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [true]);
+ window.webkitRequestFileSystem(fileUtils.getFileSystemName(this.filesystem) === "persistent" ? window.PERSISTENT: window.TEMPORARY, this.filesystem._size, function (fs) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
+ fs.root.getFile(currentPath + '/' + path, options, function (entry) {
+ successCallback(fileUtils.createEntry(entry));
+ }, err(sandboxState, errorCallback));
+ }, err(sandboxState, errorCallback));
+ }
+};
+
+module.exports = DirectoryEntry;
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/DirectoryReader.js b/plugins/org.apache.cordova.file/www/blackberry10/DirectoryReader.js
new file mode 100644
index 00000000..6aa3d730
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/DirectoryReader.js
@@ -0,0 +1,54 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var FileError = require('./FileError'),
+ fileUtils = require('./BB10Utils');
+
+function DirectoryReader(path) {
+ this.path = path;
+ this.nativeReader = null;
+}
+
+DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) {
+ var self = this,
+ win = typeof successCallback !== 'function' ? null : function(result) {
+ var retVal = [];
+ for (var i=0; i<result.length; i++) {
+ retVal.push(fileUtils.createEntry(result[i]));
+ }
+ successCallback(retVal);
+ },
+ fail = typeof errorCallback !== 'function' ? null : function(code) {
+ errorCallback(new FileError(code));
+ };
+ if (this.nativeReader) {
+ this.nativeReader.readEntries(win, fail);
+ } else {
+ resolveLocalFileSystemURI("filesystem:local:///persistent/" + this.path, function (entry) {
+ self.nativeReader = entry.nativeEntry.createReader()
+ self.nativeReader.readEntries(win, fail);
+ }, function () {
+ fail(FileError.NOT_FOUND_ERR);
+ });
+ }
+};
+
+module.exports = DirectoryReader;
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/Entry.js b/plugins/org.apache.cordova.file/www/blackberry10/Entry.js
new file mode 100644
index 00000000..d432bfde
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/Entry.js
@@ -0,0 +1,120 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var argscheck = require('cordova/argscheck'),
+ FileError = require('./FileError'),
+ Metadata = require('./Metadata'),
+ fileUtils = require('./BB10Utils');
+
+function Entry(isFile, isDirectory, name, fullPath, fileSystem) {
+ var strippedPath;
+ if (fullPath && fullPath.charAt(fullPath.length - 1) === '/') {
+ strippedPath = fullPath.slice(0, -1);
+ }
+ this.isFile = !!isFile;
+ this.isDirectory = !!isDirectory;
+ this.name = name || '';
+ this.fullPath = typeof strippedPath !== "undefined" ? strippedPath : (fullPath || '');
+ this.filesystem = fileSystem || null;
+}
+
+Entry.prototype.getMetadata = function(successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'Entry.getMetadata', arguments);
+ var success = function(lastModified) {
+ var metadata = new Metadata(lastModified);
+ if (typeof successCallback === 'function') {
+ successCallback(metadata);
+ }
+ };
+ this.nativeEntry.getMetadata(success, errorCallback);
+};
+
+Entry.prototype.setMetadata = function(successCallback, errorCallback, metadataObject) {
+ argscheck.checkArgs('FFO', 'Entry.setMetadata', arguments);
+ errorCallback("Not supported by platform");
+};
+
+Entry.prototype.moveTo = function(parent, newName, successCallback, errorCallback) {
+ argscheck.checkArgs('oSFF', 'Entry.moveTo', arguments);
+ var srcPath = this.fullPath,
+ name = newName || this.name,
+ success = function(entry) {
+ if (entry) {
+ if (typeof successCallback === 'function') {
+ successCallback(fileUtils.createEntry(entry));
+ }
+ }
+ else {
+ if (typeof errorCallback === 'function') {
+ errorCallback(new FileError(FileError.NOT_FOUND_ERR));
+ }
+ }
+ };
+ this.nativeEntry.moveTo(parent.nativeEntry, newName, success, errorCallback);
+};
+
+
+Entry.prototype.copyTo = function(parent, newName, successCallback, errorCallback) {
+ argscheck.checkArgs('oSFF', 'Entry.copyTo', arguments);
+ var srcPath = this.fullPath,
+ name = newName || this.name,
+ success = function(entry) {
+ if (entry) {
+ if (typeof successCallback === 'function') {
+ successCallback(fileUtils.createEntry(entry));
+ }
+ }
+ else {
+ if (typeof errorCallback === 'function') {
+ errorCallback(new FileError(FileError.NOT_FOUND_ERR));
+ }
+ }
+ };
+ this.nativeEntry.copyTo(parent.nativeEntry, newName, success, errorCallback);
+};
+
+Entry.prototype.toURL = function() {
+ var nativeURI = this.nativeEntry.toURL();
+ if (nativeURI.charAt(nativeURI.length - 1) === '/') {
+ return nativeURI.slice(0, -1);
+ }
+ return nativeURI;
+};
+
+Entry.prototype.toURI = function(mimeType) {
+ console.log("DEPRECATED: Update your code to use 'toURL'");
+ return this.toURL();
+};
+
+Entry.prototype.remove = function(successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'Entry.remove', arguments);
+ this.nativeEntry.remove(successCallback, errorCallback);
+};
+
+Entry.prototype.getParent = function(successCallback, errorCallback) {
+ argscheck.checkArgs('FF', 'Entry.getParent', arguments);
+ var win = successCallback && function(result) {
+ successCallback(fileUtils.createEntry(result));
+ };
+ this.nativeEntry.getParent(win, errorCallback);
+};
+
+module.exports = Entry;
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/File.js b/plugins/org.apache.cordova.file/www/blackberry10/File.js
new file mode 100644
index 00000000..7ba9734e
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/File.js
@@ -0,0 +1,56 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var fileUtils = require('./BB10Utils');
+
+/**
+ * Constructor.
+ * name {DOMString} name of the file, without path information
+ * fullPath {DOMString} the full path of the file, including the name
+ * type {DOMString} mime type
+ * lastModifiedDate {Date} last modified date
+ * size {Number} size of the file in bytes
+ */
+
+var File = function(name, fullPath, type, lastModifiedDate, size){
+ this.name = name || '';
+ this.fullPath = fullPath || null;
+ this.type = type || null;
+ this.lastModifiedDate = lastModifiedDate || null;
+ this.size = size || 0;
+
+ // These store the absolute start and end for slicing the file.
+ this.start = 0;
+ this.end = this.size;
+};
+
+/**
+ * Returns a "slice" of the file.
+ * Slices of slices are supported.
+ * start {Number} The index at which to start the slice (inclusive).
+ * end {Number} The index at which to end the slice (exclusive).
+ */
+File.prototype.slice = function(start, end) {
+ return fileUtils.createFile(this.nativeFile.slice(start, end));
+};
+
+
+module.exports = File;
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/FileEntry.js b/plugins/org.apache.cordova.file/www/blackberry10/FileEntry.js
new file mode 100644
index 00000000..b358d71a
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/FileEntry.js
@@ -0,0 +1,49 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var utils = require('cordova/utils'),
+ Entry = require('./BB10Entry'),
+ FileWriter = require('./BB10FileWriter'),
+ File = require('./BB10File'),
+ fileUtils = require('./BB10Utils'),
+ FileError = require('./FileError'),
+ FileEntry = function (name, fullPath, fileSystem) {
+ FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath, fileSystem]);
+ };
+
+utils.extend(FileEntry, Entry);
+
+FileEntry.prototype.createWriter = function(successCallback, errorCallback) {
+ this.file(function (file) {
+ successCallback(new FileWriter(file));
+ }, errorCallback);
+};
+
+FileEntry.prototype.file = function(successCallback, errorCallback) {
+ var fullPath = this.fullPath,
+ success = function (file) {
+ file.fullPath = fullPath;
+ successCallback(fileUtils.createFile(file));
+ };
+ this.nativeEntry.file(success, errorCallback);
+};
+
+module.exports = FileEntry;
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/FileReader.js b/plugins/org.apache.cordova.file/www/blackberry10/FileReader.js
new file mode 100644
index 00000000..6e3a10c6
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/FileReader.js
@@ -0,0 +1,90 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var origFileReader = window.FileReader,
+ fileUtils = require('./BB10Utils'),
+ utils = require('cordova/utils');
+
+var FileReader = function() {
+ this.nativeReader = new origFileReader();
+};
+
+utils.defineGetter(FileReader.prototype, 'readyState', function() {
+ return this.nativeReader.readyState;
+});
+
+utils.defineGetter(FileReader.prototype, 'error', function() {
+ return this.nativeReader.error;
+});
+
+utils.defineGetter(FileReader.prototype, 'result', function() {
+ return this.nativeReader.result;
+});
+
+function defineEvent(eventName) {
+ utils.defineGetterSetter(FileReader.prototype, eventName, function() {
+ return this.nativeReader[eventName] || null;
+ }, function(value) {
+ this.nativeReader[eventName] = value;
+ });
+}
+
+defineEvent('onabort');
+defineEvent('onerror');
+defineEvent('onload');
+defineEvent('onloadend');
+defineEvent('onloadstart');
+defineEvent('onprogress');
+
+FileReader.prototype.abort = function() {
+ return this.nativeReader.abort();
+};
+
+function read(method, context, file, encoding) {
+ if (file.fullPath) {
+ resolveLocalFileSystemURI("filesystem:local:///persistent/" + file.fullPath, function (entry) {
+ entry.nativeEntry.file(function (nativeFile) {
+ context.nativeReader[method].call(context.nativeReader, nativeFile, encoding);
+ }, context.onerror);
+ }, context.onerror);
+ } else {
+ context.nativeReader[method](file, encoding);
+ }
+}
+
+FileReader.prototype.readAsText = function(file, encoding) {
+ read("readAsText", this, file, encoding);
+};
+
+FileReader.prototype.readAsDataURL = function(file) {
+ read("readAsDataURL", this, file);
+};
+
+FileReader.prototype.readAsBinaryString = function(file) {
+ read("readAsBinaryString", this, file);
+};
+
+FileReader.prototype.readAsArrayBuffer = function(file) {
+ read("readAsArrayBuffer", this, file);
+};
+
+window.FileReader = FileReader;
+module.exports = FileReader;
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/FileSystem.js b/plugins/org.apache.cordova.file/www/blackberry10/FileSystem.js
new file mode 100644
index 00000000..d1432d6d
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/FileSystem.js
@@ -0,0 +1,27 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+module.exports = function(name, root) {
+ this.name = name || null;
+ if (root) {
+ this.root = root;
+ }
+};
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/FileWriter.js b/plugins/org.apache.cordova.file/www/blackberry10/FileWriter.js
new file mode 100644
index 00000000..8992943e
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/FileWriter.js
@@ -0,0 +1,120 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var FileError = require('./FileError'),
+ ProgressEvent = require('./ProgressEvent'),
+ fileUtils = require('./BB10Utils'),
+ utils = require('cordova/utils');
+
+function FileWriter (file) {
+ var that = this;
+ this.file = file;
+ this.events = {};
+ this.pending = [];
+ resolveLocalFileSystemURI("filesystem:local:///persistent/" + file.fullPath, function (entry) {
+ entry.nativeEntry.createWriter(function (writer) {
+ var i,
+ event;
+ that.nativeWriter = writer;
+ for (event in that.events) {
+ if (that.events.hasOwnProperty(event)) {
+ that.nativeWriter[event] = that.events[event];
+ }
+ }
+ for (i = 0; i < that.pending.length; i++) {
+ that.pending[i]();
+ }
+ });
+ });
+ this.events = {};
+ this.pending = [];
+}
+
+utils.defineGetter(FileWriter.prototype, 'error', function() {
+ return this.nativeWriter ? this.nativeWriter.error : null;
+});
+
+utils.defineGetter(FileWriter.prototype, 'fileName', function() {
+ return this.nativeWriter ? this.nativeWriter.fileName : this.file.name;
+});
+
+utils.defineGetter(FileWriter.prototype, 'length', function() {
+ return this.nativeWriter ? this.nativeWriter.length : this.file.size;
+});
+
+utils.defineGetter(FileWriter.prototype, 'position', function() {
+ return this.nativeWriter ? this.nativeWriter.position : 0;
+});
+
+utils.defineGetter(FileWriter.prototype, 'readyState', function() {
+ return this.nativeWriter ? this.nativeWriter.readyState : 0;
+});
+
+function defineEvent(eventName) {
+ utils.defineGetterSetter(FileWriter.prototype, eventName, function() {
+ return this.nativeWriter ? this.nativeWriter[eventName] || null : this.events[eventName] || null;
+ }, function(value) {
+ if (this.nativeWriter) {
+ this.nativeWriter[eventName] = value;
+ }
+ else {
+ this.events[eventName] = value;
+ }
+ });
+}
+
+defineEvent('onabort');
+defineEvent('onerror');
+defineEvent('onprogress');
+defineEvent('onwrite');
+defineEvent('onwriteend');
+defineEvent('onwritestart');
+
+FileWriter.prototype.abort = function() {
+ this.nativeWriter.abort();
+};
+
+FileWriter.prototype.write = function(text) {
+ var that = this,
+ op = function () {
+ that.nativeWriter.write(new Blob([text]));
+ };
+ this.nativeWriter ? op() : this.pending.push(op);
+
+};
+
+FileWriter.prototype.seek = function(offset) {
+ var that = this,
+ op = function () {
+ that.nativeWriter.seek(offset);
+ };
+ this.nativeWriter ? op() : this.pending.push(op);
+};
+
+FileWriter.prototype.truncate = function(size) {
+ var that = this,
+ op = function () {
+ that.nativeWriter.truncate(size);
+ };
+ this.nativeWriter ? op() : this.pending.push(op);
+};
+
+module.exports = FileWriter;
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/fileUtils.js b/plugins/org.apache.cordova.file/www/blackberry10/fileUtils.js
new file mode 100644
index 00000000..6f803b73
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/fileUtils.js
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+function convertPath(url) {
+ return decodeURI(url).substring(11).replace(/\/$/, '');
+}
+
+module.exports = {
+ createEntry: function (entry) {
+ var cordovaEntry;
+ if (entry.isFile) {
+ cordovaEntry = new window.FileEntry(entry.name, entry.fullPath, entry.filesystem);
+ } else {
+ cordovaEntry = new window.DirectoryEntry(entry.name, entry.fullPath, entry.filesystem);
+ }
+ cordovaEntry.nativeEntry = entry;
+ return cordovaEntry;
+ },
+
+ createFile: function (file) {
+ var cordovaFile = new File(file.name, file.fullPath, file.type, file.lastModifiedDate, file.size);
+ cordovaFile.nativeFile = file;
+ cordovaFile.fullPath = file.name;
+ return cordovaFile;
+ },
+
+ getFileSystemName: function (fs) {
+ return ((fs.name.indexOf('Persistent') != -1) || (fs.name === "persistent")) ? 'persistent' : 'temporary';
+ },
+
+ isOutsideSandbox: function (path) {
+ return (path.indexOf("accounts/1000/") === 0 || path.indexOf("/accounts/1000/") === 0);
+ }
+};
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/requestFileSystem.js b/plugins/org.apache.cordova.file/www/blackberry10/requestFileSystem.js
new file mode 100644
index 00000000..bd07d089
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/requestFileSystem.js
@@ -0,0 +1,44 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var fileUtils = require('./BB10Utils'),
+ FileError = require('./FileError'),
+ FileSystem = require('./BB10FileSystem');
+
+module.exports = function (type, size, success, fail) {
+ var cordovaFs,
+ cordovaFsRoot;
+ if (size >= 1000000000000000) {
+ fail(new FileError(FileError.QUOTA_EXCEEDED_ERR));
+ } else if (type !== 1 && type !== 0) {
+ fail(new FileError(FileError.SYNTAX_ERR));
+ } else {
+ window.webkitRequestFileSystem(type, size, function (fs) {
+ cordovaFsRoot = fileUtils.createEntry(fs.root);
+ cordovaFs = new FileSystem(fileUtils.getFileSystemName(fs), cordovaFsRoot);
+ cordovaFsRoot.filesystem = cordovaFs;
+ cordovaFs._size = size;
+ success(cordovaFs);
+ }, function (error) {
+ fail(new FileError(error));
+ });
+ }
+};
diff --git a/plugins/org.apache.cordova.file/www/blackberry10/resolveLocalFileSystemURI.js b/plugins/org.apache.cordova.file/www/blackberry10/resolveLocalFileSystemURI.js
new file mode 100644
index 00000000..4d5af613
--- /dev/null
+++ b/plugins/org.apache.cordova.file/www/blackberry10/resolveLocalFileSystemURI.js
@@ -0,0 +1,55 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+var fileUtils = require('./BB10Utils'),
+ FileError = require('./FileError');
+
+function stripURI(uri) {
+ var rmFsLocal = uri.substring("filesystem:local:///".length);
+ return rmFsLocal.substring(rmFsLocal.indexOf('/') + 1);
+}
+
+module.exports = function (uri, success, fail) {
+ var sandboxState,
+ decodedURI = decodeURI(uri);
+
+ cordova.exec(function (sandboxed) {
+ sandboxState = sandboxed;
+ }, function (e) {
+ console.log("[ERROR]: Could not retrieve sandbox state ", e);
+ }, "org.apache.cordova.file", "isSandboxed");
+
+ if (fileUtils.isOutsideSandbox(stripURI(decodedURI))) {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [false]);
+ } else {
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [true]);
+ }
+ window.webkitResolveLocalFileSystemURL(decodedURI, function (entry) {
+ success(fileUtils.createEntry(entry));
+ }, function (e) {
+ window.webkitResolveLocalFileSystemURL(decodedURI + '/', function (entry) {
+ success(fileUtils.createEntry(entry));
+ }, function (e) {
+ fail(e);
+ });
+ });
+ cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
+};