extjs-gpl
Version:
GPL licensed version of Sencha Ext JS
218 lines (210 loc) • 8.88 kB
JavaScript
/**
* Cordova File APi Abstraction
*
* For more documentation see
* http://docs.phonegap.com/en/2.7.0/cordova_file_file.md.html#File
*/
Ext.define('Ext.device.filesystem.Cordova', {
alternateClassName: 'Ext.device.filesystem.PhoneGap',
extend: 'Ext.device.filesystem.HTML5',
constructor: function() {
Ext.override(Ext.device.filesystem.Entry,
{
/**
*
* @param {Object} config
*
* @param {Object} config.metadata
* Metadata to add to the file or directory
*
* @param {Object} config.options
* File creation options {create:true, exclusive:false}
*
* @param {Boolean} config.options.create
* Indicates if the file should be created if it doesn't exist
*
* @param {Boolean} config.options.exclusive
* Used with the create option only indicates whether a creation causes an error if the file already exists
*
* @param {Function} config.success
* The function called when the File's Metadata is written successfully
*
* @param {Function} config.failure
* The function called when the File request causes an error
*
* @param {FileError} config.failure.error
*
*/
writeMetadata: function(config) {
var me = this;
this.getEntry(
{
options: config.options,
success: function(entry) {
entry.setMetadata(
function() {
config.success.call(config.scope || me);
},
function(error) {
config.failure.call(config.scope || me, error);
},
config.metadata
);
},
failure: function(error) {
config.failure.call(config.scope || me, error)
}
}
);
},
/**
*
* @param {Object} config
*
* @param {Object} config.options
* File creation options {create:true, exclusive:false}
*
* @param {Boolean} config.options.create
* Indicates if the file should be created if it doesn't exist
*
* @param {Boolean} config.options.exclusive
* Used with the create option only indicates whether a creation causes an error if the file already exists
*
* @param {Function} config.success
* The function called when the File's Metadata is written successfully
*
* @param {Function} config.failure
* The function called when the File request causes an error
*
* @param {FileError} config.failure.error
*
*/
readMetadata: function(config) {
var me = this;
this.getEntry(
{
options: config.options,
success: function(entry) {
entry.getMetadata(
function(metadata) {
config.success.call(config.scope || me, metadata);
},
function(error) {
config.failure.call(config.scope || me, error);
}
);
},
failure: function(error) {
config.failure.call(config.scope || me, error)
}
}
);
}
}
);
Ext.override(Ext.device.filesystem.FileEntry, {
writeData: function(writer, data) {
writer.write(data.toString());
},
/**
* Send a file to a server
*
* @param {Object} config
*
* @param {String} config.url
* URL of server to receive the file
*
* @param {Boolean} config.trustAllHosts
* (Optional) If true it will accept all security certificates. Defaults to false
*
* @param {String} config.fileKey
* Name of the form element. Defaults to "file"
*
* @param {String} config.fileName
* Name of the file on the server
*
* @param {String} config.mimeType
* mime type of the data being uploaded. defaults to "image/jpeg"
*
* @param {Object} config.params
* (Optional) set of key/value pairs to be passed along with the request
*
* @param {Boolean} config.chunkMode
* Should the data be uploaded in a chunked streaming mode. defaults to true
*
* @param {Object} config.headers
* Map of header name => header values. Multiple values should be specified an array of values
* var headers={'headerParam':'headerValue'};
*
* @param {Function} config.success
* The function called when the File is uploaded successfully
*
* @param {Function} config.success.metadata
*
* @param {Function} config.failure
* The function called when the File upload fails
*
* @param {FileError} config.failure.error
*
* @return {FileTransfer}
*/
upload: function(config) {
var options = new FileUploadOptions();
options.fileKey = config.fileKey || "file";
options.fileName = this.path.substr(this.path.lastIndexOf('/') + 1);
options.mimeType = config.mimeType || "image/jpeg";
options.params = config.params || {};
options.headers = config.headers || {};
options.chunkMode = config.chunkMode || true;
var fileTransfer = new FileTransfer();
fileTransfer.upload(this.path, encodeURI(config.url), config.success, config.failure, options, config.trustAllHosts || false);
return fileTransfer;
},
/**
* Downloads a file from the server saving it into the Local File System
*
* @param {Object} config
*
* @param {String} config.source
* URL of file to download
*
* @param {Boolean} config.trustAllHosts
* if true it will accept all security certificates. Defaults to false
*
* @param {Object} config.options
* Header parameters (Auth, etc)
*
* {
* headers: {
* "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
* }
* }
*
* @param {Function} config.success
* The function called when the File is downloaded successfully
*
* @param {Function} config.success.entry
* File Entry object of the downloaded file
*
* @param {Function} config.failure
* The function called when the File download fails
*
* @param {FileError} config.failure.error
*
* @return {FileTransfer}
*/
download: function(config) {
var fileTransfer = new FileTransfer();
fileTransfer.download(
encodeURI(config.source),
this.path,
config.success,
config.failure,
config.trustAllHosts || false,
config.options || {}
);
return fileTransfer;
}
});
}
});