diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index fd96b8a75..6af9aecb4 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -31,6 +31,7 @@ import { MessageService } from 'src/app/services/chat/message.service'; import { File } from '@awesome-cordova-plugins/file/ngx'; import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx'; import { SessionStore } from 'src/app/store/session.service'; +import { ViewMediaPage } from 'src/app/modals/view-media/view-media.page'; @Component({ selector: 'app-group-messages', @@ -1054,7 +1055,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { return blob; } - openFile(pdfString, filename) { + openFile(pdfString, filename, type) { const blob = this.b64toBlob(pdfString, 'application/pdf') let pathFile = '' const fileName = filename @@ -1105,21 +1106,38 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - this.downloadFileFromBrowser(msg.attachments[0].name, str) - /* const modal = await this.modalController.create({ - component: ViewMediaPage, - cssClass: 'modal modal-desktop', - componentProps: { - image: str, - type: msg.file.type, - username: msg.u.name, - _updatedAt: msg._updatedAt - } - }); - modal.present(); */ + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.downloadFileFromBrowser(msg.attachments[0].name, str) + } } else { - this.openFile(str, msg.attachments[0].name); + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.openFile(str, msg.attachments[0].name, msg.file.type); + } } } } diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts index cc8657f78..9299ace5c 100644 --- a/src/app/pages/chat/messages/messages.page.ts +++ b/src/app/pages/chat/messages/messages.page.ts @@ -19,7 +19,7 @@ import { ChatUserStorage } from 'src/app/store/chat/chat-user.service'; import { environment } from 'src/environments/environment'; import { ThemeService } from 'src/app/services/theme.service' -import { VoiceRecorder, RecordingData, GenericResponse} from 'capacitor-voice-recorder'; +import { VoiceRecorder, RecordingData, GenericResponse } from 'capacitor-voice-recorder'; import { Haptics, ImpactStyle } from '@capacitor/haptics'; import { SqliteService } from 'src/app/services/sqlite.service'; import { ViewEventPage } from 'src/app/modals/view-event/view-event.page'; @@ -37,6 +37,9 @@ import { Camera, CameraResultType, CameraSource } from '@capacitor/camera'; import { DomSanitizer } from '@angular/platform-browser'; import { SessionStore } from 'src/app/store/session.service'; import { HttpErrorResponse } from '@angular/common/http'; +import { File } from '@awesome-cordova-plugins/file/ngx'; +import { ViewMediaPage } from 'src/app/modals/view-media/view-media.page'; +import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx'; const IMAGE_DIR = 'stored-images'; @@ -100,7 +103,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { downloadProgess: number; downloadLoader: boolean; - audioPermissionStatus: 'granted'| 'denied' | 'prompt' | null = null + audioPermissionStatus: 'granted' | 'denied' | 'prompt' | null = null sessionStore = SessionStore constructor( @@ -132,10 +135,12 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { private sanitiser: DomSanitizer, private alertController: AlertController, // private document: DocumentViewer + private file: File, + private fileOpener: FileOpener, ) { this.loggedUser = authService.ValidatedUserChat['data']; this.roomId = this.navParams.get('roomId'); - + window.onresize = (event) => { if (window.innerWidth > 701) { @@ -143,7 +148,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { } } - + this.wsChatMethodsService.getDmRoom(this.roomId).loadHistory({}) this.wsChatMethodsService.getDmRoom(this.roomId).scrollDown = this.scrollToBottomClicked @@ -157,11 +162,12 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { } ngOnInit() { + this.wsChatMethodsService.getAllRooms(); this.chatService.refreshtoken(); this.wsChatMethodsService.getUserOfRoom(this.roomId).then((value) => { - + }) - + this.getChatMembers(); } @@ -210,11 +216,11 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { try { this.storage.get('recordData').then((recordData) => { - + if (recordData?.value?.recordDataBase64.includes('data:audio')) { this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64); } - else if(recordData?.value?.mimeType && recordData?.value?.recordDataBase64) { + else if (recordData?.value?.mimeType && recordData?.value?.recordDataBase64) { this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`); } }); @@ -225,22 +231,22 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { async startRecording() { VoiceRecorder.requestAudioRecordingPermission(); - if(await VoiceRecorder.canDeviceVoiceRecord().then((result: GenericResponse) =>{return result.value})){ - if(await VoiceRecorder.requestAudioRecordingPermission().then((result: GenericResponse) => {return result.value})){ + if (await VoiceRecorder.canDeviceVoiceRecord().then((result: GenericResponse) => { return result.value })) { + if (await VoiceRecorder.requestAudioRecordingPermission().then((result: GenericResponse) => { return result.value })) { //if(await this.hasAudioRecordingPermission()){ - if (this.recording) { - return; - } - this.recording = true; - VoiceRecorder.startRecording(); - this.calculateDuration(); + if (this.recording) { + return; + } + this.recording = true; + VoiceRecorder.startRecording(); + this.calculateDuration(); //} } - else{ + else { this.toastService._badRequest('Para gravar uma mensagem de voz, permita o acesso do Gabinete Digital ao seu microfone.'); } } - else{ + else { this.toastService._badRequest('Este dispositivo não tem capacidade para gravação de áudio!'); } } @@ -248,13 +254,13 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { stopRecording() { this.deleteRecording(); this.allowTyping = false; - + if (!this.recording) { return; } this.recording = false; VoiceRecorder.stopRecording().then(async (result: RecordingData) => { - + this.recording = false; if (result.value && result.value.recordDataBase64) { const recordData = result.value.recordDataBase64; @@ -263,7 +269,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { //Save file this.storage.set('fileName', fileName); this.storage.set('recordData', result).then(() => { - + }) } }) @@ -348,7 +354,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { }); await modal.present(); modal.onDidDismiss().then((res) => { - + }); } @@ -412,16 +418,16 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { if (recordData?.value?.recordDataBase64.includes('data:audio')) { this.audioRecorded = recordData?.value?.recordDataBase64; } - else if(recordData?.value?.mimeType && recordData?.value?.recordDataBase64) { + else if (recordData?.value?.mimeType && recordData?.value?.recordDataBase64) { this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`; } - + //Converting base64 to blob const encodedData = btoa(this.audioRecorded); const blob = this.base64toBlob(encodedData, recordData.value.mimeType) - + const formData = new FormData(); formData.append("blobFile", blob); @@ -444,7 +450,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { } viewDocument(file: any, url?: string) { - + if (file.type == "application/webtrix") { this.openViewDocumentModal(file); } @@ -595,7 +601,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { IsRequired: "true", } }); - + this.popoverController.dismiss(); if (window.innerWidth <= 1024) { const modal = await this.modalController.create({ @@ -629,7 +635,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { const blob = await base64.blob(); const formData = new FormData(); formData.append("blobFile", blob); - + this.wsChatMethodsService.getDmRoom(roomId).send({ file: { @@ -709,7 +715,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { resultType: CameraResultType.Base64, source: CameraSource.Photos }); - + //const imageData = await this.fileToBase64Service.convert(file) // @@ -746,17 +752,17 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { const file: any = await this.fileService.getFileFromDevice(types); - + if (file.type != "application/img" && file.type != "image/png" && file.type != "image/jpeg" && file.type != "image/gif") { const encodedData = btoa(JSON.stringify(await this.getBase64(file))); const blob = this.base64toBlob(encodedData, file.type) - + const formData = new FormData(); formData.append('blobFile', blob); - + this.wsChatMethodsService.getDmRoom(roomId).send({ file: { @@ -772,7 +778,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { temporaryData: formData }); } else { - + } @@ -787,7 +793,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { resolve(reader.result) }; reader.onerror = function (error) { - + }; }); @@ -795,7 +801,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { async openChatOptions(ev?: any) { const roomId = this.roomId - + const popover = await this.popoverController.create({ component: ChatOptionsPopoverPage, @@ -810,7 +816,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { }); await popover.present(); popover.onDidDismiss().then(async (res) => { - + if (res['data'] == 'meeting') { this.bookMeeting(); } @@ -837,11 +843,11 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { if (this.platform.is('desktop') || this.platform.is('mobileweb')) { } else { this.sqlservice.getAllChatMSG(roomId).then((msg: any) => { - + let chatmsgArray = []; let array = [] msg.forEach(element => { - + let msgChat = { _id: element.Id, @@ -861,7 +867,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { }); - + }) } } @@ -943,27 +949,27 @@ export class MessagesPage implements OnInit, 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 - // } - // - // - // - // this.file - // .writeFile(pathFile, fileName, contentFile, { replace: true }) - // .then(success => { - // this.fileOpener - // .open(pathFile + fileName, type) - // .then(() => - // .catch(e => - // }) - // .catch(e => + 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 + } + + + + this.file + .writeFile(pathFile, fileName, contentFile, { replace: true }) + .then(success => { + this.fileOpener + .open(pathFile + fileName, type) + .then(() => console.log()) + .catch(e => console.error(e)) + }) + .catch(e => console.error(e)) } downloadFileFromBrowser(fileName: string, data: any): void { @@ -976,9 +982,9 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { async openPreview(msg) { - - if(msg.file.type === "application/webtrix") { + + if (msg.file.type === "application/webtrix") { this.viewDocument(msg.file, msg.attachments.image_url) } else { @@ -992,21 +998,38 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - this.downloadFileFromBrowser(msg.attachments[0].name, str) - /* const modal = await this.modalController.create({ - component: ViewMediaPage, - cssClass: 'modal modal-desktop', - componentProps: { - image: str, - type: msg.file.type, - username: msg.u.name, - _updatedAt: msg._updatedAt - } - }); - modal.present(); */ + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.downloadFileFromBrowser(msg.attachments[0].name, str) + } } else { - this.openFile(str, msg.attachments[0].name, msg.file.type); + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.openFile(str, msg.attachments[0].name, msg.file.type); + } } } @@ -1015,7 +1038,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { } async audioPreview(msg) { - + if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') { this.downloadFileMsg(msg) } else { } 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 b1cf161c8..f5e2b4b96 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.ts +++ b/src/app/shared/chat/group-messages/group-messages.page.ts @@ -35,6 +35,7 @@ import { File } from '@awesome-cordova-plugins/file/ngx'; import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx'; import { SessionStore } from 'src/app/store/session.service'; import { HttpErrorResponse } from '@angular/common/http'; +import { ViewMediaPage } from 'src/app/modals/view-media/view-media.page'; /* @@ -1102,35 +1103,55 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe async openPreview(msg) { + 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) + //this.testDownlod(msg) } else { - var str = msg.attachments[0].image_url; str = str.substring(1, ((str.length) - 1)); 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); + + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.downloadFileFromBrowser(msg.attachments[0].name, str) + } + + } else { + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.openFile(str, msg.attachments[0].name, msg.file.type); + } } - /* const modal = await this.modalController.create({ - component: ViewMediaPage, - cssClass: 'modal modal-desktop', - componentProps: { - image: str, - type: msg.file.type, - username: msg.u.name, - _updatedAt: msg._updatedAt - } - }); - modal.present(); */ } } diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index cd3922145..db221790e 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -34,6 +34,7 @@ import { SessionStore } from 'src/app/store/session.service'; import { HttpErrorResponse } from '@angular/common/http'; import { Howl } from 'howler'; import { runInThisContext } from 'vm'; +import { ViewMediaPage } from 'src/app/modals/view-media/view-media.page'; const IMAGE_DIR = 'stored-images'; @@ -98,6 +99,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy audioDuration = 0; audioTimer:any; @ViewChild('range', {static: false}) range: IonRange; + room: any = new Array(); + roomName: any; + isAdmin = false; + roomCountDownDate: string; constructor( public popoverController: PopoverController, @@ -127,6 +132,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } ngOnChanges(changes: SimpleChanges): void { + this.wsChatMethodsService.getAllRooms(); this.wsChatMethodsService.getDmRoom(this.roomId).loadHistory({}) this.wsChatMethodsService.getDmRoom(this.roomId).scrollDown = this.scrollToBottomClicked @@ -163,9 +169,9 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } ngOnInit() { + this.wsChatMethodsService.getAllRooms(); this.chatService.refreshtoken(); this.scrollToBottom(); - this.getChatMembers(); this.deleteRecording(); @@ -1014,52 +1020,57 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } 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) + //this.testDownlod(msg) - - /* } else if (msg.file.type === "application/pdf") { - - - - const win = window.open("", "_blank"); - let html = ''; - - html += ''; - html += '
'; - html += ''; - html += ''; - html += ''; - - setTimeout(() => { - win.document.write(html); - }, 0); */ - - - - //this.viewDocument(msg, msg.attachments.image_url) } else { - var str = msg.attachments[0].image_url; str = str.substring(1, ((str.length) - 1)); 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); + + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.downloadFileFromBrowser(msg.attachments[0].name, str) + } + + } else { + if (msg.file.type == "application/img") { + const modal = await this.modalController.create({ + component: ViewMediaPage, + cssClass: 'modal modal-desktop', + componentProps: { + image: msg.attachments[0].image_url, + type: msg.file.type, + username: msg.u.name, + _updatedAt: msg._updatedAt + } + }); + modal.present(); + } else { + this.openFile(str, msg.attachments[0].name, msg.file.type); + } } - - - } - } } @@ -1116,6 +1127,27 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy },1000) } + async getRoomInfo() { + this.wsChatMethodsService.getGroupRoom(this.roomId).loadHistory({}); + let room = await this.chatService.getRoomInfo(this.roomId).toPromise(); + // console.log('ROOM',room) + this.room = room['room']; + if (this.room.name) { + this.roomName = this.room.name.split('-').join(' '); + } + + + if(SessionStore.user.ChatData.data.userId == this.room.u._id){ + this.isAdmin = true + } else { + this.isAdmin = false + } + + if (this.room.customFields.countDownDate) { + this.roomCountDownDate = this.room.customFields.countDownDate; + } + } + }