Merge pull request #1645 from dpalou/MOBILE-2750
MOBILE-2750 file: Fix error reading file in Androidmain
commit
292fdb82ff
|
@ -45,6 +45,70 @@ export class CoreFileProvider {
|
||||||
constructor(logger: CoreLoggerProvider, private platform: Platform, private file: File, private appProvider: CoreAppProvider,
|
constructor(logger: CoreLoggerProvider, private platform: Platform, private file: File, private appProvider: CoreAppProvider,
|
||||||
private textUtils: CoreTextUtilsProvider, private zip: Zip, private mimeUtils: CoreMimetypeUtilsProvider) {
|
private textUtils: CoreTextUtilsProvider, private zip: Zip, private mimeUtils: CoreMimetypeUtilsProvider) {
|
||||||
this.logger = logger.getInstance('CoreFileProvider');
|
this.logger = logger.getInstance('CoreFileProvider');
|
||||||
|
|
||||||
|
if (platform.is('android') && !Object.getOwnPropertyDescriptor(FileReader.prototype, 'onloadend')) {
|
||||||
|
// Cordova File plugin creates some getters and setter for FileReader, but Ionic's polyfills override them in Android.
|
||||||
|
// Create the getters and setters again. This code comes from FileReader.js in cordova-plugin-file.
|
||||||
|
this.defineGetterSetter(FileReader.prototype, 'readyState', function(): any {
|
||||||
|
return this._localURL ? this._readyState : this._realReader.readyState;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.defineGetterSetter(FileReader.prototype, 'error', function(): any {
|
||||||
|
return this._localURL ? this._error : this._realReader.error;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.defineGetterSetter(FileReader.prototype, 'result', function(): any {
|
||||||
|
return this._localURL ? this._result : this._realReader.result;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.defineEvent('onloadstart');
|
||||||
|
this.defineEvent('onprogress');
|
||||||
|
this.defineEvent('onload');
|
||||||
|
this.defineEvent('onerror');
|
||||||
|
this.defineEvent('onloadend');
|
||||||
|
this.defineEvent('onabort');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define an event for FileReader.
|
||||||
|
*
|
||||||
|
* @param {string} eventName Name of the event.
|
||||||
|
*/
|
||||||
|
protected defineEvent(eventName: string): void {
|
||||||
|
this.defineGetterSetter(FileReader.prototype, eventName, function(): any {
|
||||||
|
return this._realReader[eventName] || null;
|
||||||
|
}, function(value: any): void {
|
||||||
|
this._realReader[eventName] = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define a getter and, optionally, a setter for a certain property in an object.
|
||||||
|
*
|
||||||
|
* @param {any} obj Object to set the getter/setter for.
|
||||||
|
* @param {string} key Name of the property where to set them.
|
||||||
|
* @param {Function} getFunc The getter function.
|
||||||
|
* @param {Function} [setFunc] The setter function.
|
||||||
|
*/
|
||||||
|
protected defineGetterSetter(obj: any, key: string, getFunc: Function, setFunc?: Function): void {
|
||||||
|
if (Object.defineProperty) {
|
||||||
|
const desc: any = {
|
||||||
|
get: getFunc,
|
||||||
|
configurable: true
|
||||||
|
};
|
||||||
|
|
||||||
|
if (setFunc) {
|
||||||
|
desc.set = setFunc;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.defineProperty(obj, key, desc);
|
||||||
|
} else {
|
||||||
|
obj.__defineGetter__(key, getFunc);
|
||||||
|
if (setFunc) {
|
||||||
|
obj.__defineSetter__(key, setFunc);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -43,6 +43,7 @@ export class CoreLoggerProvider {
|
||||||
*/
|
*/
|
||||||
getInstance(className: string): any {
|
getInstance(className: string): any {
|
||||||
className = className || '';
|
className = className || '';
|
||||||
|
/* tslint:disable no-console */
|
||||||
|
|
||||||
return {
|
return {
|
||||||
log: this.prepareLogFn(console.log.bind(console), className),
|
log: this.prepareLogFn(console.log.bind(console), className),
|
||||||
|
|
Loading…
Reference in New Issue