Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
f5616c83ce
commit
f8a7824067
172
js/ui/cordova/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js
vendored
Normal file
172
js/ui/cordova/plugins/cordova-plugin-file/www/blackberry10/resolveLocalFileSystemURI.js
vendored
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue
Block a user