mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 12:37:53 +00:00
178 lines
3.9 KiB
TypeScript
178 lines
3.9 KiB
TypeScript
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<File>;
|
|
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();
|
|
}
|
|
|
|
}
|