{"ast":null,"code":"import _asyncToGenerator from \"C:/Users/eudes.inacio/GabineteDigital/gabinete-digital-fo/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { __decorate } from \"tslib\";\nimport __NG_CLI_RESOURCE__0 from \"./group-messages.page.html?ngResource\";\nimport __NG_CLI_RESOURCE__1 from \"./group-messages.page.scss?ngResource\";\nimport { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { AnimationController, ModalController, PopoverController, Platform } from '@ionic/angular';\nimport { AlertService } from 'src/app/services/alert.service';\nimport { ChatService } from 'src/app/services/chat.service';\nimport { ChatPopoverPage } from 'src/app/shared/popover/chat-popover/chat-popover.page';\nimport { GroupContactsPage } from './group-contacts/group-contacts.page';\nimport { ChatOptionsPopoverPage } from '../../popover/chat-options-popover/chat-options-popover.page';\nimport { ChatOptionsFeaturesPage } from 'src/app/modals/chat-options-features/chat-options-features.page';\nimport { TimeService } from 'src/app/services/functions/time.service';\nimport { SearchPage } from 'src/app/pages/search/search.page';\nimport { FileService } from 'src/app/services/functions/file.service';\nimport { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';\nimport { ThemeService } from 'src/app/services/theme.service';\nimport { ViewEventPage } from 'src/app/modals/view-event/view-event.page';\nimport { Storage } from '@ionic/storage';\nimport { ChatSystemService } from 'src/app/services/chat/chat-system.service';\nimport { CameraService } from 'src/app/services/camera.service';\nimport { ToastService } from 'src/app/services/toast.service';\nimport { Camera, CameraResultType, CameraSource } from '@capacitor/camera';\nimport { VoiceRecorder } from 'capacitor-voice-recorder';\nimport { Filesystem, Directory } from '@capacitor/filesystem';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { File } from '@awesome-cordova-plugins/file/ngx';\nimport { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx';\nimport { SessionStore } from 'src/app/store/session.service';\nimport { ViewMediaPage } from 'src/app/modals/view-media/view-media.page';\nimport { PermissionService } from 'src/app/services/permission.service';\nlet GroupMessagesPage = class GroupMessagesPage {\n constructor(ChatSystemService, modalController, popoverController, chatService, animationController, alertService, timeService, fileService, ThemeService, storage, CameraService, toastService, sanitiser, file, platform, fileOpener, p) {\n this.ChatSystemService = ChatSystemService;\n this.modalController = modalController;\n this.popoverController = popoverController;\n this.chatService = chatService;\n this.animationController = animationController;\n this.alertService = alertService;\n this.timeService = timeService;\n this.fileService = fileService;\n this.ThemeService = ThemeService;\n this.storage = storage;\n this.CameraService = CameraService;\n this.toastService = toastService;\n this.sanitiser = sanitiser;\n this.file = file;\n this.platform = platform;\n this.fileOpener = fileOpener;\n this.p = p;\n this.allUsers = [];\n this.documents = [];\n this.room = new Array();\n this.scrollingOnce = true;\n this.scrollToBottomBtn = false;\n this.isAdmin = false;\n this.closeAllDesktopComponents = new EventEmitter();\n this.showEmptyContainer = new EventEmitter();\n this.openGroupContacts = new EventEmitter();\n this.openEditGroupPage = new EventEmitter();\n this.openNewEventPage = new EventEmitter();\n this.getGroups = new EventEmitter();\n this.showAvatar = false;\n this.recording = false;\n this.allowTyping = true;\n this.storedFileNames = [];\n this.lastAudioRecorded = '';\n this.audioRecorded = \"\";\n this.audioDownloaded = \"\";\n this.durationDisplay = '';\n this.duration = 0;\n this.audioPermissionStatus = null;\n this.sessionStore = SessionStore;\n this.groupNameFormart = \"\";\n this.scrollToBottomClicked = () => {\n try {\n this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;\n } catch (err) {}\n };\n this.loggedUserChat = SessionStore.user.ChatData['data'];\n this.isGroupCreated = true;\n this.roomCountDownDate = \"\";\n this.roomCountDownTime = \"\";\n }\n ngOnChanges(changes) {\n this.getRoomInfo();\n this.ChatSystemService.getGroupRoom(this.roomId).loadHistory({});\n // \n this.ChatSystemService.openRoom(this.roomId);\n this.ChatSystemService.getGroupRoom(this.roomId).scrollDown = this.scrollToBottomClicked;\n this.groupNameFormart = this.ChatSystemService.getGroupRoom(this.roomId).name.split('-').join(' ');\n this.showAvatar = false;\n setTimeout(() => {\n this.scrollToBottomClicked();\n this.showAvatar = true;\n }, 50);\n this.deleteRecording();\n }\n ngOnInit() {\n this.loggedUser = this.loggedUserChat;\n //setTimeout(() => {\n this.getRoomInfo();\n //}, 1000);\n this.getChatMembers();\n this.deleteRecording();\n this.loadFiles();\n }\n showDateDuration(start) {\n return this.timeService.showDateDuration(start);\n }\n countDownDate() {\n return this.timeService.countDownDateTimer(this.roomCountDownDate, this.roomId);\n }\n setStatus(status) {\n let body = {\n message: '',\n status: status\n };\n this.chatService.setUserStatus(body).subscribe(res => {\n //\n });\n }\n scrollToBottom() {\n try {\n if (this.scrollingOnce) {\n this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;\n }\n } catch (err) {}\n }\n goToEvent(event) {\n var _this = this;\n return _asyncToGenerator(function* () {\n let classs;\n if (window.innerWidth < 701) {\n classs = 'modal modal-desktop';\n } else {\n classs = 'modal modal-desktop showAsideOptions';\n }\n const modal = yield _this.modalController.create({\n component: ViewEventPage,\n componentProps: {\n eventId: event.id,\n CalendarId: event.calendarId\n },\n cssClass: classs\n });\n yield modal.present();\n modal.onDidDismiss().then(res => {});\n })();\n }\n ngAfterViewInit() {\n this.scrollChangeCallback = () => this.onContentScrolled(event);\n window.addEventListener('scroll', this.scrollChangeCallback, true);\n }\n onContentScrolled(e) {\n this.startPosition = e.srcElement.scrollTop;\n let scroll = e.srcElement.scrollTop;\n let windowHeight = e.srcElement.scrollHeight;\n let containerHeight = windowHeight - e.srcElement.clientHeight;\n if (scroll > this.currentPosition) {} else {\n this.scrollingOnce = false;\n }\n if (containerHeight - 100 > scroll) {\n this.scrollToBottomBtn = true;\n } else {\n this.scrollToBottomBtn = false;\n }\n this.currentPosition = scroll;\n }\n calculateDuration() {\n if (!this.recording) {\n this.duration = 0;\n this.durationDisplay = '';\n return;\n }\n this.duration += 1;\n const minutes = Math.floor(this.duration / 60);\n const seconds = (this.duration % 60).toString().padStart(2, '0');\n this.durationDisplay = `${minutes}:${seconds}`;\n setTimeout(() => {\n this.calculateDuration();\n }, 1000);\n }\n getFile(fileName) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const audioFile = yield Filesystem.readFile({\n path: fileName,\n directory: Directory.Data\n });\n const base64sound = audioFile.data;\n const base64Response = yield fetch(`data:audio/ogg;base64,${base64sound}`);\n _this2.audioRecorded = base64Response.url;\n })();\n }\n loadFiles() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n try {\n _this3.storage.get('fileName').then(fileName => {\n _this3.lastAudioRecorded = fileName;\n });\n _this3.storage.get('recordData').then(recordData => {\n if (recordData?.value?.recordDataBase64.includes('data:audio')) {\n _this3.audioRecorded = _this3.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64);\n } else if (recordData?.value?.mimeType && recordData?.value?.recordDataBase64) {\n _this3.audioRecorded = _this3.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`);\n }\n });\n } catch (error) {}\n })();\n }\n startRecording() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n VoiceRecorder.requestAudioRecordingPermission();\n if (yield VoiceRecorder.canDeviceVoiceRecord().then(result => {\n return result.value;\n })) {\n if (yield VoiceRecorder.requestAudioRecordingPermission().then(result => {\n return result.value;\n })) {\n //if(await this.hasAudioRecordingPermission()){\n if (_this4.recording) {\n return;\n }\n _this4.recording = true;\n VoiceRecorder.startRecording();\n _this4.calculateDuration();\n //}\n } else {\n _this4.toastService._badRequest('Para gravar uma mensagem de voz, permita o acesso do Gabinete Digital ao seu microfone.');\n }\n } else {\n _this4.toastService._badRequest('Este dispositivo não tem capacidade para gravação de áudio!');\n }\n })();\n }\n stopRecording() {\n var _this5 = this;\n this.deleteRecording();\n this.allowTyping = false;\n if (!this.recording) {\n return;\n }\n this.recording = false;\n VoiceRecorder.stopRecording().then( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (result) {\n _this5.recording = false;\n if (result.value && result.value.recordDataBase64) {\n const recordData = result.value.recordDataBase64;\n //\n const fileName = new Date().getTime() + \".mp3\";\n //Save file\n _this5.storage.set('fileName', fileName);\n _this5.storage.set('recordData', result).then(() => {});\n }\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n setTimeout( /*#__PURE__*/_asyncToGenerator(function* () {\n _this5.loadFiles();\n }), 1000);\n }\n deleteRecording() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n _this6.storage.remove('fileName');\n _this6.storage.remove('recordData');\n _this6.allowTyping = true;\n _this6.lastAudioRecorded = '';\n _this6.loadFiles();\n })();\n }\n ngOnDestroy() {\n window.removeEventListener('scroll', this.scrollChangeCallback, true);\n }\n getChatMembers() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n _this7.chatService.getAllUsers().subscribe(res => {\n //\n _this7.allUsers = res['users'].filter(data => data.username != SessionStore.user.UserName);\n //\n });\n })();\n }\n\n openGroupContactsPage() {\n this.openGroupContacts.emit(this.roomId);\n }\n openBookMeetingComponent() {\n let data = {\n roomId: this.roomId,\n members: this.members\n };\n this.openNewEventPage.emit(data);\n }\n close() {\n this.modalController.dismiss();\n }\n doRefresh(ev) {\n this.getRoomInfo();\n ev.target.complete();\n }\n get watch() {\n this.getRoomInfo();\n return this.roomId;\n }\n getRoomInfo() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.ChatSystemService.getGroupRoom(_this8.roomId)) {\n _this8.ChatSystemService.getGroupRoom(_this8.roomId).loadHistory({});\n }\n let room = yield _this8.chatService.getRoomInfo(_this8.roomId).toPromise();\n _this8.room = room['room'];\n if (_this8.room.name) {\n try {\n _this8.roomName = _this8.room.name.split('-').join(' ');\n } catch (error) {\n _this8.roomName = _this8.room.name;\n }\n }\n if (SessionStore.user.ChatData.data.userId == _this8.room.u._id) {\n _this8.isAdmin = true;\n } else {\n _this8.isAdmin = false;\n }\n if (_this8.room.customFields.countDownDate) {\n _this8.roomCountDownDate = _this8.room.customFields.countDownDate;\n }\n _this8.getGroupContacts(_this8.room);\n })();\n }\n getGroupContacts(room) {\n // this.showLoader = true;\n // //If group is private call getGroupMembers\n // if (room.t === 'p') {\n // this.chatService.getGroupMembers(this.roomId).subscribe(res => {\n // //\n // this.members = res['members'];\n // this.showLoader = false;\n // });\n // }\n // //Otherwise call getChannelMembers for públic groups\n // else {\n // this.chatService.getChannelMembers(this.roomId).subscribe(res => {\n // this.members = res['members'];\n // this.showLoader = false;\n // });\n // }\n this.members = this.ChatSystemService.getGroupRoom(this.roomId).members;\n }\n sendMessage() {\n this.ChatSystemService.getGroupRoom(this.roomId).send({});\n }\n base64toBlob(base64Data, contentType) {\n contentType = contentType || '';\n var sliceSize = 1024;\n var byteCharacters = atob(base64Data);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n var bytes = new Array(end - begin);\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n return new Blob(byteArrays, {\n type: contentType\n });\n }\n sendAudio(fileName) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this9.roomId;\n let audioFile;\n _this9.storage.get('recordData').then(recordData => {\n audioFile = recordData;\n if (recordData?.value?.recordDataBase64.includes('data:audio')) {\n _this9.audioRecorded = recordData?.value?.recordDataBase64;\n } else if (recordData?.value?.mimeType && recordData?.value?.recordDataBase64) {\n _this9.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;\n }\n //Converting base64 to blob\n const encodedData = btoa(_this9.audioRecorded);\n const blob = _this9.base64toBlob(encodedData, recordData.value.mimeType);\n const formData = new FormData();\n formData.append(\"blobFile\", blob);\n _this9.ChatSystemService.getGroupRoom(roomId).send({\n file: {\n \"type\": \"application/audio\",\n \"msDuration\": audioFile.value.msDuration,\n \"mimeType\": audioFile.value.mimeType\n },\n attachments: [{\n \"title\": fileName,\n \"title_link_download\": true,\n \"type\": \"audio\"\n }],\n temporaryData: formData\n });\n });\n _this9.deleteRecording();\n })();\n }\n deleteMessage(msgId) {\n const room = this.ChatSystemService.getGroupRoom(this.roomId);\n this.alertService.confirmDeleteMessage(msgId, room);\n }\n openGroupMessagesOptions() {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n const enterAnimation = baseEl => {\n const backdropAnimation = _this10.animationController.create().addElement(baseEl.querySelector('ion-backdrop')).fromTo('opacity', '0.01', 'var(--backdrop-opacity)');\n const wrapperAnimation = _this10.animationController.create().addElement(baseEl.querySelector('.modal-wrapper')).keyframes([{\n offset: 0,\n opacity: '1',\n right: '-100%'\n }, {\n offset: 1,\n opacity: '1',\n right: '0px'\n }]);\n return _this10.animationController.create().addElement(baseEl).easing('ease-out').duration(500).addAnimation([backdropAnimation, wrapperAnimation]);\n };\n const leaveAnimation = baseEl => {\n return enterAnimation(baseEl).direction('reverse');\n };\n const modal = yield _this10.modalController.create({\n enterAnimation,\n leaveAnimation,\n component: ChatPopoverPage,\n cssClass: 'model search-submodal chat-option-aside',\n componentProps: {\n roomId: _this10.roomId,\n members: _this10.members,\n isAdmin: _this10.isAdmin\n }\n });\n yield modal.present();\n modal.onDidDismiss().then(res => {\n if (res.data == 'leave') {\n _this10.getRoomInfo();\n _this10.closeAllDesktopComponents.emit();\n _this10.showEmptyContainer.emit();\n _this10.ChatSystemService.hidingRoom(_this10.roomId).catch(error => console.error(error));\n } else if (res.data == 'delete') {\n _this10.closeAllDesktopComponents.emit();\n _this10.showEmptyContainer.emit();\n } else if (res.data == 'cancel') {} else if (res.data == 'edit') {\n //this.closeAllDesktopComponents.emit();\n _this10.openEditGroupPage.emit(_this10.roomId);\n } else if (res.data == 'addUser') {\n _this10.openGroupContactsPage();\n } else {\n if (res?.data?.name) {\n try {\n _this10.roomName = res.data.name.split('-').join(' ');\n } catch (error) {\n _this10.roomName = res.data.name;\n }\n }\n }\n ;\n });\n })();\n }\n openSendGroupMessageOptions(ev) {\n if (window.innerWidth <= 701) {\n this.openChatOptions(ev);\n } else {\n this._openChatOptions();\n }\n }\n openOptions(ev) {\n var _this11 = this;\n return _asyncToGenerator(function* () {\n const popover = yield _this11.popoverController.create({\n component: ChatPopoverPage,\n cssClass: 'chat-popover modal-desktop',\n event: ev,\n componentProps: {\n room: _this11.room\n },\n translucent: true\n });\n yield popover.present();\n popover.onDidDismiss().then(res => {\n if (res.data) {\n //this.getRoomInfo();\n //this.modalController.dismiss();\n }\n ;\n });\n })();\n }\n openChatOptions(ev) {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n const popover = yield _this12.popoverController.create({\n component: ChatOptionsPopoverPage,\n cssClass: 'chat-options-popover',\n event: ev,\n componentProps: {\n room: _this12.room,\n members: _this12.members\n },\n translucent: true\n });\n yield popover.present();\n yield popover.onDidDismiss().then(() => {});\n })();\n }\n addContacts() {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n if (_this13.isAdmin) {\n const modal = yield _this13.modalController.create({\n component: GroupContactsPage,\n componentProps: {\n isCreated: _this13.isGroupCreated,\n room: _this13.room,\n members: _this13.members,\n name: _this13.room.name\n },\n cssClass: 'contacts',\n backdropDismiss: false\n });\n yield modal.present();\n modal.onDidDismiss().then(() => {\n //this.getRoomInfo();\n });\n }\n })();\n }\n addDocGestaoDocumental() {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n const modal = yield _this14.modalController.create({\n component: SearchPage,\n cssClass: 'group-messages modal-desktop search-modal search-modal-to-desktop',\n componentProps: {\n type: 'AccoesPresidenciais & ArquivoDespachoElect',\n select: true,\n showSearchInput: true\n }\n });\n yield modal.present();\n modal.onDidDismiss().then( /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(function* (res) {\n if (res) {\n const data = res.data;\n _this14.documents.push(data.selected);\n _this14.addFileWebtrix();\n }\n });\n return function (_x2) {\n return _ref3.apply(this, arguments);\n };\n }());\n })();\n }\n viewDocument(file, url) {\n if (file.type == \"application/webtrix\") {\n this.openViewDocumentModal(file);\n } else {\n let fullUrl = \"https://www.tabularium.pt\" + url;\n this.fileService.viewDocumentByUrl(fullUrl);\n }\n }\n openViewDocumentModal(file) {\n var _this15 = this;\n return _asyncToGenerator(function* () {\n let task = {\n serialNumber: '',\n taskStartDate: '',\n isEvent: true,\n workflowInstanceDataFields: {\n FolderID: '',\n Subject: file.Assunto,\n SourceSecFsID: file.ApplicationId,\n SourceType: 'DOC',\n SourceID: file.DocId,\n DispatchNumber: ''\n }\n };\n let doc = {\n \"Id\": \"\",\n \"ParentId\": \"\",\n \"Source\": 1,\n \"ApplicationId\": file.ApplicationId,\n \"CreateDate\": \"\",\n \"Data\": null,\n \"Description\": \"\",\n \"Link\": null,\n \"SourceId\": file.DocId,\n \"SourceName\": file.Assunto,\n \"Stakeholders\": \"\"\n };\n const modal = yield _this15.modalController.create({\n component: ViewDocumentPage,\n componentProps: {\n trustedUrl: '',\n file: {\n title: file.Assunto,\n url: '',\n title_link: ''\n },\n Document: doc,\n applicationId: file.ApplicationId,\n docId: file.DocId,\n folderId: '',\n task: task\n },\n cssClass: 'modal modal-desktop'\n });\n yield modal.present();\n })();\n }\n takePictureMobile() {\n var _this16 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this16.roomId;\n const file = yield Camera.getPhoto({\n quality: 90,\n // allowEditing: true,\n resultType: CameraResultType.Base64,\n source: CameraSource.Camera\n });\n //const imageData = await this.fileToBase64Service.convert(file)\n //\n const response = yield fetch('data:image/jpeg;base64,' + file.base64String);\n const blob = yield response.blob();\n const formData = new FormData();\n formData.append(\"blobFile\", blob);\n _this16.ChatSystemService.getGroupRoom(roomId).send({\n file: {\n \"type\": \"application/img\",\n \"guid\": ''\n },\n temporaryData: formData,\n attachments: [{\n \"title\": file.path,\n \"image_url\": 'data:image/jpeg;base64,' + file.base64String,\n \"text\": \"description\",\n \"title_link_download\": false\n }]\n });\n })();\n }\n takePicture() {\n var _this17 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this17.roomId;\n const image = yield _this17.CameraService.takePicture();\n yield _this17.fileService.saveImage(image);\n const lastphoto = yield _this17.fileService.loadFiles();\n const {\n capturedImage,\n capturedImageTitle\n } = yield _this17.fileService.loadFileData(lastphoto);\n const base64 = yield fetch(capturedImage);\n const blob = yield base64.blob();\n const formData = new FormData();\n formData.append(\"blobFile\", blob);\n _this17.ChatSystemService.getGroupRoom(roomId).send({\n file: {\n \"type\": \"application/img\",\n \"guid\": ''\n },\n attachments: [{\n \"title\": capturedImageTitle,\n \"text\": \"description\",\n \"title_link_download\": false\n }],\n temporaryData: formData\n });\n })();\n }\n addImage() {\n var _this18 = this;\n return _asyncToGenerator(function* () {\n _this18.addFileToChatMobile(['image/apng', 'image/jpeg', 'image/png']);\n })();\n }\n addFile() {\n var _this19 = this;\n return _asyncToGenerator(function* () {\n _this19.addFileToChat(['.doc', '.docx', '.pdf']);\n })();\n }\n addFileWebtrix() {\n var _this20 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this20.roomId;\n const modal = yield _this20.modalController.create({\n component: SearchPage,\n cssClass: 'group-messages modal-desktop search-modal search-modal-to-desktop',\n componentProps: {\n type: 'AccoesPresidenciais & ArquivoDespachoElect',\n select: true,\n showSearchInput: true\n }\n });\n yield modal.present();\n modal.onDidDismiss().then( /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* (res) {\n const data = res.data;\n if (data.selected) {\n _this20.ChatSystemService.getGroupRoom(roomId).send({\n file: {\n \"name\": res.data.selected.Assunto,\n \"type\": \"application/webtrix\",\n \"ApplicationId\": res.data.selected.ApplicationType,\n \"DocId\": res.data.selected.Id,\n \"Assunto\": res.data.selected.Assunto\n },\n attachments: [{\n \"title\": res.data.selected.Assunto,\n \"description\": res.data.selected.DocTypeDesc,\n // \"title_link\": url_no_options,\n \"title_link_download\": true,\n //\"thumb_url\": \"assets/images/webtrix-logo.png\",\n // \"message_link\": url_no_options,\n \"type\": \"webtrix\",\n //\"thumb_url\": \"assets/images/webtrix-logo.png\",\n \"text\": res.data.selected.DocTypeDesc,\n \"thumb_url\": \"https://static.ichimura.ed.jp/uploads/2017/10/pdf-icon.png\"\n }],\n temporaryData: res\n });\n }\n });\n return function (_x3) {\n return _ref4.apply(this, arguments);\n };\n }());\n })();\n }\n addFileToChatMobile(types) {\n var _this21 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this21.roomId;\n const file = yield Camera.getPhoto({\n quality: 90,\n // allowEditing: true,\n resultType: CameraResultType.Base64,\n source: CameraSource.Photos\n });\n //const imageData = await this.fileToBase64Service.convert(file)\n //\n const response = yield fetch('data:image/jpeg;base64,' + file.base64String);\n const blob = yield response.blob();\n const formData = new FormData();\n formData.append(\"blobFile\", blob);\n _this21.ChatSystemService.getGroupRoom(roomId).send({\n file: {\n \"type\": \"application/img\",\n \"guid\": ''\n },\n temporaryData: formData,\n attachments: [{\n \"title\": file.path,\n \"image_url\": 'data:image/jpeg;base64,' + file.base64String,\n \"text\": \"description\",\n \"title_link_download\": false\n }]\n });\n })();\n }\n addFileToChat(types) {\n var _this22 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this22.roomId;\n const file = yield _this22.fileService.getFileFromDevice(types);\n if (file.type != \"application/img\" && file.type != \"image/png\" && file.type != \"image/jpeg\" && file.type != \"image/gif\") {\n const encodedData = btoa(JSON.stringify(yield _this22.getBase64(file).catch(error => {\n console.error(error);\n })));\n const blob = _this22.base64toBlob(encodedData, file.type);\n const formData = new FormData();\n formData.append(\"blobFile\", blob);\n _this22.ChatSystemService.getGroupRoom(roomId).send({\n file: {\n \"type\": file.type,\n \"guid\": ''\n },\n attachments: [{\n \"title\": file.name,\n \"name\": file.name,\n //\"image_url\": res,\n // \"text\": \"description\",\n \"title_link_download\": false\n }],\n temporaryData: formData\n });\n } else {}\n })();\n }\n getFileReader() {\n const fileReader = new FileReader();\n const zoneOriginalInstance = fileReader[\"__zone_symbol__originalInstance\"];\n return zoneOriginalInstance || fileReader;\n }\n getBase64(file) {\n var reader = this.getFileReader();\n reader.readAsDataURL(file);\n return new Promise(resolve => {\n reader.onload = function () {\n resolve(reader.result);\n };\n reader.onerror = function (error) {};\n });\n }\n bookMeeting() {\n let data = {\n roomId: this.roomId,\n members: this.members\n };\n this.openNewEventPage.emit(data);\n }\n _openChatOptions() {\n var _this23 = this;\n return _asyncToGenerator(function* () {\n const enterAnimation = baseEl => {\n const backdropAnimation = _this23.animationController.create().addElement(baseEl.querySelector('ion-backdrop')).fromTo('opacity', '0.01', 'var(--backdrop-opacity)');\n const wrapperAnimation = _this23.animationController.create().addElement(baseEl.querySelector('.modal-wrapper')).keyframes([{\n offset: 0,\n opacity: '1',\n right: '-100%'\n }, {\n offset: 1,\n opacity: '1',\n right: '0px'\n }]);\n return _this23.animationController.create().addElement(baseEl).easing('ease-out').duration(500).addAnimation([backdropAnimation, wrapperAnimation]);\n };\n const leaveAnimation = baseEl => {\n return enterAnimation(baseEl).direction('reverse');\n };\n const modal = yield _this23.modalController.create({\n enterAnimation,\n leaveAnimation,\n component: ChatOptionsFeaturesPage,\n cssClass: 'model profile-modal search-submodal',\n componentProps: {\n roomId: _this23.roomId,\n members: _this23.members\n }\n });\n yield modal.present();\n modal.onDidDismiss().then( /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(function* (res) {\n const roomId = _this23.roomId;\n if (res['data'] == 'meeting') {\n //this.closeAllDesktopComponents.emit();\n let data = {\n roomId: _this23.roomId,\n members: _this23.members\n };\n _this23.openNewEventPage.emit(data);\n } else if (res['data'] == 'take-picture') {\n _this23.takePicture();\n } else if (res['data'] == 'add-picture') {\n _this23.addImage();\n } else if (res['data'] == 'add-document') {\n _this23.addFile();\n } else if (res['data'] == 'documentoGestaoDocumental') {\n _this23.addFileWebtrix();\n _this23.showLoader = false;\n }\n });\n return function (_x4) {\n return _ref5.apply(this, arguments);\n };\n }());\n })();\n }\n downloadFileMsg(msg) {\n msg.downloadFileMsg();\n }\n downloadFileFromBrowser(fileName, data) {\n const linkSource = data;\n const downloadLink = document.createElement(\"a\");\n downloadLink.href = linkSource;\n downloadLink.download = fileName;\n downloadLink.click();\n }\n b64toBlob(b64Data, contentType) {\n contentType = contentType || '';\n var sliceSize = 512;\n b64Data = b64Data.replace(/^[^,]+,/, '');\n b64Data = b64Data.replace(/\\s/g, '');\n var byteCharacters = window.atob(b64Data);\n var byteArrays = [];\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n var slice = byteCharacters.slice(offset, offset + sliceSize);\n var byteNumbers = new Array(slice.length);\n for (var i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n var byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n var blob = new Blob(byteArrays, {\n type: contentType\n });\n return blob;\n }\n openFile(pdfString, filename, type) {\n const blob = this.b64toBlob(pdfString, type);\n let pathFile = '';\n const fileName = filename;\n const contentFile = blob;\n if (this.platform.is('ios')) {\n pathFile = this.file.documentsDirectory;\n } else {\n pathFile = this.file.externalRootDirectory;\n }\n this.file.writeFile(pathFile, fileName, contentFile, {\n replace: true\n }).then(success => {\n this.fileOpener.open(pathFile + fileName, type).then(() => {}).catch(e => console.error(e));\n }).catch(e => console.error(e));\n }\n openPreview(msg) {\n var _this24 = this;\n return _asyncToGenerator(function* () {\n if (msg.file.type === \"application/webtrix\") {\n _this24.viewDocument(msg.file, msg.attachments.image_url);\n } else {\n if (!msg.attachments[0].image_url || msg.attachments[0].image_url === null || msg.attachments[0].image_url === '') {\n _this24.downloadFileMsg(msg);\n //this.testDownlod(msg)\n } else {\n var str = msg.attachments[0].image_url;\n str = str.substring(1, str.length - 1);\n if (_this24.platform.is('desktop') || _this24.platform.is('mobileweb')) {\n if (msg.file.type == \"application/img\") {\n const modal = yield _this24.modalController.create({\n component: ViewMediaPage,\n cssClass: 'modal modal-desktop',\n componentProps: {\n image: msg.attachments[0].image_url,\n type: msg.file.type,\n username: msg.u.name,\n _updatedAt: msg._updatedAt\n }\n });\n modal.present();\n } else {\n _this24.downloadFileFromBrowser(\"file\", str);\n }\n } else {\n _this24.openFile(str, msg.attachments[0].title, msg.file.type);\n }\n }\n }\n })();\n }\n audioPreview(msg) {\n var _this25 = this;\n return _asyncToGenerator(function* () {\n if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') {\n _this25.downloadFileMsg(msg);\n } else {}\n })();\n }\n};\nGroupMessagesPage.ctorParameters = () => [{\n type: ChatSystemService\n}, {\n type: ModalController\n}, {\n type: PopoverController\n}, {\n type: ChatService\n}, {\n type: AnimationController\n}, {\n type: AlertService\n}, {\n type: TimeService\n}, {\n type: FileService\n}, {\n type: ThemeService\n}, {\n type: Storage\n}, {\n type: CameraService\n}, {\n type: ToastService\n}, {\n type: DomSanitizer\n}, {\n type: File\n}, {\n type: Platform\n}, {\n type: FileOpener\n}, {\n type: PermissionService\n}];\nGroupMessagesPage.propDecorators = {\n roomId: [{\n type: Input\n }],\n closeAllDesktopComponents: [{\n type: Output\n }],\n showEmptyContainer: [{\n type: Output\n }],\n openGroupContacts: [{\n type: Output\n }],\n openEditGroupPage: [{\n type: Output\n }],\n openNewEventPage: [{\n type: Output\n }],\n getGroups: [{\n type: Output\n }],\n myScrollContainer: [{\n type: ViewChild,\n args: ['scrollMe']\n }]\n};\nGroupMessagesPage = __decorate([Component({\n selector: 'app-group-messages',\n template: __NG_CLI_RESOURCE__0,\n styles: [__NG_CLI_RESOURCE__1]\n})], GroupMessagesPage);\nexport { GroupMessagesPage };","map":{"version":3,"mappings":"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","names":["Component","Input","Output","EventEmitter","ViewChild","AnimationController","ModalController","PopoverController","Platform","AlertService","ChatService","ChatPopoverPage","GroupContactsPage","ChatOptionsPopoverPage","ChatOptionsFeaturesPage","TimeService","SearchPage","FileService","ViewDocumentPage","ThemeService","ViewEventPage","Storage","ChatSystemService","CameraService","ToastService","Camera","CameraResultType","CameraSource","VoiceRecorder","Filesystem","Directory","DomSanitizer","File","FileOpener","SessionStore","ViewMediaPage","PermissionService","GroupMessagesPage","constructor","modalController","popoverController","chatService","animationController","alertService","timeService","fileService","storage","toastService","sanitiser","file","platform","fileOpener","p","Array","myScrollContainer","nativeElement","scrollTop","scrollHeight","err","loggedUserChat","user","ChatData","isGroupCreated","roomCountDownDate","roomCountDownTime","ngOnChanges","changes","getRoomInfo","getGroupRoom","roomId","loadHistory","openRoom","scrollDown","scrollToBottomClicked","groupNameFormart","name","split","join","showAvatar","setTimeout","deleteRecording","ngOnInit","loggedUser","getChatMembers","loadFiles","showDateDuration","start","countDownDate","countDownDateTimer","setStatus","status","body","message","setUserStatus","subscribe","res","scrollToBottom","scrollingOnce","goToEvent","event","classs","window","innerWidth","modal","_this","create","component","componentProps","eventId","id","CalendarId","calendarId","cssClass","present","onDidDismiss","then","ngAfterViewInit","scrollChangeCallback","onContentScrolled","addEventListener","e","startPosition","srcElement","scroll","windowHeight","containerHeight","clientHeight","currentPosition","scrollToBottomBtn","calculateDuration","recording","duration","durationDisplay","minutes","Math","floor","seconds","toString","padStart","getFile","fileName","audioFile","readFile","path","directory","Data","base64sound","data","base64Response","fetch","_this2","audioRecorded","url","_this3","get","lastAudioRecorded","recordData","value","recordDataBase64","includes","bypassSecurityTrustResourceUrl","mimeType","error","startRecording","requestAudioRecordingPermission","canDeviceVoiceRecord","result","_this4","_badRequest","stopRecording","allowTyping","_this5","Date","getTime","set","_this6","remove","ngOnDestroy","removeEventListener","_this7","getAllUsers","allUsers","filter","username","UserName","openGroupContactsPage","openGroupContacts","emit","openBookMeetingComponent","members","openNewEventPage","close","dismiss","doRefresh","ev","target","complete","watch","_this8","room","toPromise","roomName","userId","u","_id","isAdmin","customFields","getGroupContacts","sendMessage","send","base64toBlob","base64Data","contentType","sliceSize","byteCharacters","atob","bytesLength","length","slicesCount","ceil","byteArrays","sliceIndex","begin","end","min","bytes","offset","i","charCodeAt","Uint8Array","Blob","type","sendAudio","_this9","encodedData","btoa","blob","formData","FormData","append","msDuration","attachments","temporaryData","deleteMessage","msgId","confirmDeleteMessage","openGroupMessagesOptions","enterAnimation","baseEl","backdropAnimation","_this10","addElement","querySelector","fromTo","wrapperAnimation","keyframes","opacity","right","easing","addAnimation","leaveAnimation","direction","closeAllDesktopComponents","showEmptyContainer","hidingRoom","catch","console","openEditGroupPage","openSendGroupMessageOptions","openChatOptions","_openChatOptions","openOptions","popover","_this11","translucent","_this12","addContacts","_this13","isCreated","backdropDismiss","addDocGestaoDocumental","_this14","select","showSearchInput","documents","push","selected","addFileWebtrix","viewDocument","openViewDocumentModal","fullUrl","viewDocumentByUrl","task","serialNumber","taskStartDate","isEvent","workflowInstanceDataFields","FolderID","Subject","Assunto","SourceSecFsID","ApplicationId","SourceType","SourceID","DocId","DispatchNumber","doc","_this15","trustedUrl","title","title_link","Document","applicationId","docId","folderId","takePictureMobile","_this16","getPhoto","quality","resultType","Base64","source","response","base64String","takePicture","_this17","image","saveImage","lastphoto","capturedImage","capturedImageTitle","loadFileData","base64","addImage","_this18","addFileToChatMobile","addFile","_this19","addFileToChat","_this20","ApplicationType","Id","DocTypeDesc","types","_this21","Photos","_this22","getFileFromDevice","JSON","stringify","getBase64","getFileReader","fileReader","FileReader","zoneOriginalInstance","reader","readAsDataURL","Promise","resolve","onload","onerror","bookMeeting","_this23","showLoader","downloadFileMsg","msg","downloadFileFromBrowser","linkSource","downloadLink","document","createElement","href","download","click","b64toBlob","b64Data","replace","slice","byteNumbers","byteArray","openFile","pdfString","filename","pathFile","contentFile","is","documentsDirectory","externalRootDirectory","writeFile","success","open","openPreview","_this24","image_url","str","substring","_updatedAt","audioPreview","_this25","args","selector","template"],"sourceRoot":"","sources":["C:\\Users\\eudes.inacio\\GabineteDigital\\gabinete-digital-fo\\src\\app\\shared\\chat\\group-messages\\group-messages.page.ts"],"sourcesContent":["import { Component, OnChanges, OnInit, Input, SimpleChanges, Output, EventEmitter, ViewChild, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';\r\nimport { AnimationController, ModalController, PopoverController, Platform } from '@ionic/angular';\r\nimport { AlertService } from 'src/app/services/alert.service';\r\nimport { ChatService } from 'src/app/services/chat.service';\r\nimport { ChatPopoverPage } from 'src/app/shared/popover/chat-popover/chat-popover.page';\r\nimport { GroupContactsPage } from './group-contacts/group-contacts.page';\r\nimport { ChatOptionsPopoverPage } from '../../popover/chat-options-popover/chat-options-popover.page';\r\nimport { ChatOptionsFeaturesPage } from 'src/app/modals/chat-options-features/chat-options-features.page';\r\nimport { TimeService } from 'src/app/services/functions/time.service';\r\nimport { SearchPage } from 'src/app/pages/search/search.page';\r\nimport { SearchList } from 'src/app/models/search-document';\r\nimport { FileService } from 'src/app/services/functions/file.service';\r\nimport { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';\r\nimport { ThemeService } from 'src/app/services/theme.service'\r\nimport { ViewEventPage } from 'src/app/modals/view-event/view-event.page';\r\nimport { Storage } from '@ionic/storage';\r\nimport { ChatSystemService } from 'src/app/services/chat/chat-system.service';\r\nimport { MessageService } from 'src/app/services/chat/message.service';\r\n\r\nimport { CameraService } from 'src/app/services/camera.service';\r\nimport { FileType } from 'src/app/models/fileType';\r\nimport { ToastService } from 'src/app/services/toast.service';\r\nimport { Camera, CameraResultType, CameraSource } from '@capacitor/camera';\r\nimport { VoiceRecorder, RecordingData, GenericResponse } from 'capacitor-voice-recorder';\r\nimport { Filesystem, Directory } from '@capacitor/filesystem';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { File } from '@awesome-cordova-plugins/file/ngx';\r\nimport { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx';\r\nimport { SessionStore } from 'src/app/store/session.service';\r\nimport { ViewMediaPage } from 'src/app/modals/view-media/view-media.page';\r\nimport { PermissionService } from 'src/app/services/permission.service';\r\n\r\n@Component({\r\n selector: 'app-group-messages',\r\n templateUrl: './group-messages.page.html',\r\n styleUrls: ['./group-messages.page.scss'],\r\n})\r\nexport class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n showLoader: boolean;\r\n isGroupCreated: boolean;\r\n loggedUser: any;\r\n message: any;\r\n messages: any;\r\n allUsers: any[] = [];\r\n documents: SearchList[] = [];\r\n\r\n room: any = new Array();\r\n roomName: any;\r\n members: any;\r\n\r\n capturedImage: any;\r\n capturedImageTitle: any;\r\n\r\n loggedUserChat: any;\r\n scrollingOnce: boolean = true;\r\n private scrollChangeCallback: () => void;\r\n currentPosition: any;\r\n startPosition: number;\r\n scrollToBottomBtn = false;\r\n roomCountDownDate: string;\r\n roomCountDownTime: string;\r\n isAdmin = false;\r\n\r\n @Input() roomId: string;\r\n @Output() closeAllDesktopComponents: EventEmitter = new EventEmitter();\r\n @Output() showEmptyContainer: EventEmitter = new EventEmitter();\r\n @Output() openGroupContacts: EventEmitter = new EventEmitter();\r\n @Output() openEditGroupPage: EventEmitter = new EventEmitter();\r\n @Output() openNewEventPage: EventEmitter = new EventEmitter();\r\n @Output() getGroups: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('scrollMe') private myScrollContainer: ElementRef;\r\n\r\n downloadFile: any;\r\n showAvatar = false;\r\n\r\n recording = false;\r\n allowTyping = true;\r\n storedFileNames = [];\r\n lastAudioRecorded = '';\r\n audioRecorded: any = \"\";\r\n audioDownloaded: any = \"\";\r\n durationDisplay = '';\r\n duration = 0;\r\n\r\n audioPermissionStatus: 'granted'| 'denied' | 'prompt' | null = null\r\n sessionStore = SessionStore\r\n groupNameFormart = \"\";\r\n\r\n constructor(\r\n public ChatSystemService: ChatSystemService,\r\n private modalController: ModalController,\r\n public popoverController: PopoverController,\r\n private chatService: ChatService,\r\n private animationController: AnimationController,\r\n private alertService: AlertService,\r\n private timeService: TimeService,\r\n private fileService: FileService,\r\n public ThemeService: ThemeService,\r\n private storage: Storage,\r\n private CameraService: CameraService,\r\n private toastService: ToastService,\r\n private sanitiser: DomSanitizer,\r\n private file: File,\r\n private platform: Platform,\r\n private fileOpener: FileOpener,\r\n public p: PermissionService,\r\n ) {\r\n \r\n this.loggedUserChat = SessionStore.user.ChatData['data'];\r\n this.isGroupCreated = true;\r\n this.roomCountDownDate = \"\";\r\n this.roomCountDownTime = \"\";\r\n\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n\r\n this.getRoomInfo();\r\n this.ChatSystemService.getGroupRoom(this.roomId).loadHistory({});\r\n // \r\n this.ChatSystemService.openRoom(this.roomId)\r\n this.ChatSystemService.getGroupRoom(this.roomId).scrollDown = this.scrollToBottomClicked\r\n this.groupNameFormart = this.ChatSystemService.getGroupRoom(this.roomId).name.split('-').join(' ') \r\n\r\n this.showAvatar = false\r\n\r\n setTimeout(() => {\r\n this.scrollToBottomClicked()\r\n this.showAvatar = true\r\n }, 50)\r\n\r\n this.deleteRecording();\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.loggedUser = this.loggedUserChat;\r\n //setTimeout(() => {\r\n this.getRoomInfo()\r\n //}, 1000);\r\n this.getChatMembers();\r\n \r\n this.deleteRecording();\r\n this.loadFiles();\r\n }\r\n\r\n showDateDuration(start: any) {\r\n return this.timeService.showDateDuration(start);\r\n }\r\n\r\n countDownDate() {\r\n return this.timeService.countDownDateTimer(this.roomCountDownDate, this.roomId);\r\n }\r\n\r\n setStatus(status: string) {\r\n let body = {\r\n message: '',\r\n status: status,\r\n }\r\n this.chatService.setUserStatus(body).subscribe(res => {\r\n //\r\n })\r\n }\r\n\r\n scrollToBottom(): void {\r\n try {\r\n if (this.scrollingOnce) {\r\n this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;\r\n }\r\n } catch (err) { }\r\n }\r\n\r\n scrollToBottomClicked = () => {\r\n try {\r\n this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;\r\n } catch (err) { }\r\n }\r\n\r\n async goToEvent(event: any) {\r\n let classs;\r\n if (window.innerWidth < 701) {\r\n classs = 'modal modal-desktop'\r\n } else {\r\n classs = 'modal modal-desktop showAsideOptions'\r\n }\r\n\r\n const modal = await this.modalController.create({\r\n component: ViewEventPage,\r\n componentProps: {\r\n eventId: event.id,\r\n CalendarId: event.calendarId\r\n },\r\n cssClass: classs,\r\n });\r\n await modal.present();\r\n modal.onDidDismiss().then((res) => {\r\n \r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.scrollChangeCallback = () => this.onContentScrolled(event);\r\n window.addEventListener('scroll', this.scrollChangeCallback, true);\r\n }\r\n\r\n onContentScrolled(e) {\r\n this.startPosition = e.srcElement.scrollTop;\r\n let scroll = e.srcElement.scrollTop;\r\n let windowHeight = e.srcElement.scrollHeight;\r\n let containerHeight = windowHeight - e.srcElement.clientHeight;\r\n\r\n if (scroll > this.currentPosition) {\r\n } else {\r\n this.scrollingOnce = false;\r\n }\r\n if ((containerHeight - 100) > scroll) {\r\n this.scrollToBottomBtn = true;\r\n }\r\n else {\r\n this.scrollToBottomBtn = false;\r\n }\r\n this.currentPosition = scroll;\r\n }\r\n\r\n calculateDuration() {\r\n if (!this.recording) {\r\n this.duration = 0;\r\n this.durationDisplay = '';\r\n return;\r\n }\r\n this.duration += 1;\r\n const minutes = Math.floor(this.duration / 60);\r\n const seconds = (this.duration % 60).toString().padStart(2, '0');\r\n this.durationDisplay = `${minutes}:${seconds}`;\r\n\r\n setTimeout(() => {\r\n this.calculateDuration();\r\n }, 1000)\r\n }\r\n\r\n async getFile(fileName?: any) {\r\n const audioFile = await Filesystem.readFile({\r\n path: fileName,\r\n directory: Directory.Data\r\n })\r\n const base64sound = audioFile.data;\r\n const base64Response = await fetch(`data:audio/ogg;base64,${base64sound}`);\r\n this.audioRecorded = base64Response.url;\r\n }\r\n\r\n async loadFiles() {\r\n try {\r\n this.storage.get('fileName').then((fileName) => {\r\n this.lastAudioRecorded = fileName;\r\n })\r\n\r\n this.storage.get('recordData').then((recordData) => {\r\n \r\n if (recordData?.value?.recordDataBase64.includes('data:audio')) {\r\n this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64);\r\n }\r\n else if(recordData?.value?.mimeType && recordData?.value?.recordDataBase64) {\r\n this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`);\r\n }\r\n });\r\n } catch (error) { }\r\n\r\n\r\n }\r\n\r\n async startRecording() {\r\n VoiceRecorder.requestAudioRecordingPermission();\r\n if(await VoiceRecorder.canDeviceVoiceRecord().then((result: GenericResponse) =>{return result.value})){\r\n if(await VoiceRecorder.requestAudioRecordingPermission().then((result: GenericResponse) => {return result.value})){\r\n //if(await this.hasAudioRecordingPermission()){\r\n if (this.recording) {\r\n return;\r\n }\r\n this.recording = true;\r\n VoiceRecorder.startRecording();\r\n this.calculateDuration();\r\n //}\r\n }\r\n else{\r\n this.toastService._badRequest('Para gravar uma mensagem de voz, permita o acesso do Gabinete Digital ao seu microfone.');\r\n }\r\n }\r\n else{\r\n this.toastService._badRequest('Este dispositivo não tem capacidade para gravação de áudio!');\r\n }\r\n }\r\n\r\n stopRecording() {\r\n this.deleteRecording();\r\n this.allowTyping = false;\r\n \r\n if (!this.recording) {\r\n return;\r\n }\r\n this.recording = false;\r\n VoiceRecorder.stopRecording().then(async (result: RecordingData) => {\r\n \r\n this.recording = false;\r\n if (result.value && result.value.recordDataBase64) {\r\n const recordData = result.value.recordDataBase64;\r\n //\r\n const fileName = new Date().getTime() + \".mp3\";\r\n //Save file\r\n this.storage.set('fileName', fileName);\r\n this.storage.set('recordData', result).then(() => {\r\n \r\n })\r\n }\r\n })\r\n setTimeout(async () => {\r\n this.loadFiles();\r\n }, 1000);\r\n }\r\n\r\n async deleteRecording() {\r\n this.storage.remove('fileName');\r\n this.storage.remove('recordData');\r\n\r\n this.allowTyping = true;\r\n this.lastAudioRecorded = '';\r\n this.loadFiles();\r\n }\r\n\r\n ngOnDestroy() {\r\n window.removeEventListener('scroll', this.scrollChangeCallback, true);\r\n }\r\n\r\n async getChatMembers() {\r\n\r\n this.chatService.getAllUsers().subscribe(res => {\r\n //\r\n\r\n this.allUsers = res['users'].filter(data => data.username != SessionStore.user.UserName);\r\n //\r\n });\r\n }\r\n\r\n openGroupContactsPage() {\r\n this.openGroupContacts.emit(this.roomId);\r\n }\r\n\r\n openBookMeetingComponent() {\r\n let data = {\r\n roomId: this.roomId,\r\n members: this.members\r\n }\r\n this.openNewEventPage.emit(data);\r\n }\r\n\r\n close() {\r\n this.modalController.dismiss();\r\n }\r\n\r\n doRefresh(ev: any) {\r\n this.getRoomInfo();\r\n ev.target.complete();\r\n }\r\n\r\n get watch() {\r\n this.getRoomInfo();\r\n \r\n return this.roomId;\r\n }\r\n\r\n async getRoomInfo() {\r\n \r\n if(this.ChatSystemService.getGroupRoom(this.roomId)) {\r\n this.ChatSystemService.getGroupRoom(this.roomId).loadHistory({});\r\n }\r\n \r\n let room = await this.chatService.getRoomInfo(this.roomId).toPromise();\r\n this.room = room['room'];\r\n if (this.room.name) {\r\n try {\r\n this.roomName = this.room.name.split('-').join(' ');\r\n } catch (error) {\r\n this.roomName = this.room.name;\r\n }\r\n \r\n }\r\n \r\n\r\n if(SessionStore.user.ChatData.data.userId == this.room.u._id){\r\n this.isAdmin = true\r\n } else {\r\n this.isAdmin = false\r\n }\r\n\r\n if (this.room.customFields.countDownDate) {\r\n this.roomCountDownDate = this.room.customFields.countDownDate;\r\n }\r\n\r\n this.getGroupContacts(this.room);\r\n }\r\n\r\n getGroupContacts(room: any) {\r\n // this.showLoader = true;\r\n // //If group is private call getGroupMembers\r\n // if (room.t === 'p') {\r\n // this.chatService.getGroupMembers(this.roomId).subscribe(res => {\r\n // //\r\n // this.members = res['members'];\r\n // this.showLoader = false;\r\n // });\r\n // }\r\n // //Otherwise call getChannelMembers for públic groups\r\n // else {\r\n // this.chatService.getChannelMembers(this.roomId).subscribe(res => {\r\n \r\n // this.members = res['members'];\r\n // this.showLoader = false;\r\n // });\r\n // }\r\n\r\n this.members = this.ChatSystemService.getGroupRoom(this.roomId).members\r\n }\r\n\r\n sendMessage() {\r\n this.ChatSystemService.getGroupRoom(this.roomId).send({})\r\n }\r\n\r\n base64toBlob(base64Data, contentType) {\r\n contentType = contentType || '';\r\n var sliceSize = 1024;\r\n var byteCharacters = atob(base64Data);\r\n var bytesLength = byteCharacters.length;\r\n var slicesCount = Math.ceil(bytesLength / sliceSize);\r\n var byteArrays = new Array(slicesCount);\r\n\r\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\r\n var begin = sliceIndex * sliceSize;\r\n var end = Math.min(begin + sliceSize, bytesLength);\r\n\r\n var bytes = new Array(end - begin);\r\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\r\n bytes[i] = byteCharacters[offset].charCodeAt(0);\r\n }\r\n byteArrays[sliceIndex] = new Uint8Array(bytes);\r\n }\r\n return new Blob(byteArrays, { type: contentType });\r\n }\r\n\r\n async sendAudio(fileName) {\r\n const roomId = this.roomId\r\n let audioFile;\r\n this.storage.get('recordData').then((recordData) => {\r\n \r\n audioFile = recordData;\r\n if (recordData?.value?.recordDataBase64.includes('data:audio')) {\r\n this.audioRecorded = recordData?.value?.recordDataBase64;\r\n }\r\n else if(recordData?.value?.mimeType && recordData?.value?.recordDataBase64) {\r\n this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;\r\n }\r\n\r\n\r\n //Converting base64 to blob\r\n const encodedData = btoa(this.audioRecorded);\r\n const blob = this.base64toBlob(encodedData, recordData.value.mimeType)\r\n \r\n const formData = new FormData();\r\n formData.append(\"blobFile\", blob);\r\n\r\n this.ChatSystemService.getGroupRoom(roomId).send({\r\n file: {\r\n \"type\": \"application/audio\",\r\n \"msDuration\": audioFile.value.msDuration,\r\n \"mimeType\": audioFile.value.mimeType,\r\n },\r\n attachments: [{\r\n \"title\": fileName,\r\n \"title_link_download\": true,\r\n \"type\": \"audio\"\r\n }],\r\n temporaryData: formData\r\n })\r\n\r\n });\r\n this.deleteRecording();\r\n }\r\n\r\n deleteMessage(msgId: string) {\r\n const room = this.ChatSystemService.getGroupRoom(this.roomId)\r\n this.alertService.confirmDeleteMessage(msgId, room);\r\n }\r\n\r\n async openGroupMessagesOptions() {\r\n const enterAnimation = (baseEl: any) => {\r\n const backdropAnimation = this.animationController.create()\r\n .addElement(baseEl.querySelector('ion-backdrop')!)\r\n .fromTo('opacity', '0.01', 'var(--backdrop-opacity)');\r\n \r\n const wrapperAnimation = this.animationController.create()\r\n .addElement(baseEl.querySelector('.modal-wrapper')!)\r\n .keyframes([\r\n { offset: 0, opacity: '1', right: '-100%' },\r\n { offset: 1, opacity: '1', right: '0px' }\r\n ]);\r\n \r\n return this.animationController.create()\r\n .addElement(baseEl)\r\n .easing('ease-out')\r\n .duration(500)\r\n .addAnimation([backdropAnimation, wrapperAnimation]);\r\n }\r\n \r\n const leaveAnimation = (baseEl: any) => {\r\n return enterAnimation(baseEl).direction('reverse');\r\n }\r\n \r\n const modal = await this.modalController.create({\r\n enterAnimation,\r\n leaveAnimation,\r\n component: ChatPopoverPage,\r\n cssClass: 'model search-submodal chat-option-aside',\r\n componentProps: {\r\n roomId: this.roomId,\r\n members: this.members,\r\n isAdmin: this.isAdmin\r\n }\r\n });\r\n await modal.present();\r\n modal.onDidDismiss().then(res => {\r\n\r\n if (res.data == 'leave') {\r\n this.getRoomInfo();\r\n this.closeAllDesktopComponents.emit();\r\n this.showEmptyContainer.emit();\r\n this.ChatSystemService.hidingRoom(this.roomId).catch((error) => console.error(error));\r\n }\r\n else if (res.data == 'delete') {\r\n this.closeAllDesktopComponents.emit();\r\n this.showEmptyContainer.emit();\r\n }\r\n else if (res.data == 'cancel') {\r\n \r\n }\r\n else if (res.data == 'edit') {\r\n \r\n //this.closeAllDesktopComponents.emit();\r\n this.openEditGroupPage.emit(this.roomId);\r\n } else if (res.data == 'addUser') {\r\n \r\n this.openGroupContactsPage();\r\n }\r\n else {\r\n\r\n if(res?.data?.name) {\r\n try {\r\n this.roomName = res.data.name.split('-').join(' ');\r\n } catch (error) {\r\n this.roomName = res.data.name\r\n \r\n }\r\n }\r\n \r\n };\r\n \r\n });\r\n\r\n \r\n }\r\n\r\n openSendGroupMessageOptions(ev?: any) {\r\n if (window.innerWidth <= 701) {\r\n \r\n this.openChatOptions(ev);\r\n }\r\n else {\r\n \r\n this._openChatOptions();\r\n }\r\n }\r\n\r\n\r\n async openOptions(ev: any) {\r\n const popover = await this.popoverController.create({\r\n component: ChatPopoverPage,\r\n cssClass: 'chat-popover modal-desktop',\r\n event: ev,\r\n componentProps: {\r\n room: this.room,\r\n },\r\n translucent: true\r\n });\r\n await popover.present();\r\n popover.onDidDismiss().then(res => {\r\n \r\n if (res.data) {\r\n //this.getRoomInfo();\r\n //this.modalController.dismiss();\r\n };\r\n\r\n });\r\n }\r\n async openChatOptions(ev: any) {\r\n const popover = await this.popoverController.create({\r\n component: ChatOptionsPopoverPage,\r\n cssClass: 'chat-options-popover',\r\n event: ev,\r\n componentProps: {\r\n room: this.room,\r\n members: this.members,\r\n },\r\n translucent: true\r\n });\r\n await popover.present();\r\n await popover.onDidDismiss().then(() => {\r\n });\r\n }\r\n async addContacts() {\r\n \r\n if(this.isAdmin) {\r\n const modal = await this.modalController.create({\r\n component: GroupContactsPage,\r\n componentProps: {\r\n isCreated: this.isGroupCreated,\r\n room: this.room,\r\n members: this.members,\r\n name: this.room.name,\r\n },\r\n cssClass: 'contacts',\r\n backdropDismiss: false\r\n });\r\n \r\n await modal.present();\r\n \r\n modal.onDidDismiss().then(() => {\r\n //this.getRoomInfo();\r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n async addDocGestaoDocumental() {\r\n const modal = await this.modalController.create({\r\n component: SearchPage,\r\n cssClass: 'group-messages modal-desktop search-modal search-modal-to-desktop',\r\n componentProps: {\r\n type: 'AccoesPresidenciais & ArquivoDespachoElect',\r\n select: true,\r\n showSearchInput: true,\r\n }\r\n });\r\n await modal.present();\r\n modal.onDidDismiss().then(async res => {\r\n if (res) {\r\n const data = res.data;\r\n this.documents.push(data.selected);\r\n\r\n this.addFileWebtrix()\r\n }\r\n });\r\n }\r\n\r\n viewDocument(file: any, url?: string) {\r\n if (file.type == \"application/webtrix\") {\r\n this.openViewDocumentModal(file);\r\n }\r\n else {\r\n let fullUrl = \"https://www.tabularium.pt\" + url;\r\n this.fileService.viewDocumentByUrl(fullUrl);\r\n }\r\n }\r\n\r\n async openViewDocumentModal(file: any) {\r\n let task = {\r\n serialNumber: '',\r\n taskStartDate: '',\r\n isEvent: true,\r\n workflowInstanceDataFields: {\r\n FolderID: '',\r\n Subject: file.Assunto,\r\n SourceSecFsID: file.ApplicationId,\r\n SourceType: 'DOC',\r\n SourceID: file.DocId,\r\n DispatchNumber: ''\r\n }\r\n }\r\n\r\n let doc = {\r\n \"Id\": \"\",\r\n \"ParentId\": \"\",\r\n \"Source\": 1,\r\n \"ApplicationId\": file.ApplicationId,\r\n \"CreateDate\": \"\",\r\n \"Data\": null,\r\n \"Description\": \"\",\r\n \"Link\": null,\r\n \"SourceId\": file.DocId,\r\n \"SourceName\": file.Assunto,\r\n \"Stakeholders\": \"\",\r\n }\r\n\r\n const modal = await this.modalController.create({\r\n component: ViewDocumentPage,\r\n componentProps: {\r\n trustedUrl: '',\r\n file: {\r\n title: file.Assunto,\r\n url: '',\r\n title_link: '',\r\n },\r\n Document: doc,\r\n applicationId: file.ApplicationId,\r\n docId: file.DocId,\r\n folderId: '',\r\n task: task\r\n },\r\n cssClass: 'modal modal-desktop'\r\n });\r\n await modal.present();\r\n }\r\n\r\n async takePictureMobile() {\r\n const roomId = this.roomId\r\n\r\n const file = await Camera.getPhoto({\r\n quality: 90,\r\n // allowEditing: true,\r\n resultType: CameraResultType.Base64,\r\n source: CameraSource.Camera\r\n });\r\n \r\n //const imageData = await this.fileToBase64Service.convert(file)\r\n //\r\n\r\n const response = await fetch('data:image/jpeg;base64,' + file.base64String!);\r\n const blob = await response.blob();\r\n\r\n const formData = new FormData();\r\n formData.append(\"blobFile\", blob);\r\n\r\n this.ChatSystemService.getGroupRoom(roomId).send({\r\n file: {\r\n \"type\": \"application/img\",\r\n \"guid\": '',\r\n },\r\n temporaryData: formData,\r\n attachments: [{\r\n \"title\": file.path,\r\n \"image_url\": 'data:image/jpeg;base64,' + file.base64String,\r\n \"text\": \"description\",\r\n \"title_link_download\": false,\r\n }]\r\n })\r\n\r\n }\r\n\r\n async takePicture() {\r\n const roomId = this.roomId\r\n\r\n const image = await this.CameraService.takePicture();\r\n await this.fileService.saveImage(image)\r\n const lastphoto: any = await this.fileService.loadFiles();\r\n const { capturedImage, capturedImageTitle } = await this.fileService.loadFileData(lastphoto);\r\n\r\n const base64 = await fetch(capturedImage);\r\n const blob = await base64.blob();\r\n const formData = new FormData();\r\n formData.append(\"blobFile\", blob);\r\n\r\n this.ChatSystemService.getGroupRoom(roomId).send({\r\n file: {\r\n \"type\": \"application/img\",\r\n \"guid\": ''\r\n },\r\n attachments: [{\r\n \"title\": capturedImageTitle,\r\n \"text\": \"description\",\r\n \"title_link_download\": false,\r\n }],\r\n temporaryData: formData\r\n })\r\n\r\n }\r\n\r\n async addImage() {\r\n this.addFileToChatMobile(['image/apng', 'image/jpeg', 'image/png'])\r\n }\r\n\r\n async addFile() {\r\n this.addFileToChat(['.doc', '.docx', '.pdf'])\r\n }\r\n\r\n async addFileWebtrix() {\r\n const roomId = this.roomId\r\n\r\n const modal = await this.modalController.create({\r\n component: SearchPage,\r\n cssClass: 'group-messages modal-desktop search-modal search-modal-to-desktop',\r\n componentProps: {\r\n type: 'AccoesPresidenciais & ArquivoDespachoElect',\r\n select: true,\r\n showSearchInput: true,\r\n }\r\n });\r\n await modal.present();\r\n modal.onDidDismiss().then(async res => {\r\n const data = res.data;\r\n\r\n if (data.selected) {\r\n\r\n this.ChatSystemService.getGroupRoom(roomId).send({\r\n file: {\r\n \"name\": res.data.selected.Assunto,\r\n \"type\": \"application/webtrix\",\r\n \"ApplicationId\": res.data.selected.ApplicationType,\r\n \"DocId\": res.data.selected.Id,\r\n \"Assunto\": res.data.selected.Assunto,\r\n },\r\n attachments: [{\r\n \"title\": res.data.selected.Assunto,\r\n \"description\": res.data.selected.DocTypeDesc,\r\n // \"title_link\": url_no_options,\r\n \"title_link_download\": true,\r\n //\"thumb_url\": \"assets/images/webtrix-logo.png\",\r\n // \"message_link\": url_no_options,\r\n \"type\": \"webtrix\",\r\n //\"thumb_url\": \"assets/images/webtrix-logo.png\",\r\n \"text\": res.data.selected.DocTypeDesc,\r\n \"thumb_url\": \"https://static.ichimura.ed.jp/uploads/2017/10/pdf-icon.png\",\r\n }],\r\n temporaryData: res\r\n })\r\n\r\n\r\n }\r\n });\r\n }\r\n async addFileToChatMobile(types: typeof FileType[]) {\r\n const roomId = this.roomId\r\n\r\n const file = await Camera.getPhoto({\r\n quality: 90,\r\n // allowEditing: true,\r\n resultType: CameraResultType.Base64,\r\n source: CameraSource.Photos\r\n });\r\n \r\n //const imageData = await this.fileToBase64Service.convert(file)\r\n //\r\n\r\n const response = await fetch('data:image/jpeg;base64,' + file.base64String!);\r\n const blob = await response.blob();\r\n\r\n const formData = new FormData();\r\n formData.append(\"blobFile\", blob);\r\n\r\n this.ChatSystemService.getGroupRoom(roomId).send({\r\n file: {\r\n \"type\": \"application/img\",\r\n \"guid\": ''\r\n },\r\n temporaryData: formData,\r\n attachments: [{\r\n \"title\": file.path,\r\n \"image_url\": 'data:image/jpeg;base64,' + file.base64String,\r\n \"text\": \"description\",\r\n \"title_link_download\": false,\r\n }]\r\n })\r\n\r\n }\r\n\r\n\r\n async addFileToChat(types: typeof FileType[]) {\r\n\r\n const roomId = this.roomId\r\n\r\n const file: any = await this.fileService.getFileFromDevice(types);\r\n \r\n\r\n if (file.type != \"application/img\" && file.type != \"image/png\" && file.type != \"image/jpeg\" && file.type != \"image/gif\") {\r\n\r\n const encodedData = btoa(JSON.stringify(await this.getBase64(file).catch ((error) => {\r\n console.error(error);\r\n })));\r\n const blob = this.base64toBlob(encodedData, file.type)\r\n \r\n\r\n const formData = new FormData();\r\n formData.append(\"blobFile\", blob);\r\n\r\n this.ChatSystemService.getGroupRoom(roomId).send({\r\n file: {\r\n \"type\": file.type,\r\n \"guid\": '',\r\n },\r\n attachments: [{\r\n \"title\": file.name,\r\n \"name\": file.name,\r\n //\"image_url\": res,\r\n // \"text\": \"description\",\r\n \"title_link_download\": false,\r\n }],\r\n temporaryData: formData\r\n })\r\n\r\n } else {\r\n \r\n }\r\n\r\n\r\n }\r\n\r\n getFileReader(): FileReader {\r\n const fileReader = new FileReader();\r\n const zoneOriginalInstance = (fileReader as any)[\"__zone_symbol__originalInstance\"];\r\n return zoneOriginalInstance || fileReader;\r\n }\r\n\r\n getBase64(file) {\r\n var reader = this.getFileReader();\r\n reader.readAsDataURL(file);\r\n return new Promise(resolve => {\r\n reader.onload = function () {\r\n resolve(reader.result)\r\n };\r\n reader.onerror = function (error) {\r\n \r\n };\r\n });\r\n\r\n }\r\n\r\n bookMeeting() {\r\n let data = {\r\n roomId: this.roomId,\r\n members: this.members\r\n }\r\n this.openNewEventPage.emit(data);\r\n }\r\n\r\n async _openChatOptions() {\r\n\r\n const enterAnimation = (baseEl: any) => {\r\n const backdropAnimation = this.animationController.create()\r\n .addElement(baseEl.querySelector('ion-backdrop')!)\r\n .fromTo('opacity', '0.01', 'var(--backdrop-opacity)');\r\n\r\n const wrapperAnimation = this.animationController.create()\r\n .addElement(baseEl.querySelector('.modal-wrapper')!)\r\n .keyframes([\r\n { offset: 0, opacity: '1', right: '-100%' },\r\n { offset: 1, opacity: '1', right: '0px' }\r\n ]);\r\n\r\n return this.animationController.create()\r\n .addElement(baseEl)\r\n .easing('ease-out')\r\n .duration(500)\r\n .addAnimation([backdropAnimation, wrapperAnimation]);\r\n }\r\n\r\n const leaveAnimation = (baseEl: any) => {\r\n return enterAnimation(baseEl).direction('reverse');\r\n }\r\n\r\n const modal = await this.modalController.create({\r\n enterAnimation,\r\n leaveAnimation,\r\n component: ChatOptionsFeaturesPage,\r\n cssClass: 'model profile-modal search-submodal',\r\n componentProps: {\r\n roomId: this.roomId,\r\n members: this.members,\r\n }\r\n });\r\n await modal.present();\r\n modal.onDidDismiss().then(async (res) => {\r\n \r\n const roomId = this.roomId;\r\n\r\n if (res['data'] == 'meeting') {\r\n //this.closeAllDesktopComponents.emit();\r\n let data = {\r\n roomId: this.roomId,\r\n members: this.members\r\n }\r\n this.openNewEventPage.emit(data);\r\n }\r\n else if (res['data'] == 'take-picture') {\r\n\r\n this.takePicture()\r\n\r\n }\r\n else if (res['data'] == 'add-picture') {\r\n\r\n this.addImage()\r\n\r\n }\r\n else if (res['data'] == 'add-document') {\r\n\r\n this.addFile()\r\n\r\n }\r\n else if (res['data'] == 'documentoGestaoDocumental') {\r\n\r\n this.addFileWebtrix()\r\n\r\n this.showLoader = false;\r\n }\r\n\r\n });\r\n }\r\n\r\n\r\n downloadFileMsg(msg: MessageService) {\r\n msg.downloadFileMsg()\r\n }\r\n\r\n downloadFileFromBrowser(fileName: string, data: any): void {\r\n const linkSource = data;\r\n const downloadLink = document.createElement(\"a\");\r\n downloadLink.href = linkSource;\r\n downloadLink.download = fileName;\r\n downloadLink.click();\r\n }\r\n\r\n b64toBlob(b64Data, contentType) {\r\n contentType = contentType || '';\r\n var sliceSize = 512;\r\n b64Data = b64Data.replace(/^[^,]+,/, '');\r\n b64Data = b64Data.replace(/\\s/g, '');\r\n var byteCharacters = window.atob(b64Data);\r\n var byteArrays = [];\r\n\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n var byteArray = new Uint8Array(byteNumbers);\r\n\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n var blob = new Blob(byteArrays, { type: contentType });\r\n return blob;\r\n }\r\n\r\n openFile(pdfString, filename, type) {\r\n const blob = this.b64toBlob(pdfString, type)\r\n let pathFile = ''\r\n const fileName = filename\r\n const contentFile = blob\r\n if (this.platform.is('ios')) {\r\n pathFile = this.file.documentsDirectory\r\n } else {\r\n pathFile = this.file.externalRootDirectory\r\n }\r\n \r\n \r\n \r\n this.file\r\n .writeFile(pathFile, fileName, contentFile, { replace: true })\r\n .then(success => {\r\n this.fileOpener\r\n .open(pathFile + fileName, type)\r\n .then(() => {})\r\n .catch(e => console.error(e))\r\n })\r\n .catch(e => console.error(e))\r\n }\r\n\r\n async openPreview(msg) {\r\n\r\n\r\n if (msg.file.type === \"application/webtrix\") {\r\n this.viewDocument(msg.file, msg.attachments.image_url)\r\n } else {\r\n\r\n if (!msg.attachments[0].image_url || msg.attachments[0].image_url === null || msg.attachments[0].image_url === '') {\r\n this.downloadFileMsg(msg)\r\n //this.testDownlod(msg)\r\n\r\n } else {\r\n var str = msg.attachments[0].image_url;\r\n str = str.substring(1, ((str.length) - 1));\r\n\r\n if (this.platform.is('desktop') || this.platform.is('mobileweb')) {\r\n\r\n if (msg.file.type == \"application/img\") {\r\n const modal = await this.modalController.create({\r\n component: ViewMediaPage,\r\n cssClass: 'modal modal-desktop',\r\n componentProps: {\r\n image: msg.attachments[0].image_url,\r\n type: msg.file.type,\r\n username: msg.u.name,\r\n _updatedAt: msg._updatedAt\r\n }\r\n });\r\n modal.present();\r\n } else {\r\n this.downloadFileFromBrowser(\"file\", str)\r\n }\r\n } else {\r\n this.openFile(str, msg.attachments[0].title, msg.file.type);\r\n }\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n async audioPreview(msg) {\r\n \r\n if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') {\r\n this.downloadFileMsg(msg)\r\n } else { }\r\n }\r\n\r\n}\r\n\r\n"]},"metadata":{},"sourceType":"module"}