Files
doneit-web/.angular/cache/14.2.12/babel-webpack/dd36b5507cb6b775c8ae1b33a485912a.json
T
Eudes Inácio 53b71ea16f its working
2023-06-30 09:54:21 +01:00

1 line
102 KiB
JSON

{"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 \"./messages.page.html?ngResource\";\nimport __NG_CLI_RESOURCE__1 from \"./messages.page.scss?ngResource\";\nimport { Component, ElementRef, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { GestureController, ModalController, NavParams, PopoverController, Platform } from '@ionic/angular';\nimport { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';\nimport { ContactsPage } from 'src/app/pages/chat/messages/contacts/contacts.page';\nimport { AlertService } from 'src/app/services/alert.service';\nimport { FileService } from 'src/app/services/functions/file.service';\nimport { ToastService } from 'src/app/services/toast.service';\nimport { ChatOptionsPopoverPage } from 'src/app/shared/popover/chat-options-popover/chat-options-popover.page';\nimport { MessagesOptionsPage } from 'src/app/shared/popover/messages-options/messages-options.page';\nimport { ChatMessageStore } from 'src/app/store/chat/chat-message.service';\nimport { ChatUserStorage } from 'src/app/store/chat/chat-user.service';\nimport { environment } from 'src/environments/environment';\nimport { ThemeService } from 'src/app/services/theme.service';\nimport { VoiceRecorder } from 'capacitor-voice-recorder';\nimport { Haptics, ImpactStyle } from '@capacitor/haptics';\nimport { SqliteService } from 'src/app/services/sqlite.service';\nimport { ViewEventPage } from 'src/app/modals/view-event/view-event.page';\nimport { ChatSystemService } from 'src/app/services/chat/chat-system.service';\nimport { CameraService } from 'src/app/services/camera.service';\nimport { SearchPage } from 'src/app/pages/search/search.page';\nimport { Storage } from '@ionic/storage';\nimport { Camera, CameraResultType, CameraSource } from '@capacitor/camera';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { SessionStore } from 'src/app/store/session.service';\nimport { ViewMediaPage } from 'src/app/modals/view-media/view-media.page';\nimport { File } from '@awesome-cordova-plugins/file/ngx';\nimport { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx';\nimport { Filesystem, Directory } from '@capacitor/filesystem';\nimport { NewEventPage } from '../../agenda/new-event/new-event.page';\nimport { NotificationsService } from 'src/app/services/notifications.service';\nconst IMAGE_DIR = 'stored-images';\nlet MessagesPage = class MessagesPage {\n constructor(popoverController, modalController, navParams, alertService, toastService, fileService, gestureController, ThemeService, platform, sqlservice, ChatSystemService, CameraService, storage,\n //private fileOpener: FileOpener,\n sanitiser,\n // private document: DocumentViewer\n file, fileOpener, notificationService, router) {\n this.popoverController = popoverController;\n this.modalController = modalController;\n this.navParams = navParams;\n this.alertService = alertService;\n this.toastService = toastService;\n this.fileService = fileService;\n this.gestureController = gestureController;\n this.ThemeService = ThemeService;\n this.platform = platform;\n this.sqlservice = sqlservice;\n this.ChatSystemService = ChatSystemService;\n this.CameraService = CameraService;\n this.storage = storage;\n this.sanitiser = sanitiser;\n this.file = file;\n this.fileOpener = fileOpener;\n this.notificationService = notificationService;\n this.router = router;\n this.userPresence = '';\n this.scrollingOnce = true;\n this.chatMessageStore = ChatMessageStore;\n this.chatUserStorage = ChatUserStorage;\n this.scrollToBottomBtn = false;\n this.attendees = [];\n this.longPressActive = false;\n this.showMessageOptions = false;\n this.dicIndex = 0;\n this.LoadedDocument = null;\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.files = [];\n this.audioPermissionStatus = null;\n this.sessionStore = SessionStore;\n this.scrollToBottomClicked = () => {\n try {\n this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;\n } catch (err) {}\n };\n this.loggedUser = SessionStore.user.ChatData['data'];\n this.roomId = this.navParams.get('roomId');\n window.onresize = event => {\n if (window.innerWidth > 701) {\n this.modalController.dismiss();\n }\n };\n this.ChatSystemService.getDmRoom(this.roomId).loadHistory({});\n this.ChatSystemService.getDmRoom(this.roomId).scrollDown = this.scrollToBottomClicked;\n this.ChatSystemService.openRoom(this.roomId);\n setTimeout(() => {\n this.scrollToBottomClicked();\n }, 150);\n }\n ngOnInit() {\n console.log(this.router.url);\n this.createDirectoryImage();\n // this.chatService.refreshtoken();\n this.ChatSystemService.getUserOfRoom(this.roomId).then(value => {}).catch(error => {\n console.error(error);\n });\n this.getChatMembers();\n }\n ngAfterViewInit() {\n this.scrollChangeCallback = () => this.onContentScrolled(event);\n window.addEventListener('scroll', this.scrollChangeCallback, true);\n const longpress = this.gestureController.create({\n el: this.recordBtn.nativeElement,\n threshold: 0,\n gestureName: 'long-press',\n onStart: ev => {\n Haptics.impact({\n style: ImpactStyle.Light\n });\n this.startRecording();\n //this.calculateDuration();\n },\n\n onEnd: ev => {\n Haptics.impact({\n style: ImpactStyle.Light\n });\n this.stopRecording();\n }\n }, true);\n longpress.enable();\n }\n onDragOver(e) {}\n onDragLeave(e) {}\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 loadFiles() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.storage.get('fileName').then(fileName => {\n _this.lastAudioRecorded = fileName;\n });\n try {\n _this.storage.get('recordData').then(recordData => {\n if (recordData?.value?.recordDataBase64.includes('data:audio')) {\n _this.audioRecorded = _this.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64);\n } else if (recordData?.value?.mimeType && recordData?.value?.recordDataBase64) {\n _this.audioRecorded = _this.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`);\n }\n });\n } catch (error) {}\n })();\n }\n startRecording() {\n var _this2 = 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 (_this2.recording) {\n return;\n }\n _this2.recording = true;\n VoiceRecorder.startRecording();\n _this2.calculateDuration();\n //}\n } else {\n _this2.toastService._badRequest('Para gravar uma mensagem de voz, permita o acesso do Gabinete Digital ao seu microfone.');\n }\n } else {\n _this2.toastService._badRequest('Este dispositivo não tem capacidade para gravação de áudio!');\n }\n })();\n }\n stopRecording() {\n var _this3 = 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 _this3.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 _this3.storage.set('fileName', fileName);\n _this3.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 _this3.loadFiles();\n }), 1000);\n }\n deleteRecording() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n _this4.storage.remove('fileName');\n _this4.storage.remove('recordData');\n _this4.allowTyping = true;\n _this4.lastAudioRecorded = '';\n _this4.loadFiles();\n })();\n }\n handlePress(id) {\n this.selectedMsgId = id;\n this.showMessageOptions = true;\n }\n handleClick() {\n this.showMessageOptions = false;\n this.selectedMsgId = \"\";\n }\n deleteMessage(msgId) {\n const room = this.ChatSystemService.getDmRoom(this.roomId);\n this.alertService.confirmDeleteMessage(msgId, room);\n }\n notImplemented() {\n this.alertService.presentAlert('Funcionalidade em desenvolvimento');\n }\n close() {\n this.modalController.dismiss();\n this.deleteRecording();\n }\n load() {\n this.getChatMembers();\n }\n doRefresh(ev) {\n this.load();\n ev.target.complete();\n }\n scrollToBottom() {\n try {\n if (this.scrollingOnce) {\n this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;\n //this.scrollingOnce = false;\n }\n } catch (err) {}\n }\n goToEvent(event) {\n var _this5 = 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 _this5.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 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 ngOnDestroy() {\n window.removeEventListener('scroll', this.scrollChangeCallback, true);\n }\n sendMessage() {\n this.ChatSystemService.getDmRoom(this.roomId).send({}).then(() => {});\n }\n /* sendMessage(msg) {\r\n let lastMsg = msg.pop();\r\n console.log(msg)\r\n console.log(lastMsg._id,lastMsg.u.username,lastMsg.msg)\r\n this.ChatSystemService.getDmRoom(this.roomId).send({}).then(() => {\r\n if(lastMsg.u.username == this.members[1].username) {\r\n this.notificationService.ChatSendMessageNotification(this.members[0].username,this.members[1].name,lastMsg.msg,this.roomId)\r\n } else if (msg.u.username == this.members[0].username) {\r\n this.notificationService.ChatSendMessageNotification(this.members[1].username,this.members[1].name,lastMsg.msg,this.roomId)\r\n }\r\n \r\n })\r\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 _this6 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this6.roomId;\n let audioFile;\n _this6.storage.get('recordData').then(recordData => {\n audioFile = recordData;\n if (recordData?.value?.recordDataBase64.includes('data:audio')) {\n _this6.audioRecorded = recordData?.value?.recordDataBase64;\n } else if (recordData?.value?.mimeType && recordData?.value?.recordDataBase64) {\n _this6.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;\n }\n //Converting base64 to blob\n const encodedData = btoa(_this6.audioRecorded);\n const blob = _this6.base64toBlob(encodedData, recordData.value.mimeType);\n const formData = new FormData();\n formData.append(\"blobFile\", blob);\n _this6.ChatSystemService.getDmRoom(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 _this6.deleteRecording();\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 docIndex(index) {\n this.dicIndex = index;\n }\n openViewDocumentModal(file) {\n var _this7 = 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: 'PDF',\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 _this7.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 getChatMembers() {\n // this.showLoader = true;\n // this.chatService.getMembers(this.roomId).subscribe(res => {\n // this.members = res['members'];\n // this.dmUsers = res['members'].filter(data => data.username != this.sessionStore.user.UserName)\n // this.showLoader = false;\n // });\n this.members = this.ChatSystemService.getDmRoom(this.roomId).members;\n this.dmUsers = this.ChatSystemService.getDmRoom(this.roomId).membersExcludeMe;\n }\n showDateDuration(start) {\n let end;\n end = new Date();\n start = new Date(start);\n let customizedDate;\n const totalSeconds = Math.floor((end - start) / 1000);\n ;\n const totalMinutes = Math.floor(totalSeconds / 60);\n const totalHours = Math.floor(totalMinutes / 60);\n const totalDays = Math.floor(totalHours / 24);\n const hours = totalHours - totalDays * 24;\n const minutes = totalMinutes - totalDays * 24 * 60 - hours * 60;\n const seconds = totalSeconds - totalDays * 24 * 60 * 60 - hours * 60 * 60 - minutes * 60;\n if (totalDays == 0) {\n if (start.getDate() == new Date().getDate()) {\n let time = start.getHours() + \":\" + this.addZero(start.getUTCMinutes());\n return time;\n } else {\n return 'Ontem';\n }\n } else {\n let date = start.getDate() + \"/\" + (start.getMonth() + 1) + \"/\" + start.getFullYear();\n return date;\n }\n }\n addZero(i) {\n if (i < 10) {\n i = \"0\" + i;\n }\n return i;\n }\n openMessagesOptions(ev) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n const popover = yield _this8.popoverController.create({\n component: MessagesOptionsPage,\n componentProps: {\n roomId: _this8.roomId\n },\n cssClass: 'messages-options',\n event: ev,\n translucent: true\n });\n return yield popover.present();\n })();\n }\n addContacts() {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n const modal = yield _this9.modalController.create({\n component: ContactsPage,\n componentProps: {},\n cssClass: 'contacts',\n backdropDismiss: false\n });\n yield modal.present();\n modal.onDidDismiss();\n })();\n }\n bookMeeting() {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n let attendees = _this10.ChatSystemService.getDmRoom(_this10.roomId).members.map(val => {\n return {\n Name: val.name,\n EmailAddress: val.username + \"@\" + environment.domain,\n IsRequired: \"true\"\n };\n });\n _this10.popoverController.dismiss();\n if (window.innerWidth <= 1024) {\n const modal = yield _this10.modalController.create({\n component: NewEventPage,\n componentProps: {\n attendees: attendees,\n roomId: _this10.roomId\n },\n cssClass: 'modal modal-desktop',\n backdropDismiss: false\n });\n yield modal.present();\n modal.onDidDismiss().then(data => {\n if (data?.data && data.data.id) {\n // const roomId = this.roomId\n // this.ChatSystemService.getDmRoom(roomId).send({\n // file: {\n // \"type\": \"application/meeting\",\n // \"subject\": data.data.Subject,\n // \"start_date\": data.data.StartDate,\n // \"end_date\": data.data.EndDate,\n // \"venue\": data.data.venue,\n // \"id\": data.data.id,\n // \"calendarId\": data.data.CalendarId\n // },\n // temporaryData: {}\n // })\n }\n });\n }\n })();\n }\n takePicture() {\n var _this11 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this11.roomId;\n const file = yield Camera.getPhoto({\n quality: 90,\n // allowEditing: true,\n resultType: CameraResultType.Base64,\n source: CameraSource.Camera\n });\n const blob = _this11.dataURItoBlob('data:image/jpeg;base64,' + file.base64String);\n console.log('data:image/jpeg;base64,' + file.base64String);\n const formData = new FormData();\n formData.append(\"blobFile\", blob);\n // console.log('capturedImage', capturedImage);\n _this11.ChatSystemService.getDmRoom(roomId).send({\n file: {\n \"type\": \"application/img\",\n \"guid\": ''\n },\n attachments: [{\n \"title\": \"file.jpg\",\n \"text\": \"description\",\n \"title_link_download\": false\n }],\n temporaryData: formData\n });\n })();\n }\n dataURItoBlob(dataURI) {\n // convert base64 to raw binary data held in a string\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n var byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n // create a view into the buffer\n var ia = new Uint8Array(ab);\n // set the bytes of the buffer to the correct values\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n // write the ArrayBuffer to a blob, and you're done\n var blob = new Blob([ab], {\n type: mimeString\n });\n return blob;\n }\n addImageMobile() {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n _this12.addFileToChatMobile(['image/apng', 'image/jpeg', 'image/png']);\n })();\n }\n addImage() {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n _this13.addFileToChat(['image/apng', 'image/jpeg', 'image/png']);\n })();\n }\n addFile() {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n _this14.addFileToChat(['.doc', '.docx', '.pdf']);\n })();\n }\n addFileWebtrix() {\n var _this15 = this;\n return _asyncToGenerator(function* () {\n const modal = yield _this15.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 const data = res.data;\n const roomId = _this15.roomId;\n if (data.selected) {\n _this15.ChatSystemService.getDmRoom(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 temporaryData: res,\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\": \"https://static.ichimura.ed.jp/uploads/2017/10/pdf-icon.png\",\n // \"message_link\": url_no_options,\n \"text\": res.data.selected.DocTypeDesc,\n \"type\": \"webtrix\"\n }]\n });\n }\n });\n return function (_x2) {\n return _ref3.apply(this, arguments);\n };\n }());\n })();\n }\n addFileToChatMobile(types) {\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.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 _this16.ChatSystemService.getDmRoom(roomId).send({\n file: {\n \"type\": \"application/img\",\n \"guid\": ''\n },\n temporaryData: formData,\n attachments: [{\n \"title\": file.path,\n \"text\": \"description\",\n \"title_link_download\": false\n }]\n });\n })();\n }\n getFileReader() {\n const fileReader = new FileReader();\n const zoneOriginalInstance = fileReader[\"__zone_symbol__originalInstance\"];\n return zoneOriginalInstance || fileReader;\n }\n addFileToChat(types) {\n var _this17 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this17.roomId;\n const file = yield _this17.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 _this17.getBase64(file).catch(error => {\n console.error(error);\n })));\n const blob = _this17.base64toBlob(encodedData, file.type);\n const formData = new FormData();\n formData.append('blobFile', blob);\n _this17.ChatSystemService.getDmRoom(roomId).send({\n file: {\n \"type\": file.type,\n \"guid\": ''\n },\n attachments: [{\n \"title\": file.name,\n \"name\": file.name,\n // \"text\": \"description\",\n \"title_link_download\": false\n }],\n temporaryData: formData\n });\n } else {}\n })();\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 openChatOptions(ev) {\n var _this18 = this;\n return _asyncToGenerator(function* () {\n const roomId = _this18.roomId;\n const popover = yield _this18.popoverController.create({\n component: ChatOptionsPopoverPage,\n cssClass: 'chat-options-popover',\n event: ev,\n componentProps: {\n room: _this18.roomId,\n members: _this18.members,\n eventSelectedDate: new Date()\n },\n translucent: true\n });\n yield popover.present();\n popover.onDidDismiss().then( /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* (res) {\n if (res['data'] == 'meeting') {\n _this18.bookMeeting();\n } else if (res['data'] == 'take-picture') {\n _this18.takePicture();\n } else if (res['data'] == 'add-picture') {\n _this18.addImageMobile();\n } else if (res['data'] == 'add-document') {\n _this18.addFile();\n } else if (res['data'] == 'documentoGestaoDocumental') {\n _this18.addFileWebtrix();\n }\n });\n return function (_x3) {\n return _ref4.apply(this, arguments);\n };\n }());\n })();\n }\n // getRoomMessageDB(roomId) {\n // if (this.platform.is('desktop') || this.platform.is('mobileweb')) {\n // } else {\n // this.sqlservice.getAllChatMSG(roomId).then((msg: any) => {\n // let chatmsgArray = [];\n // msg.forEach(element => {\n // let msgChat = {\n // _id: element.Id,\n // attachments: this.isJson(element.Attachments),\n // channels: this.isJson(element.Channels),\n // file: this.isJson(element.File),\n // mentions: this.isJson(element.Mentions),\n // msg: element.Msg,\n // rid: element.Rid,\n // ts: element.Ts,\n // u: this.isJson(element.U),\n // _updatedAt: element.UpdatedAt,\n // image_url: this.isJson(element.image_url)\n // }\n // chatmsgArray.push(msgChat)\n // });\n // })\n // }\n // }\n isJson(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return \"\";\n }\n return JSON.parse(str);\n }\n transformDataMSG(res) {\n if (this.platform.is('desktop') || this.platform.is('mobileweb')) {} else {\n res.forEach(element => {\n let chatmsg = {\n _id: element._id,\n attachments: element.attachments,\n channels: element.channels,\n file: element.file,\n mentions: element.mentions,\n msg: element.msg,\n rid: element.rid,\n ts: element.ts,\n u: element.u,\n _updatedAt: element._updatedAt\n /* image_url: {\r\n name: name,\r\n path: `${IMAGE_DIR}/${name}`,\r\n data: `data:image/jpeg;base64,${readFile.data}`,\r\n }, */\n };\n // this.sqlservice.addChatMSG(chatmsg)\n });\n }\n }\n /* testeDownload(msg: MessageService) {\r\n this.downloadFile = \"\";\r\n this.AttachmentsService.downloadFileAndStore(msg.file.guid);\r\n } */\n downloadFileMsg(msg) {\n msg.downloadFileMsg();\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(() => console.log()).catch(e => console.error(e));\n }).catch(e => console.error(e));\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 openPreview(msg) {\n var _this19 = this;\n return _asyncToGenerator(function* () {\n if (msg.file.type === \"application/webtrix\") {\n _this19.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 _this19.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 (_this19.platform.is('desktop') || _this19.platform.is('mobileweb')) {\n console.log(msg);\n if (msg.file.type == \"application/img\") {\n const modal = yield _this19.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 _this19.downloadFileFromBrowser(\"file\", str);\n _this19.downloadFileFromBrowser(msg.attachments[0].title, str);\n _this19.downloadFileFromBrowser(msg.attachments[0].title, str);\n }\n } else {\n if (msg.file.type == \"application/img\") {\n const modal = yield _this19.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 _this19.openFile(str, msg.attachments[0].title, msg.file.type);\n }\n }\n }\n }\n })();\n }\n audioPreview(msg) {\n var _this20 = this;\n return _asyncToGenerator(function* () {\n if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') {\n _this20.downloadFileMsg(msg);\n } else {}\n })();\n }\n imageSize(img) {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n canvas.width = 300;\n canvas.height = 234;\n ctx.drawImage(img.attachments[0].image_url, 0, 0, 300, 234);\n document.body.appendChild(canvas);\n }\n getPicture(img) {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n canvas.width = 300;\n canvas.height = 234;\n ctx.drawImage(img.attachments[0].image_url, 0, 0, 300, 234);\n document.body.appendChild(canvas);\n }\n // async ShareEmail(msg){\n // // Check if sharing via email is supported\n // await Share.share({\n // title: msg.u.username,\n // text: msg._updatedAt,\n // url: msg.attachments[0].image_url,\n // dialogTitle: 'Share with buddies',\n // });\n // }\n createDirectoryImage() {\n return _asyncToGenerator(function* () {\n yield Filesystem.mkdir({\n path: IMAGE_DIR,\n directory: Directory.Data,\n recursive: true\n });\n })();\n }\n};\nMessagesPage.ctorParameters = () => [{\n type: PopoverController\n}, {\n type: ModalController\n}, {\n type: NavParams\n}, {\n type: AlertService\n}, {\n type: ToastService\n}, {\n type: FileService\n}, {\n type: GestureController\n}, {\n type: ThemeService\n}, {\n type: Platform\n}, {\n type: SqliteService\n}, {\n type: ChatSystemService\n}, {\n type: CameraService\n}, {\n type: Storage\n}, {\n type: DomSanitizer\n}, {\n type: File\n}, {\n type: FileOpener\n}, {\n type: NotificationsService\n}, {\n type: Router\n}];\nMessagesPage.propDecorators = {\n myScrollContainer: [{\n type: ViewChild,\n args: ['scrollMe']\n }],\n rectangle: [{\n type: ViewChild,\n args: ['rectangle']\n }],\n recordBtn: [{\n type: ViewChild,\n args: ['recordbtn', {\n read: ElementRef\n }]\n }],\n fileChooserElementRef: [{\n type: ViewChild,\n args: ['filechooser']\n }]\n};\nMessagesPage = __decorate([Component({\n selector: 'app-messages',\n template: __NG_CLI_RESOURCE__0,\n styles: [__NG_CLI_RESOURCE__1]\n})], MessagesPage);\nexport { MessagesPage };","map":{"version":3,"mappings":"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","names":["Component","ElementRef","ViewChild","Router","GestureController","ModalController","NavParams","PopoverController","Platform","ViewDocumentPage","ContactsPage","AlertService","FileService","ToastService","ChatOptionsPopoverPage","MessagesOptionsPage","ChatMessageStore","ChatUserStorage","environment","ThemeService","VoiceRecorder","Haptics","ImpactStyle","SqliteService","ViewEventPage","ChatSystemService","CameraService","SearchPage","Storage","Camera","CameraResultType","CameraSource","DomSanitizer","SessionStore","ViewMediaPage","File","FileOpener","Filesystem","Directory","NewEventPage","NotificationsService","IMAGE_DIR","MessagesPage","constructor","popoverController","modalController","navParams","alertService","toastService","fileService","gestureController","platform","sqlservice","storage","sanitiser","file","fileOpener","notificationService","router","myScrollContainer","nativeElement","scrollTop","scrollHeight","err","loggedUser","user","ChatData","roomId","get","window","onresize","event","innerWidth","dismiss","getDmRoom","loadHistory","scrollDown","scrollToBottomClicked","openRoom","setTimeout","ngOnInit","console","log","url","createDirectoryImage","getUserOfRoom","then","value","catch","error","getChatMembers","ngAfterViewInit","scrollChangeCallback","onContentScrolled","addEventListener","longpress","create","el","recordBtn","threshold","gestureName","onStart","ev","impact","style","Light","startRecording","onEnd","stopRecording","enable","onDragOver","e","onDragLeave","calculateDuration","recording","duration","durationDisplay","minutes","Math","floor","seconds","toString","padStart","loadFiles","_this","fileName","lastAudioRecorded","recordData","recordDataBase64","includes","audioRecorded","bypassSecurityTrustResourceUrl","mimeType","requestAudioRecordingPermission","canDeviceVoiceRecord","result","_this2","_badRequest","deleteRecording","allowTyping","_this3","Date","getTime","set","_this4","remove","handlePress","id","selectedMsgId","showMessageOptions","handleClick","deleteMessage","msgId","room","confirmDeleteMessage","notImplemented","presentAlert","close","load","doRefresh","target","complete","scrollToBottom","scrollingOnce","goToEvent","classs","modal","_this5","component","componentProps","eventId","CalendarId","calendarId","cssClass","present","onDidDismiss","res","startPosition","srcElement","scroll","windowHeight","containerHeight","clientHeight","currentPosition","scrollToBottomBtn","ngOnDestroy","removeEventListener","sendMessage","send","base64toBlob","base64Data","contentType","sliceSize","byteCharacters","atob","bytesLength","length","slicesCount","ceil","byteArrays","Array","sliceIndex","begin","end","min","bytes","offset","i","charCodeAt","Uint8Array","Blob","type","sendAudio","_this6","audioFile","encodedData","btoa","blob","formData","FormData","append","msDuration","attachments","temporaryData","viewDocument","openViewDocumentModal","fullUrl","viewDocumentByUrl","docIndex","index","dicIndex","task","serialNumber","taskStartDate","isEvent","workflowInstanceDataFields","FolderID","Subject","Assunto","SourceSecFsID","ApplicationId","SourceType","SourceID","DocId","DispatchNumber","doc","_this7","trustedUrl","title","title_link","Document","applicationId","docId","folderId","members","dmUsers","membersExcludeMe","showDateDuration","start","customizedDate","totalSeconds","totalMinutes","totalHours","totalDays","hours","getDate","time","getHours","addZero","getUTCMinutes","date","getMonth","getFullYear","openMessagesOptions","popover","_this8","translucent","addContacts","_this9","backdropDismiss","bookMeeting","attendees","_this10","map","val","Name","name","EmailAddress","username","domain","IsRequired","data","takePicture","_this11","getPhoto","quality","resultType","Base64","source","dataURItoBlob","base64String","dataURI","byteString","split","mimeString","ab","ArrayBuffer","ia","addImageMobile","_this12","addFileToChatMobile","addImage","_this13","addFileToChat","addFile","_this14","addFileWebtrix","_this15","select","showSearchInput","selected","ApplicationType","Id","DocTypeDesc","types","_this16","Photos","response","fetch","path","getFileReader","fileReader","FileReader","zoneOriginalInstance","_this17","getFileFromDevice","JSON","stringify","getBase64","reader","readAsDataURL","Promise","resolve","onload","onerror","openChatOptions","_this18","eventSelectedDate","isJson","str","parse","transformDataMSG","is","forEach","element","chatmsg","_id","channels","mentions","msg","rid","ts","u","_updatedAt","downloadFileMsg","b64toBlob","b64Data","replace","slice","byteNumbers","byteArray","push","openFile","pdfString","filename","pathFile","contentFile","documentsDirectory","externalRootDirectory","writeFile","success","open","downloadFileFromBrowser","linkSource","downloadLink","document","createElement","href","download","click","openPreview","_this19","image_url","substring","image","audioPreview","_this20","imageSize","img","canvas","ctx","getContext","width","height","drawImage","body","appendChild","getPicture","mkdir","directory","Data","recursive","args","read","selector","template"],"sourceRoot":"","sources":["C:\\Users\\eudes.inacio\\GabineteDigital\\gabinete-digital-fo\\src\\app\\pages\\chat\\messages\\messages.page.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute, Route, Router } from '@angular/router'\r\nimport { GestureController, ModalController, NavParams, PopoverController, Platform, AlertController } from '@ionic/angular';\r\nimport { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';\r\nimport { EventPerson } from 'src/app/models/eventperson.model';\r\nimport { ExpedientTaskModalPageNavParamsTask } from 'src/app/models/ExpedientTaskModalPage';\r\nimport { ContactsPage } from 'src/app/pages/chat/messages/contacts/contacts.page';\r\nimport { AlertService } from 'src/app/services/alert.service';\r\nimport { AuthService } from 'src/app/services/auth.service';\r\nimport { ChatService } from 'src/app/services/chat.service';\r\nimport { FileService } from 'src/app/services/functions/file.service';\r\nimport { ProcessesService } from 'src/app/services/processes.service';\r\nimport { ToastService } from 'src/app/services/toast.service';\r\nimport { ChatOptionsPopoverPage } from 'src/app/shared/popover/chat-options-popover/chat-options-popover.page';\r\nimport { MessagesOptionsPage } from 'src/app/shared/popover/messages-options/messages-options.page';\r\nimport { ChatMessageStore } from 'src/app/store/chat/chat-message.service';\r\nimport { ChatUserStorage } from 'src/app/store/chat/chat-user.service';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ThemeService } from 'src/app/services/theme.service'\r\n\r\nimport { VoiceRecorder, RecordingData, GenericResponse } from 'capacitor-voice-recorder';\r\nimport { Haptics, ImpactStyle } from '@capacitor/haptics';\r\nimport { SqliteService } from 'src/app/services/sqlite.service';\r\nimport { ViewEventPage } from 'src/app/modals/view-event/view-event.page';\r\nimport { ChatSystemService } from 'src/app/services/chat/chat-system.service'\r\nimport { MessageService } from 'src/app/services/chat/message.service';\r\nimport { AttachmentsService } from 'src/app/services/attachments.service';\r\n\r\nimport { CameraService } from 'src/app/services/camera.service';\r\nimport { element } from 'protractor';\r\nimport { FileType } from 'src/app/models/fileType';\r\nimport { SearchPage } from 'src/app/pages/search/search.page';\r\nimport { Storage } from '@ionic/storage';\r\nimport { FileToBase64Service } from 'src/app/services/file/file-to-base64.service';\r\nimport { Camera, CameraResultType, CameraSource } from '@capacitor/camera';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { SessionStore } from 'src/app/store/session.service';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ViewMediaPage } from 'src/app/modals/view-media/view-media.page';\r\nimport { File } from '@awesome-cordova-plugins/file/ngx';\r\nimport { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx';\r\nimport { Filesystem, Directory } from '@capacitor/filesystem';\r\nimport { NewEventPage } from '../../agenda/new-event/new-event.page';\r\nimport { NotificationsService } from 'src/app/services/notifications.service';\r\n\r\n\r\nconst IMAGE_DIR = 'stored-images';\r\n\r\n@Component({\r\n selector: 'app-messages',\r\n templateUrl: './messages.page.html',\r\n styleUrls: ['./messages.page.scss'],\r\n})\r\nexport class MessagesPage implements OnInit, AfterViewInit, OnDestroy {\r\n showLoader: boolean;\r\n\r\n @ViewChild('scrollMe') private myScrollContainer: ElementRef;\r\n /* @ViewChild('messageContainer') messageContainer: ElementRef; */\r\n @ViewChild('rectangle') private rectangle: ElementRef;\r\n\r\n canvas: any\r\n ctx: any\r\n loggedUser: any;\r\n userPresence = '';\r\n dmUsers: any;\r\n roomId: string;\r\n el: any;\r\n members: any;\r\n scrollingOnce: boolean = true;\r\n\r\n chatMessageStore = ChatMessageStore;\r\n chatUserStorage = ChatUserStorage;\r\n\r\n private scrollChangeCallback: () => void;\r\n currentPosition: any;\r\n startPosition: number;\r\n scrollToBottomBtn = false;\r\n attendees: EventPerson[] = [];\r\n longPressActive = false;\r\n showMessageOptions = false;\r\n selectedMsgId: string;\r\n\r\n dicIndex = 0;\r\n task: ExpedientTaskModalPageNavParamsTask;\r\n LoadedDocument: any = null;\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 @ViewChild('recordbtn', { read: ElementRef }) recordBtn: ElementRef;\r\n myAudio: any;\r\n downloadfile: any;\r\n downloadFile: any;\r\n files: any[] = [];\r\n @ViewChild('filechooser') fileChooserElementRef: ElementRef;\r\n //items: File[] = [];\r\n fileSelected?: Blob;\r\n pdfUrl?: string;\r\n base64File: string;\r\n downloadProgess: number;\r\n downloadLoader: boolean;\r\n\r\n audioPermissionStatus: 'granted' | 'denied' | 'prompt' | null = null\r\n sessionStore = SessionStore\r\n\r\n constructor(\r\n public popoverController: PopoverController,\r\n private modalController: ModalController,\r\n private navParams: NavParams,\r\n private alertService: AlertService,\r\n private toastService: ToastService,\r\n private fileService: FileService,\r\n private gestureController: GestureController,\r\n public ThemeService: ThemeService,\r\n private platform: Platform,\r\n private sqlservice: SqliteService,\r\n public ChatSystemService: ChatSystemService,\r\n private CameraService: CameraService,\r\n private storage: Storage,\r\n //private fileOpener: FileOpener,\r\n private sanitiser: DomSanitizer,\r\n // private document: DocumentViewer\r\n private file: File,\r\n private fileOpener: FileOpener,\r\n private notificationService: NotificationsService,\r\n private router: Router\r\n ) {\r\n this.loggedUser = SessionStore.user.ChatData['data'];\r\n this.roomId = this.navParams.get('roomId');\r\n\r\n\r\n window.onresize = (event) => {\r\n if (window.innerWidth > 701) {\r\n this.modalController.dismiss();\r\n }\r\n }\r\n\r\n\r\n this.ChatSystemService.getDmRoom(this.roomId).loadHistory({})\r\n this.ChatSystemService.getDmRoom(this.roomId).scrollDown = this.scrollToBottomClicked\r\n this.ChatSystemService.openRoom(this.roomId)\r\n\r\n setTimeout(() => {\r\n this.scrollToBottomClicked()\r\n }, 150)\r\n\r\n\r\n }\r\n\r\n ngOnInit() {\r\n console.log(this.router.url); \r\n this.createDirectoryImage()\r\n // this.chatService.refreshtoken();\r\n this.ChatSystemService.getUserOfRoom(this.roomId).then((value) => {\r\n\r\n }).catch((error) => {\r\n console.error(error)\r\n })\r\n\r\n this.getChatMembers();\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 const longpress = this.gestureController.create({\r\n el: this.recordBtn.nativeElement,\r\n threshold: 0,\r\n gestureName: 'long-press',\r\n onStart: ev => {\r\n Haptics.impact({ style: ImpactStyle.Light })\r\n this.startRecording();\r\n //this.calculateDuration();\r\n },\r\n onEnd: ev => {\r\n Haptics.impact({ style: ImpactStyle.Light })\r\n this.stopRecording();\r\n }\r\n }, true);\r\n longpress.enable();\r\n }\r\n\r\n onDragOver(e?) {}\r\n onDragLeave(e?) {}\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 loadFiles() {\r\n\r\n this.storage.get('fileName').then((fileName) => {\r\n this.lastAudioRecorded = fileName;\r\n })\r\n\r\n try {\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\r\n\r\n handlePress(id?: string) {\r\n this.selectedMsgId = id;\r\n this.showMessageOptions = true;\r\n }\r\n\r\n handleClick() {\r\n this.showMessageOptions = false;\r\n this.selectedMsgId = \"\";\r\n }\r\n\r\n deleteMessage(msgId: string) {\r\n const room = this.ChatSystemService.getDmRoom(this.roomId)\r\n this.alertService.confirmDeleteMessage(msgId, room);\r\n }\r\n\r\n\r\n notImplemented() {\r\n this.alertService.presentAlert('Funcionalidade em desenvolvimento');\r\n }\r\n\r\n close() {\r\n this.modalController.dismiss();\r\n this.deleteRecording();\r\n }\r\n\r\n load() {\r\n this.getChatMembers();\r\n }\r\n\r\n doRefresh(ev: any) {\r\n this.load();\r\n ev.target.complete();\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 //this.scrollingOnce = false;\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 \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 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 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\r\n ngOnDestroy() {\r\n window.removeEventListener('scroll', this.scrollChangeCallback, true);\r\n }\r\n\r\n sendMessage() {\r\n this.ChatSystemService.getDmRoom(this.roomId).send({}).then(() => {\r\n })\r\n }\r\n\r\n /* sendMessage(msg) {\r\n let lastMsg = msg.pop();\r\n console.log(msg)\r\n console.log(lastMsg._id,lastMsg.u.username,lastMsg.msg)\r\n this.ChatSystemService.getDmRoom(this.roomId).send({}).then(() => {\r\n if(lastMsg.u.username == this.members[1].username) {\r\n this.notificationService.ChatSendMessageNotification(this.members[0].username,this.members[1].name,lastMsg.msg,this.roomId)\r\n } else if (msg.u.username == this.members[0].username) {\r\n this.notificationService.ChatSendMessageNotification(this.members[1].username,this.members[1].name,lastMsg.msg,this.roomId)\r\n }\r\n \r\n })\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\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.getDmRoom(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 viewDocument(file: any, url?: string) {\r\n\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\r\n docIndex(index: number) {\r\n this.dicIndex = index\r\n }\r\n\r\n async openViewDocumentModal(file: any) {\r\n\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: 'PDF',\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 getChatMembers() {\r\n // this.showLoader = true;\r\n // this.chatService.getMembers(this.roomId).subscribe(res => {\r\n // this.members = res['members'];\r\n // this.dmUsers = res['members'].filter(data => data.username != this.sessionStore.user.UserName)\r\n // this.showLoader = false;\r\n // });\r\n\r\n this.members = this.ChatSystemService.getDmRoom(this.roomId).members\r\n this.dmUsers = this.ChatSystemService.getDmRoom(this.roomId).membersExcludeMe\r\n }\r\n\r\n showDateDuration(start: any) {\r\n let end;\r\n end = new Date();\r\n start = new Date(start);\r\n let customizedDate;\r\n\r\n const totalSeconds = Math.floor((end - (start)) / 1000);;\r\n const totalMinutes = Math.floor(totalSeconds / 60);\r\n const totalHours = Math.floor(totalMinutes / 60);\r\n const totalDays = Math.floor(totalHours / 24);\r\n\r\n const hours = totalHours - (totalDays * 24);\r\n const minutes = totalMinutes - (totalDays * 24 * 60) - (hours * 60);\r\n const seconds = totalSeconds - (totalDays * 24 * 60 * 60) - (hours * 60 * 60) - (minutes * 60);\r\n\r\n if (totalDays == 0) {\r\n if (start.getDate() == new Date().getDate()) {\r\n let time = start.getHours() + \":\" + this.addZero(start.getUTCMinutes());\r\n return time;\r\n }\r\n else {\r\n return 'Ontem';\r\n }\r\n }\r\n else {\r\n let date = start.getDate() + \"/\" + (start.getMonth() + 1) + \"/\" + start.getFullYear();\r\n return date;\r\n }\r\n }\r\n\r\n addZero(i) {\r\n if (i < 10) {\r\n i = \"0\" + i;\r\n }\r\n return i;\r\n }\r\n\r\n async openMessagesOptions(ev?: any) {\r\n const popover = await this.popoverController.create({\r\n component: MessagesOptionsPage,\r\n componentProps: {\r\n roomId: this.roomId,\r\n },\r\n cssClass: 'messages-options',\r\n event: ev,\r\n translucent: true,\r\n });\r\n return await popover.present();\r\n }\r\n\r\n async addContacts() {\r\n const modal = await this.modalController.create({\r\n component: ContactsPage,\r\n componentProps: {},\r\n cssClass: 'contacts',\r\n backdropDismiss: false\r\n });\r\n\r\n await modal.present();\r\n\r\n modal.onDidDismiss();\r\n }\r\n\r\n async bookMeeting() {\r\n let attendees = this.ChatSystemService.getDmRoom(this.roomId).members.map((val) => {\r\n return {\r\n Name: val.name,\r\n EmailAddress: val.username + \"@\" + environment.domain,\r\n IsRequired: \"true\",\r\n }\r\n });\r\n\r\n this.popoverController.dismiss();\r\n if (window.innerWidth <= 1024) {\r\n const modal = await this.modalController.create({\r\n component: NewEventPage,\r\n componentProps: {\r\n attendees: attendees,\r\n roomId: this.roomId\r\n },\r\n cssClass: 'modal modal-desktop',\r\n backdropDismiss: false\r\n });\r\n await modal.present();\r\n modal.onDidDismiss().then((data) => {\r\n if (data?.data && data.data.id) {\r\n\r\n // const roomId = this.roomId\r\n\r\n // this.ChatSystemService.getDmRoom(roomId).send({\r\n // file: {\r\n // \"type\": \"application/meeting\",\r\n // \"subject\": data.data.Subject,\r\n // \"start_date\": data.data.StartDate,\r\n // \"end_date\": data.data.EndDate,\r\n // \"venue\": data.data.venue,\r\n // \"id\": data.data.id,\r\n // \"calendarId\": data.data.CalendarId\r\n // },\r\n // temporaryData: {}\r\n // })\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n async takePicture() {\r\n\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 blob = this.dataURItoBlob('data:image/jpeg;base64,' + file.base64String)\r\n console.log('data:image/jpeg;base64,' + file.base64String)\r\n\r\n const formData = new FormData();\r\n formData.append(\"blobFile\", blob);\r\n\r\n // console.log('capturedImage', capturedImage);\r\n\r\n this.ChatSystemService.getDmRoom(roomId).send({\r\n file: {\r\n \"type\": \"application/img\",\r\n \"guid\": ''\r\n },\r\n attachments: [{\r\n \"title\": \"file.jpg\",\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 dataURItoBlob(dataURI) {\r\n // convert base64 to raw binary data held in a string\r\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\r\n var byteString = atob(dataURI.split(',')[1]);\r\n \r\n // separate out the mime component\r\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]\r\n \r\n // write the bytes of the string to an ArrayBuffer\r\n var ab = new ArrayBuffer(byteString.length);\r\n \r\n // create a view into the buffer\r\n var ia = new Uint8Array(ab);\r\n \r\n // set the bytes of the buffer to the correct values\r\n for (var i = 0; i < byteString.length; i++) {\r\n ia[i] = byteString.charCodeAt(i);\r\n }\r\n \r\n // write the ArrayBuffer to a blob, and you're done\r\n var blob = new Blob([ab], {type: mimeString});\r\n return blob;\r\n \r\n }\r\n\r\n async addImageMobile() {\r\n this.addFileToChatMobile(['image/apng', 'image/jpeg', 'image/png'])\r\n }\r\n\r\n async addImage() {\r\n this.addFileToChat(['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 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 const roomId = this.roomId\r\n\r\n if (data.selected) {\r\n\r\n this.ChatSystemService.getDmRoom(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 temporaryData: res,\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\": \"https://static.ichimura.ed.jp/uploads/2017/10/pdf-icon.png\",\r\n // \"message_link\": url_no_options,\r\n \"text\": res.data.selected.DocTypeDesc,\r\n \"type\": \"webtrix\"\r\n }],\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.getDmRoom(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 \"text\": \"description\",\r\n \"title_link_download\": false,\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 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\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\r\n this.ChatSystemService.getDmRoom(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 // \"text\": \"description\",\r\n \"title_link_download\": false,\r\n }],\r\n temporaryData: formData\r\n });\r\n } else {\r\n\r\n }\r\n\r\n\r\n\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 async openChatOptions(ev?: any) {\r\n const roomId = this.roomId\r\n\r\n\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.roomId,\r\n members: this.members,\r\n eventSelectedDate: new Date(),\r\n },\r\n translucent: true\r\n });\r\n await popover.present();\r\n popover.onDidDismiss().then(async (res) => {\r\n\r\n if (res['data'] == 'meeting') {\r\n this.bookMeeting();\r\n }\r\n else if (res['data'] == 'take-picture') {\r\n this.takePicture()\r\n }\r\n else if (res['data'] == 'add-picture') {\r\n this.addImageMobile()\r\n }\r\n else if (res['data'] == 'add-document') {\r\n this.addFile()\r\n }\r\n else if (res['data'] == 'documentoGestaoDocumental') {\r\n\r\n this.addFileWebtrix()\r\n }\r\n\r\n\r\n });\r\n }\r\n\r\n\r\n // getRoomMessageDB(roomId) {\r\n // if (this.platform.is('desktop') || this.platform.is('mobileweb')) {\r\n // } else {\r\n // this.sqlservice.getAllChatMSG(roomId).then((msg: any) => {\r\n\r\n // let chatmsgArray = [];\r\n // msg.forEach(element => {\r\n\r\n\r\n // let msgChat = {\r\n // _id: element.Id,\r\n // attachments: this.isJson(element.Attachments),\r\n // channels: this.isJson(element.Channels),\r\n // file: this.isJson(element.File),\r\n // mentions: this.isJson(element.Mentions),\r\n // msg: element.Msg,\r\n // rid: element.Rid,\r\n // ts: element.Ts,\r\n // u: this.isJson(element.U),\r\n // _updatedAt: element.UpdatedAt,\r\n // image_url: this.isJson(element.image_url)\r\n // }\r\n\r\n // chatmsgArray.push(msgChat)\r\n // });\r\n\r\n\r\n\r\n // })\r\n // }\r\n // }\r\n\r\n isJson(str) {\r\n try {\r\n JSON.parse(str);\r\n } catch (e) {\r\n return \"\";\r\n }\r\n return JSON.parse(str);\r\n }\r\n\r\n\r\n\r\n transformDataMSG(res) {\r\n if (this.platform.is('desktop') || this.platform.is('mobileweb')) {\r\n } else {\r\n res.forEach(element => {\r\n\r\n let chatmsg = {\r\n _id: element._id,\r\n attachments: element.attachments,\r\n channels: element.channels,\r\n file: element.file,\r\n mentions: element.mentions,\r\n msg: element.msg,\r\n rid: element.rid,\r\n ts: element.ts,\r\n u: element.u,\r\n _updatedAt: element._updatedAt,\r\n /* image_url: {\r\n name: name,\r\n path: `${IMAGE_DIR}/${name}`,\r\n data: `data:image/jpeg;base64,${readFile.data}`,\r\n }, */\r\n }\r\n\r\n // this.sqlservice.addChatMSG(chatmsg)\r\n\r\n });\r\n }\r\n\r\n }\r\n\r\n /* testeDownload(msg: MessageService) {\r\n this.downloadFile = \"\";\r\n this.AttachmentsService.downloadFileAndStore(msg.file.guid);\r\n } */\r\n\r\n\r\n downloadFileMsg(msg: MessageService) {\r\n msg.downloadFileMsg();\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(() => console.log())\r\n .catch(e => console.error(e))\r\n })\r\n .catch(e => console.error(e))\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\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 console.log(msg)\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\r\n this.downloadFileFromBrowser(\"file\", str)\r\n this.downloadFileFromBrowser(msg.attachments[0].title, str)\r\n\r\n this.downloadFileFromBrowser(msg.attachments[0].title, str)\r\n\r\n }\r\n\r\n } else {\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.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\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 imageSize(img) {\r\n var canvas = document.createElement('canvas');\r\n var ctx = canvas.getContext('2d');\r\n canvas.width = 300\r\n canvas.height = 234\r\n ctx.drawImage(img.attachments[0].image_url, 0, 0, 300, 234);\r\n document.body.appendChild(canvas);\r\n }\r\n\r\n getPicture(img) {\r\n var canvas = document.createElement('canvas');\r\n var ctx = canvas.getContext('2d');\r\n canvas.width = 300\r\n canvas.height = 234\r\n ctx.drawImage(img.attachments[0].image_url, 0, 0, 300, 234);\r\n document.body.appendChild(canvas);\r\n\r\n }\r\n\r\n\r\n // async ShareEmail(msg){\r\n // // Check if sharing via email is supported\r\n // await Share.share({\r\n // title: msg.u.username,\r\n // text: msg._updatedAt,\r\n // url: msg.attachments[0].image_url,\r\n // dialogTitle: 'Share with buddies',\r\n // });\r\n // }\r\n\r\n async createDirectoryImage() {\r\n await Filesystem.mkdir({\r\n path: IMAGE_DIR,\r\n directory: Directory.Data,\r\n recursive: true\r\n });\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n"]},"metadata":{},"sourceType":"module"}