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