@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
77 lines • 9.78 kB
JavaScript
import { Injectable } from '@angular/core';
import { File } from '@awesome-cordova-plugins/file/ngx';
import { Platform } from '@ionic/angular';
import * as i0 from "@angular/core";
import * as i1 from "@awesome-cordova-plugins/file/ngx";
import * as i2 from "@ionic/angular";
export class ExportDataService {
file;
platform;
constructor(file, platform) {
this.file = file;
this.platform = platform;
}
async triggerDownload(blob, filename) {
if (this.platform.is('cordova')) {
const directory = this.getDownloadDirectory();
filename = await this.ensureFileNameAvailable(directory, filename);
await this.file.writeFile(directory, filename, blob);
return directory;
}
else {
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.setAttribute('visibility', 'hidden');
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
return undefined;
}
}
getDownloadDirectory() {
let directory;
if (this.file.externalRootDirectory) {
directory = this.file.externalRootDirectory;
if (this.platform.is('android')) {
directory += 'Download/';
}
}
else if (this.file.dataDirectory) {
directory = this.file.dataDirectory;
}
else if (this.file.documentsDirectory) {
directory = this.file.documentsDirectory;
}
if (!directory) {
throw new Error('Cannot find a valid directory to download the log file');
}
return directory;
}
async ensureFileNameAvailable(directory, filename) {
const parts = filename.split('.');
const extension = parts.length > 1 ? '.' + parts[parts.length - 1] : '';
const filenameWithoutExt = parts.length > 1 ? parts.slice(0, parts.length - 1).join('.') : parts[0];
let count = 1;
while (await this.file
.checkFile(directory, filename)
.then((_) => true)
.catch((err) => {
console.log('Check file err', err);
return false;
})) {
filename = `${filenameWithoutExt} (${count})${extension}`;
count++;
}
return filename;
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, deps: [{ token: i1.File }, { token: i2.Platform }], target: i0.ɵɵFactoryTarget.Injectable });
/** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: () => [{ type: i1.File }, { type: i2.Platform }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktZGlyZWN0aXZlL2V4cG9ydC1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSzFDLE1BQU0sT0FBTyxpQkFBaUI7SUFDUjtJQUFvQjtJQUF4QyxZQUFvQixJQUFVLEVBQVUsUUFBa0I7UUFBdEMsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBRyxDQUFDO0lBRTlELEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBVSxFQUFFLFFBQWdCO1FBQ2hELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFD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Z3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2ZpbGUvbmd4JztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0RGF0YVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbGU6IEZpbGUsIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtKSB7fVxuXG4gIGFzeW5jIHRyaWdnZXJEb3dubG9hZChibG9iOiBCbG9iLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ2NvcmRvdmEnKSkge1xuICAgICAgY29uc3QgZGlyZWN0b3J5ID0gdGhpcy5nZXREb3dubG9hZERpcmVjdG9yeSgpO1xuICAgICAgZmlsZW5hbWUgPSBhd2FpdCB0aGlzLmVuc3VyZUZpbGVOYW1lQXZhaWxhYmxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpO1xuICAgICAgYXdhaXQgdGhpcy5maWxlLndyaXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lLCBibG9iKTtcbiAgICAgIHJldHVybiBkaXJlY3Rvcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubG9hZERpcmVjdG9yeSgpIHtcbiAgICBsZXQgZGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuZmlsZS5leHRlcm5hbFJvb3REaXJlY3RvcnkpIHtcbiAgICAgIGRpcmVjdG9yeSA9IHRoaXMuZmlsZS5leHRlcm5hbFJvb3REaXJlY3Rvcnk7XG4gICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pcygnYW5kcm9pZCcpKSB7XG4gICAgICAgIGRpcmVjdG9yeSArPSAnRG93bmxvYWQvJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZS5kYXRhRGlyZWN0b3J5KSB7XG4gICAgICBkaXJlY3RvcnkgPSB0aGlzLmZpbGUuZGF0YURpcmVjdG9yeTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZS5kb2N1bWVudHNEaXJlY3RvcnkpIHtcbiAgICAgIGRpcmVjdG9yeSA9IHRoaXMuZmlsZS5kb2N1bWVudHNEaXJlY3Rvcnk7XG4gICAgfVxuICAgIGlmICghZGlyZWN0b3J5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIGEgdmFsaWQgZGlyZWN0b3J5IHRvIGRvd25sb2FkIHRoZSBsb2cgZmlsZScpO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0b3J5O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVGaWxlTmFtZUF2YWlsYWJsZShcbiAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBmaWxlbmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlbmFtZS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhcnRzLmxlbmd0aCA+IDEgPyAnLicgKyBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA6ICcnO1xuICAgIGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dCA9XG4gICAgICBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSkuam9pbignLicpIDogcGFydHNbMF07XG4gICAgbGV0IGNvdW50ID0gMTtcbiAgICB3aGlsZSAoXG4gICAgICBhd2FpdCB0aGlzLmZpbGVcbiAgICAgICAgLmNoZWNrRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKVxuICAgICAgICAudGhlbigoXykgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ2hlY2sgZmlsZSBlcnInLCBlcnIpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSlcbiAgICApIHtcbiAgICAgIGZpbGVuYW1lID0gYCR7ZmlsZW5hbWVXaXRob3V0RXh0fSAoJHtjb3VudH0pJHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBmaWxlbmFtZTtcbiAgfVxufVxuIl19