From c37448cc8ef3a848eb30c6bf15eae2634c05bbed Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:25:13 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- .../www/resolveLocalFileSystemURI.js | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 js/ui/cordova/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js diff --git a/js/ui/cordova/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js b/js/ui/cordova/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js new file mode 100644 index 0000000..4761222 --- /dev/null +++ b/js/ui/cordova/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.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. + * +*/ +(function() { + //For browser platform: not all browsers use overrided `resolveLocalFileSystemURL`. + function checkBrowser() { + if (cordova.platformId === "browser" && require('./isChrome')()) { + module.exports.resolveLocalFileSystemURL = window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL; + return true; + } + return false; + } + if (checkBrowser()) { + return; + } + + var argscheck = require('cordova/argscheck'), + DirectoryEntry = require('./DirectoryEntry'), + FileEntry = require('./FileEntry'), + FileError = require('./FileError'), + exec = require('cordova/exec'); + var fileSystems = require('./fileSystems'); + + /** + * Look up file system Entry referred to by local URI. + * @param {DOMString} uri URI referring to a local file or directory + * @param successCallback invoked with Entry object corresponding to URI + * @param errorCallback invoked if error occurs retrieving file system entry + */ + module.exports.resolveLocalFileSystemURL = module.exports.resolveLocalFileSystemURL || function(uri, successCallback, errorCallback) { + argscheck.checkArgs('sFF', 'resolveLocalFileSystemURI', arguments); + // error callback + var fail = function(error) { + errorCallback && errorCallback(new FileError(error)); + }; + // sanity check for 'not:valid:filename' or '/not:valid:filename' + // file.spec.12 window.resolveLocalFileSystemURI should error (ENCODING_ERR) when resolving invalid URI with leading /. + if(!uri || uri.split(":").length > 2) { + setTimeout( function() { + fail(FileError.ENCODING_ERR); + },0); + return; + } + // if successful, return either a file or directory entry + var success = function(entry) { + if (entry) { + if (successCallback) { + // create appropriate Entry object + var fsName = entry.filesystemName || (entry.filesystem && entry.filesystem.name) || (entry.filesystem == window.PERSISTENT ? 'persistent' : 'temporary'); + fileSystems.getFs(fsName, function(fs) { + // This should happen only on platforms that haven't implemented requestAllFileSystems (windows) + if (!fs) { + fs = new FileSystem(fsName, {name:"", fullPath:"/"}); + } + var result = (entry.isDirectory) ? new DirectoryEntry(entry.name, entry.fullPath, fs, entry.nativeURL) : new FileEntry(entry.name, entry.fullPath, fs, entry.nativeURL); + successCallback(result); + }); + } + } + else { + // no Entry object returned + fail(FileError.NOT_FOUND_ERR); + } + }; + + exec(success, fail, "File", "resolveLocalFileSystemURI", [uri]); + }; + + module.exports.resolveLocalFileSystemURI = function() { + console.log("resolveLocalFileSystemURI is deprecated. Please call resolveLocalFileSystemURL instead."); + module.exports.resolveLocalFileSystemURL.apply(this, arguments); + }; +})();