Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
		
							parent
							
								
									d73737ea69
								
							
						
					
					
						commit
						46a63811ae
					
				
							
								
								
									
										188
									
								
								js/ui/cordova/plugins/cordova-plugin-file/www/browser/Preparing.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								js/ui/cordova/plugins/cordova-plugin-file/www/browser/Preparing.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,188 @@
 | 
			
		|||
/*
 | 
			
		||||
 *
 | 
			
		||||
 * 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 () {
 | 
			
		||||
    /*global require*/
 | 
			
		||||
 | 
			
		||||
    //Only Chrome uses this file.
 | 
			
		||||
    if (!require('./isChrome')()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var channel = require('cordova/channel');
 | 
			
		||||
    var FileError = require('./FileError');
 | 
			
		||||
    var PERSISTENT_FS_QUOTA = 5 * 1024 * 1024;
 | 
			
		||||
    var filePluginIsReadyEvent = new Event('filePluginIsReady');
 | 
			
		||||
 | 
			
		||||
    var entryFunctionsCreated = false;
 | 
			
		||||
    var quotaWasRequested = false;
 | 
			
		||||
    var eventWasThrown = false;
 | 
			
		||||
 | 
			
		||||
    if (!window.requestFileSystem) {
 | 
			
		||||
        window.requestFileSystem = function(type, size, win, fail) {
 | 
			
		||||
            if (fail) {
 | 
			
		||||
                fail("Not supported");
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    } else {
 | 
			
		||||
        window.requestFileSystem(window.TEMPORARY, 1, createFileEntryFunctions, function() {});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!window.resolveLocalFileSystemURL) {
 | 
			
		||||
        window.resolveLocalFileSystemURL = function(url, win, fail) {
 | 
			
		||||
            if(fail) {
 | 
			
		||||
                fail("Not supported");
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Resolves a filesystem entry by its path - which is passed either in standard (filesystem:file://) or
 | 
			
		||||
    // Cordova-specific (cdvfile://) universal way.
 | 
			
		||||
    // Aligns with specification: http://www.w3.org/TR/2011/WD-file-system-api-20110419/#widl-LocalFileSystem-resolveLocalFileSystemURL
 | 
			
		||||
    var nativeResolveLocalFileSystemURL = window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL;
 | 
			
		||||
    window.resolveLocalFileSystemURL = function(url, win, fail) {
 | 
			
		||||
        /* If url starts with `cdvfile` then we need convert it to Chrome real url first:
 | 
			
		||||
          cdvfile://localhost/persistent/path/to/file -> filesystem:file://persistent/path/to/file */
 | 
			
		||||
        if (url.trim().substr(0,7) === "cdvfile") {
 | 
			
		||||
            /* Quirk:
 | 
			
		||||
            Plugin supports cdvfile://localhost (local resources) only.
 | 
			
		||||
            I.e. external resources are not supported via cdvfile. */
 | 
			
		||||
            if (url.indexOf("cdvfile://localhost") !== -1) {
 | 
			
		||||
                // Browser supports temporary and persistent only
 | 
			
		||||
                var indexPersistent = url.indexOf('persistent');
 | 
			
		||||
                var indexTemporary = url.indexOf('temporary');
 | 
			
		||||
 | 
			
		||||
                /* Chrome urls start with 'filesystem:' prefix. See quirk:
 | 
			
		||||
                   toURL function in Chrome returns filesystem:-prefixed path depending on application host.
 | 
			
		||||
                   For example, filesystem:file:///persistent/somefile.txt,
 | 
			
		||||
                   filesystem:http://localhost:8080/persistent/somefile.txt. */
 | 
			
		||||
                var prefix = 'filesystem:file:///';
 | 
			
		||||
                if (location.protocol !== 'file:') {
 | 
			
		||||
                    prefix = 'filesystem:' + location.origin + '/';
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                var result;
 | 
			
		||||
                if (indexPersistent !== -1) {
 | 
			
		||||
                    // cdvfile://localhost/persistent/path/to/file -> filesystem:file://persistent/path/to/file
 | 
			
		||||
                    // or filesystem:http://localhost:8080/persistent/path/to/file
 | 
			
		||||
                    result =  prefix + 'persistent' + url.substr(indexPersistent + 10);
 | 
			
		||||
                    nativeResolveLocalFileSystemURL(result, win, fail);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (indexTemporary !== -1) {
 | 
			
		||||
                    // cdvfile://localhost/temporary/path/to/file -> filesystem:file://temporary/path/to/file
 | 
			
		||||
                    // or filesystem:http://localhost:8080/temporary/path/to/file
 | 
			
		||||
                    result = prefix + 'temporary' + url.substr(indexTemporary + 9);
 | 
			
		||||
                    nativeResolveLocalFileSystemURL(result, win, fail);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // cdvfile other than local file resource is not supported
 | 
			
		||||
            fail && fail(new FileError(FileError.ENCODING_ERR));
 | 
			
		||||
        } else {
 | 
			
		||||
            nativeResolveLocalFileSystemURL(url, win, fail);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    function createFileEntryFunctions(fs) {
 | 
			
		||||
        fs.root.getFile('todelete_658674_833_4_cdv', {create: true}, function(fileEntry) {
 | 
			
		||||
            var fileEntryType = Object.getPrototypeOf(fileEntry);
 | 
			
		||||
            var entryType = Object.getPrototypeOf(fileEntryType);
 | 
			
		||||
 | 
			
		||||
            // Save the original method
 | 
			
		||||
            var origToURL = entryType.toURL;
 | 
			
		||||
            entryType.toURL = function () {
 | 
			
		||||
                var origURL = origToURL.call(this);
 | 
			
		||||
                if (this.isDirectory && origURL.substr(-1) !== '/') {
 | 
			
		||||
                    return origURL + '/';
 | 
			
		||||
                }
 | 
			
		||||
                return origURL;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            entryType.toNativeURL = function () {
 | 
			
		||||
                console.warn("DEPRECATED: Update your code to use 'toURL'");
 | 
			
		||||
                return this.toURL();
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            entryType.toInternalURL = function() {
 | 
			
		||||
                if (this.toURL().indexOf("persistent") > -1) {
 | 
			
		||||
                    return "cdvfile://localhost/persistent" + this.fullPath;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (this.toURL().indexOf("temporary") > -1) {
 | 
			
		||||
                    return "cdvfile://localhost/temporary" + this.fullPath;
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            entryType.setMetadata = function(win, fail /*, metadata*/) {
 | 
			
		||||
                fail && fail("Not supported");
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            fileEntry.createWriter(function(writer) {
 | 
			
		||||
                var originalWrite = writer.write;
 | 
			
		||||
                var writerProto = Object.getPrototypeOf(writer);
 | 
			
		||||
                writerProto.write = function(blob) {
 | 
			
		||||
                    if(blob instanceof Blob) {
 | 
			
		||||
                        originalWrite.apply(this, [blob]);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        var realBlob = new Blob([blob]);
 | 
			
		||||
                        originalWrite.apply(this, [realBlob]);
 | 
			
		||||
                   }
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                fileEntry.remove(function(){ entryFunctionsCreated = true; }, function(){ /* empty callback */ });
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    window.initPersistentFileSystem = function(size, win, fail) {
 | 
			
		||||
        if (navigator.webkitPersistentStorage) {
 | 
			
		||||
            navigator.webkitPersistentStorage.requestQuota(size, win, fail);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fail("This browser does not support this function");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    window.isFilePluginReadyRaised = function () { return eventWasThrown; };
 | 
			
		||||
 | 
			
		||||
    window.initPersistentFileSystem(PERSISTENT_FS_QUOTA, function() {
 | 
			
		||||
        console.log('Persistent fs quota granted');
 | 
			
		||||
        quotaWasRequested = true;
 | 
			
		||||
    }, function(e){
 | 
			
		||||
        console.log('Error occured while trying to request Persistent fs quota: ' + JSON.stringify(e));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    channel.onCordovaReady.subscribe(function () {
 | 
			
		||||
        function dispatchEventIfReady() {
 | 
			
		||||
            if (entryFunctionsCreated && quotaWasRequested) {
 | 
			
		||||
                window.dispatchEvent(filePluginIsReadyEvent);
 | 
			
		||||
                eventWasThrown = true;
 | 
			
		||||
            } else {
 | 
			
		||||
                setTimeout(dispatchEventIfReady, 100);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dispatchEventIfReady();
 | 
			
		||||
    }, false);
 | 
			
		||||
})();
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user