diff --git a/android/app/src/main/assets/capacitor.config.json b/android/app/src/main/assets/capacitor.config.json index 4f2d5e665..eeb28f218 100644 --- a/android/app/src/main/assets/capacitor.config.json +++ b/android/app/src/main/assets/capacitor.config.json @@ -18,6 +18,6 @@ } }, "server": { - "url": "http://192.168.0.69:8100" + "url": "http://192.168.0.69:8101" } } diff --git a/src/app/shared/chat/group-messages/group-messages.page.ts b/src/app/shared/chat/group-messages/group-messages.page.ts index 8d3e0f9c3..25d048aa7 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.ts +++ b/src/app/shared/chat/group-messages/group-messages.page.ts @@ -1,5 +1,5 @@ import { Component, OnChanges, OnInit, Input, SimpleChanges, ChangeDetectorRef, Output, EventEmitter, ViewChild, ElementRef, AfterViewChecked, AfterViewInit, OnDestroy } from '@angular/core'; -import { ActionSheetController, AnimationController, IonSlides, MenuController, ModalController, PopoverController } from '@ionic/angular'; +import { ActionSheetController, AnimationController, IonSlides, MenuController, ModalController, PopoverController, Platform } from '@ionic/angular'; import { AlertService } from 'src/app/services/alert.service'; import { AuthService } from 'src/app/services/auth.service'; import { ChatService } from 'src/app/services/chat.service'; @@ -36,6 +36,8 @@ import { Camera, CameraResultType, CameraSource } from '@capacitor/camera'; import { VoiceRecorder, VoiceRecorderPlugin, RecordingData, GenericResponse, CurrentRecordingStatus } from 'capacitor-voice-recorder'; import { Filesystem, Directory, Encoding } from '@capacitor/filesystem'; import { DomSanitizer } from '@angular/platform-browser'; +import { File } from '@awesome-cordova-plugins/file/ngx'; +import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx'; /* import * as pdfjsLib from 'pdfjs-dist'; @@ -121,6 +123,9 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe private CameraService: CameraService, private toastService: ToastService, private sanitiser: DomSanitizer, + private file: File, + private platform: Platform, + private fileOpener: FileOpener, ) { console.log('OnCONSTRUCTOR'); @@ -907,7 +912,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe const zoneOriginalInstance = (fileReader as any)["__zone_symbol__originalInstance"]; return zoneOriginalInstance || fileReader; } - + getBase64(file) { var reader = this.getFileReader(); reader.readAsDataURL(file); @@ -1016,22 +1021,75 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe downloadLink.click(); } + b64toBlob(b64Data, contentType) { + contentType = contentType || ''; + var sliceSize = 512; + b64Data = b64Data.replace(/^[^,]+,/, ''); + b64Data = b64Data.replace(/\s/g, ''); + var byteCharacters = window.atob(b64Data); + var byteArrays = []; + + for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { + var slice = byteCharacters.slice(offset, offset + sliceSize); + + var byteNumbers = new Array(slice.length); + for (var i = 0; i < slice.length; i++) { + byteNumbers[i] = slice.charCodeAt(i); + } + + var byteArray = new Uint8Array(byteNumbers); + + byteArrays.push(byteArray); + } + + var blob = new Blob(byteArrays, { type: contentType }); + return blob; + } + + openFile(pdfString, filename, type) { + const blob = this.b64toBlob(pdfString, type) + let pathFile = '' + const fileName = filename + const contentFile = blob + if (this.platform.is('ios')) { + pathFile = this.file.documentsDirectory + } else { + pathFile = this.file.externalRootDirectory + } + console.log(pdfString) + console.log(pathFile) + console.log(contentFile) + this.file + .writeFile(pathFile, fileName, contentFile, { replace: true }) + .then(success => { + this.fileOpener + .open(pathFile + fileName, type) + .then(() => console.log('File is opened')) + .catch(e => console.log('Error opening file', e)); + }) + .catch(e => console.log('Error writing file', e)) + } + async openPreview(msg) { - if(msg.file.type === "application/webtrix") { + if (msg.file.type === "application/webtrix") { this.viewDocument(msg.file, msg.attachments.image_url) } else { if (!msg.attachments[0].image_url || msg.attachments[0].image_url === null || msg.attachments[0].image_url === '') { this.downloadFileMsg(msg) - + } else { - + var str = msg.attachments[0].image_url; str = str.substring(1, ((str.length) - 1)); - this.downloadFileFromBrowser(msg.attachments[0].name, str) - + if (this.platform.is('desktop') || this.platform.is('mobileweb')) { + this.downloadFileFromBrowser(msg.attachments[0].name, str) + } else if (this.platform.is('tablet')) { + this.openFile(str, msg.attachments[0].name, msg.file.type); + } + /* const modal = await this.modalController.create({ component: ViewMediaPage, cssClass: 'modal modal-desktop', diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index 1729c608c..5343eb941 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -36,6 +36,7 @@ import { VoiceRecorder, VoiceRecorderPlugin, RecordingData, GenericResponse, Cur import { Filesystem, Directory, Encoding } from '@capacitor/filesystem'; import { DomSanitizer } from '@angular/platform-browser'; import { File } from '@awesome-cordova-plugins/file/ngx'; +import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx'; const IMAGE_DIR = 'stored-images'; @Component({ @@ -121,6 +122,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy private sanitiser: DomSanitizer, private file: File, private platform: Platform, + private fileOpener: FileOpener, ) { this.loggedUser = authService.ValidatedUserChat['data']; } @@ -967,27 +969,6 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy return blob; } - createFile(pdfString, filename, type) { - const blob = this.b64toBlob(pdfString, type) - let pathFile = '' - const fileName = filename - const contentFile = blob - if (this.platform.is('ios')) { - pathFile = this.file.documentsDirectory - } else { - pathFile = this.file.externalRootDirectory - } - console.log(pdfString) - console.log(pathFile) - console.log(contentFile) - this.file - .writeFile(pathFile, fileName, contentFile, { replace: true }) - .then(success => { - console.log('File is created'); - }) - .catch(e => console.log('Error writing file', e)) - } - downloadFileFromBrowser(fileName: string, data: any): void { const linkSource = data; const downloadLink = document.createElement("a"); @@ -1007,6 +988,30 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } } + openFile(pdfString, filename, type) { + const blob = this.b64toBlob(pdfString, type) + let pathFile = '' + const fileName = filename + const contentFile = blob + if (this.platform.is('ios')) { + pathFile = this.file.documentsDirectory + } else { + pathFile = this.file.externalRootDirectory + } + console.log(pdfString) + console.log(pathFile) + console.log(contentFile) + this.file + .writeFile(pathFile, fileName, contentFile, { replace: true }) + .then(success => { + this.fileOpener + .open(pathFile + fileName, type) + .then(() => console.log('File is opened')) + .catch(e => console.log('Error opening file', e)); + }) + .catch(e => console.log('Error writing file', e)) + } + async openPreview(msg) { console.log(msg); @@ -1043,7 +1048,14 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy var str = msg.attachments[0].image_url; str = str.substring(1, ((str.length) - 1)); - this.downloadFileFromBrowser(msg.attachments[0].name, str) + if (this.platform.is('desktop') || this.platform.is('mobileweb')) { + this.downloadFileFromBrowser(msg.attachments[0].name, str) + } else if (this.platform.is('tablet')) { + this.openFile(str, msg.attachments[0].name, msg.file.type); + } + + + }