123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- /*
- *
- * 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.
- *
- */
-
- var argscheck = require('cordova/argscheck');
- var exec = require('cordova/exec');
- var FileError = require('./FileError');
- var Metadata = require('./Metadata');
-
- /**
- * Represents a file or directory on the local file system.
- *
- * @param isFile
- * {boolean} true if Entry is a file (readonly)
- * @param isDirectory
- * {boolean} true if Entry is a directory (readonly)
- * @param name
- * {DOMString} name of the file or directory, excluding the path
- * leading to it (readonly)
- * @param fullPath
- * {DOMString} the absolute full path to the file or directory
- * (readonly)
- * @param fileSystem
- * {FileSystem} the filesystem on which this entry resides
- * (readonly)
- * @param nativeURL
- * {DOMString} an alternate URL which can be used by native
- * webview controls, for example media players.
- * (optional, readonly)
- */
- function Entry (isFile, isDirectory, name, fullPath, fileSystem, nativeURL) {
- this.isFile = !!isFile;
- this.isDirectory = !!isDirectory;
- this.name = name || '';
- this.fullPath = fullPath || '';
- this.filesystem = fileSystem || null;
- this.nativeURL = nativeURL || null;
- }
-
- /**
- * Look up the metadata of the entry.
- *
- * @param successCallback
- * {Function} is called with a Metadata object
- * @param errorCallback
- * {Function} is called with a FileError
- */
- Entry.prototype.getMetadata = function (successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.getMetadata', arguments);
- var success = successCallback && function (entryMetadata) {
- var metadata = new Metadata({
- size: entryMetadata.size,
- modificationTime: entryMetadata.lastModifiedDate
- });
- successCallback(metadata);
- };
- var fail = errorCallback && function (code) {
- errorCallback(new FileError(code));
- };
- exec(success, fail, 'File', 'getFileMetadata', [this.toInternalURL()]);
- };
-
- /**
- * Set the metadata of the entry.
- *
- * @param successCallback
- * {Function} is called with a Metadata object
- * @param errorCallback
- * {Function} is called with a FileError
- * @param metadataObject
- * {Object} keys and values to set
- */
- Entry.prototype.setMetadata = function (successCallback, errorCallback, metadataObject) {
- argscheck.checkArgs('FFO', 'Entry.setMetadata', arguments);
- exec(successCallback, errorCallback, 'File', 'setMetadata', [this.toInternalURL(), metadataObject]);
- };
-
- /**
- * Move a file or directory to a new location.
- *
- * @param parent
- * {DirectoryEntry} the directory to which to move this entry
- * @param newName
- * {DOMString} new name of the entry, defaults to the current name
- * @param successCallback
- * {Function} called with the new DirectoryEntry object
- * @param errorCallback
- * {Function} called with a FileError
- */
- Entry.prototype.moveTo = function (parent, newName, successCallback, errorCallback) {
- argscheck.checkArgs('oSFF', 'Entry.moveTo', arguments);
- var fail = errorCallback && function (code) {
- errorCallback(new FileError(code));
- };
- var srcURL = this.toInternalURL();
- // entry name
- var name = newName || this.name;
- var success = function (entry) {
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- var newFSName = entry.filesystemName || (entry.filesystem && entry.filesystem.name);
- var fs = newFSName ? new FileSystem(newFSName, { name: '', fullPath: '/' }) : new FileSystem(parent.filesystem.name, { name: '', fullPath: '/' }); // eslint-disable-line no-undef
- var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL) : new (require('cordova-plugin-file.FileEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL);
- successCallback(result);
- }
- } else {
- // no Entry object returned
- if (fail) {
- fail(FileError.NOT_FOUND_ERR);
- }
- }
- };
-
- // copy
- exec(success, fail, 'File', 'moveTo', [srcURL, parent.toInternalURL(), name]);
- };
-
- /**
- * Copy a directory to a different location.
- *
- * @param parent
- * {DirectoryEntry} the directory to which to copy the entry
- * @param newName
- * {DOMString} new name of the entry, defaults to the current name
- * @param successCallback
- * {Function} called with the new Entry object
- * @param errorCallback
- * {Function} called with a FileError
- */
- Entry.prototype.copyTo = function (parent, newName, successCallback, errorCallback) {
- argscheck.checkArgs('oSFF', 'Entry.copyTo', arguments);
- var fail = errorCallback && function (code) {
- errorCallback(new FileError(code));
- };
- var srcURL = this.toInternalURL();
- // entry name
- var name = newName || this.name;
- // success callback
- var success = function (entry) {
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- var newFSName = entry.filesystemName || (entry.filesystem && entry.filesystem.name);
- var fs = newFSName ? new FileSystem(newFSName, { name: '', fullPath: '/' }) : new FileSystem(parent.filesystem.name, { name: '', fullPath: '/' }); // eslint-disable-line no-undef
- var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL) : new (require('cordova-plugin-file.FileEntry'))(entry.name, entry.fullPath, fs, entry.nativeURL);
- successCallback(result);
- }
- } else {
- // no Entry object returned
- if (fail) {
- fail(FileError.NOT_FOUND_ERR);
- }
- }
- };
-
- // copy
- exec(success, fail, 'File', 'copyTo', [srcURL, parent.toInternalURL(), name]);
- };
-
- /**
- * Return a URL that can be passed across the bridge to identify this entry.
- */
- Entry.prototype.toInternalURL = function () {
- if (this.filesystem && this.filesystem.__format__) {
- return this.filesystem.__format__(this.fullPath, this.nativeURL);
- }
- };
-
- /**
- * Return a URL that can be used to identify this entry.
- * Use a URL that can be used to as the src attribute of a <video> or
- * <audio> tag. If that is not possible, construct a cdvfile:// URL.
- */
- Entry.prototype.toURL = function () {
- if (this.nativeURL) {
- return this.nativeURL;
- }
- // fullPath attribute may contain the full URL in the case that
- // toInternalURL fails.
- return this.toInternalURL() || 'file://localhost' + this.fullPath;
- };
-
- /**
- * Backwards-compatibility: In v1.0.0 - 1.0.2, .toURL would only return a
- * cdvfile:// URL, and this method was necessary to obtain URLs usable by the
- * webview.
- * See CB-6051, CB-6106, CB-6117, CB-6152, CB-6199, CB-6201, CB-6243, CB-6249,
- * and CB-6300.
- */
- Entry.prototype.toNativeURL = function () {
- console.log("DEPRECATED: Update your code to use 'toURL'");
- return this.toURL();
- };
-
- /**
- * Returns a URI that can be used to identify this entry.
- *
- * @param {DOMString} mimeType for a FileEntry, the mime type to be used to interpret the file, when loaded through this URI.
- * @return uri
- */
- Entry.prototype.toURI = function (mimeType) {
- console.log("DEPRECATED: Update your code to use 'toURL'");
- return this.toURL();
- };
-
- /**
- * Remove a file or directory. It is an error to attempt to delete a
- * directory that is not empty. It is an error to attempt to delete a
- * root directory of a file system.
- *
- * @param successCallback {Function} called with no parameters
- * @param errorCallback {Function} called with a FileError
- */
- Entry.prototype.remove = function (successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.remove', arguments);
- var fail = errorCallback && function (code) {
- errorCallback(new FileError(code));
- };
- exec(successCallback, fail, 'File', 'remove', [this.toInternalURL()]);
- };
-
- /**
- * Look up the parent DirectoryEntry of this entry.
- *
- * @param successCallback {Function} called with the parent DirectoryEntry object
- * @param errorCallback {Function} called with a FileError
- */
- Entry.prototype.getParent = function (successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.getParent', arguments);
- var fs = this.filesystem;
- var win = successCallback && function (result) {
- var DirectoryEntry = require('./DirectoryEntry');
- var entry = new DirectoryEntry(result.name, result.fullPath, fs, result.nativeURL);
- successCallback(entry);
- };
- var fail = errorCallback && function (code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, 'File', 'getParent', [this.toInternalURL()]);
- };
-
- module.exports = Entry;
|