summaryrefslogtreecommitdiff
path: root/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js')
-rw-r--r--plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js b/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js
new file mode 100644
index 00000000..0fc9c070
--- /dev/null
+++ b/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js
@@ -0,0 +1,172 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*
+ * resolveLocalFileSystemURI
+ *
+ * IN
+ * args
+ * 0 - escaped local filesystem URI
+ * 1 - options (standard HTML5 file system options)
+ * 2 - size
+ * OUT
+ * success - Entry object
+ * - isDirectory
+ * - isFile
+ * - name
+ * - fullPath
+ * - nativeURL
+ * - fileSystemName
+ * fail - FileError code
+ */
+
+var info = require('cordova-plugin-file.bb10FileSystemInfo'),
+ requestAnimationFrame = cordova.require('cordova-plugin-file.bb10RequestAnimationFrame'),
+ createEntryFromNative = require('cordova-plugin-file.bb10CreateEntryFromNative'),
+ SANDBOXED = true,
+ UNSANDBOXED = false;
+
+module.exports = function (success, fail, args) {
+ var request = args[0],
+ options = args[1],
+ size = args[2];
+ if (request) {
+ request = decodeURIComponent(request);
+ if (request.indexOf('?') > -1) {
+ //bb10 does not support params; strip them off
+ request = request.substring(0, request.indexOf('?'));
+ }
+ if (request.indexOf('file://localhost/') === 0) {
+ //remove localhost prefix
+ request = request.replace('file://localhost/', 'file:///');
+ }
+ //requests to sandboxed locations should use cdvfile
+ request = request.replace(info.persistentPath, 'cdvfile://localhost/persistent');
+ request = request.replace(info.temporaryPath, 'cdvfile://localhost/temporary');
+ //pick appropriate handler
+ if (request.indexOf('file:///') === 0) {
+ resolveFile(success, fail, request, options);
+ } else if (request.indexOf('cdvfile://localhost/') === 0) {
+ resolveCdvFile(success, fail, request, options, size);
+ } else if (request.indexOf('local:///') === 0) {
+ resolveLocal(success, fail, request, options);
+ } else {
+ fail(FileError.ENCODING_ERR);
+ }
+ } else {
+ fail(FileError.NOT_FOUND_ERR);
+ }
+};
+
+//resolve file:///
+function resolveFile(success, fail, request, options) {
+ var path = request.substring(7);
+ resolve(success, fail, path, window.PERSISTENT, UNSANDBOXED, options);
+}
+
+//resolve cdvfile://localhost/filesystemname/
+function resolveCdvFile(success, fail, request, options, size) {
+ var components = /cdvfile:\/\/localhost\/([^\/]+)\/(.*)/.exec(request),
+ fsType = components[1],
+ path = components[2];
+ if (fsType === 'persistent') {
+ resolve(success, fail, path, window.PERSISTENT, SANDBOXED, options, size);
+ }
+ else if (fsType === 'temporary') {
+ resolve(success, fail, path, window.TEMPORARY, SANDBOXED, options, size);
+ }
+ else if (fsType === 'root') {
+ resolve(success, fail, path, window.PERSISTENT, UNSANDBOXED, options);
+ }
+ else {
+ fail(FileError.NOT_FOUND_ERR);
+ }
+}
+
+//resolve local:///
+function resolveLocal(success, fail, request, options) {
+ var path = localPath + request.substring(8);
+ resolve(success, fail, path, window.PERSISTENT, UNSANDBOXED, options);
+}
+
+//validate parameters and set sandbox
+function resolve(success, fail, path, fsType, sandbox, options, size) {
+ options = options || { create: false };
+ size = size || info.MAX_SIZE;
+ if (size > info.MAX_SIZE) {
+ //bb10 does not respect quota; fail at unreasonably large size
+ fail(FileError.QUOTA_EXCEEDED_ERR);
+ } else if (path.indexOf(':') > -1) {
+ //files with : character are not valid in Cordova apps
+ fail(FileError.ENCODING_ERR);
+ } else {
+ requestAnimationFrame(function () {
+ cordova.exec(function () {
+ requestAnimationFrame(function () {
+ resolveNative(success, fail, path, fsType, options, size);
+ });
+ }, fail, 'File', 'setSandbox', [sandbox], false);
+ });
+ }
+}
+
+//find path using webkit file system
+function resolveNative(success, fail, path, fsType, options, size) {
+ window.webkitRequestFileSystem(
+ fsType,
+ size,
+ function (fs) {
+ if (path === '') {
+ //no path provided, call success with root file system
+ success(createEntryFromNative(fs.root));
+ } else {
+ //otherwise attempt to resolve as file
+ fs.root.getFile(
+ path,
+ options,
+ function (entry) {
+ success(createEntryFromNative(entry));
+ },
+ function (fileError) {
+ //file not found, attempt to resolve as directory
+ fs.root.getDirectory(
+ path,
+ options,
+ function (entry) {
+ success(createEntryFromNative(entry));
+ },
+ function (dirError) {
+ //path cannot be resolved
+ if (fileError.code === FileError.INVALID_MODIFICATION_ERR &&
+ options.exclusive) {
+ //mobile-spec expects this error code
+ fail(FileError.PATH_EXISTS_ERR);
+ } else {
+ fail(FileError.NOT_FOUND_ERR);
+ }
+ }
+ );
+ }
+ );
+ }
+ }
+ );
+}