import { Injectable } from '@angular/core'; import { FileLoaderService } from '../file/file-loader.service'; import { InAppBrowser } from '@ionic-native/in-app-browser/ngx'; import { LoadingController, Platform } from '@ionic/angular'; import {Photo} from '@capacitor/camera'; import { FileType } from 'src/app/models/fileType'; import { Filesystem, Directory } from '@capacitor/filesystem'; import { FileToBase64Service } from 'src/app/services/file/file-to-base64.service'; const IMAGE_DIR = 'stored-images'; interface LocalFile { name: string; path: string; data: string; } @Injectable({ providedIn: 'root' }) export class FileService { images: LocalFile[] = []; capturedImage:any; capturedImageTitle:any; showLoader: boolean; files: Set; photos: any[] = []; idroom: any; downloadProgess = 0; downloadFilename: any; convertBlobToBase64Worker; constructor( private fileLoaderService: FileLoaderService, private iab: InAppBrowser, private loadingCtrl: LoadingController, private platform: Platform, private fileToBase64Service: FileToBase64Service ) {} convertBlobToBase64 = (blob: Blob) => new Promise((resolve, reject) => { const reader = new FileReader; reader.onerror = reject; reader.onload = () => { resolve(reader.result); }; reader.readAsDataURL(blob); }); async saveImage(photo: Photo) { const base64Data = await this.readAsBase64(photo); const fileName = new Date().getTime() + '.jpeg'; const savedFile = await Filesystem.writeFile({ path: `${IMAGE_DIR}/${fileName}`, data: base64Data, directory: Directory.Data }); } //new method 3 async loadFiles() { const loading = await this.loadingCtrl.create({ message: 'Loading data...', }); await loading.present(); return new Promise((resolve, reject)=>{ Filesystem.readdir({ path: IMAGE_DIR, directory: Directory.Data, }).then(result => { let lastphoto = result.files[result.files.length - 1] resolve(lastphoto) }, async (err) => { reject('ERROR FILE DOSENT EXIST') // Folder does not yet exists! await Filesystem.mkdir({ path: IMAGE_DIR, directory: Directory.Data, recursive: true }); } ).then(_ => { loading.dismiss(); }); }) } //new method 2 private async readAsBase64(photo: Photo) { if (this.platform.is('hybrid')) { const file = await Filesystem.readFile({ path: photo.path }); return file.data; } else { // Fetch the photo, read as a blob, then convert to base64 format const response = await fetch(photo.webPath); const blob = await response.blob(); return await this.convertBlobToBase64(blob) as string; } } async readFile(filePath) { return await Filesystem.readFile({ path: filePath, directory: Directory.Data, }); } //new method 4 async loadFileData(fileName: string) { // for (let f of fileNames) { const filePath = `${IMAGE_DIR}/${fileName}`; const readFile = await this.readFile(filePath) const image ={ name: fileName, path: filePath, data: `data:image/jpeg;base64,${readFile.data}`, }; const capturedImage = image.data const capturedImageTitle = new Date().getTime() + '.jpeg'; return { capturedImage, capturedImageTitle} } getFileFromDevice(types: typeof FileType[]) { const input = this.fileLoaderService.createInput({ accept: types }) return new Promise((resolve, reject)=>{ input.onchange = async () => { const file = this.fileLoaderService.getFirstFile(input) resolve(file); }; }) } viewDocumentByUrl(url) { const browser = this.iab.create(url,"_parent"); browser.show(); } }