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

1 line
52 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 { Injectable } from '@angular/core';\nimport { SessionStore } from 'src/app/store/session.service';\nimport { capitalizeTxt } from 'src/plugin/text';\nimport { NfService } from 'src/app/services/chat/nf.service';\nimport { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service';\nimport { showDateDuration } from 'src/plugin/showDateDuration';\nimport { ChatMethodsService } from './chat-methods.service';\nimport { MessageModel } from '../../models/beast-orm';\nimport { AESEncrypt } from '../aesencrypt.service';\nimport { HttpEventType } from '@angular/common/http';\nimport { AttachmentsService } from 'src/app/services/attachments.service';\nimport { NetworkServiceService, ConnectionStatus } from 'src/app/services/network-service.service';\nimport { ChatSystemService } from './chat-system.service';\nimport { v4 as uuidv4 } from 'uuid';\nimport { NotificationsService } from 'src/app/services/notifications.service';\nlet MessageService = class MessageService {\n constructor(NfService, RochetChatConnectorService, ChatMethodsService, AESEncrypt, AttachmentsService, NetworkServiceService, ChatSystemService, notificationService) {\n this.NfService = NfService;\n this.RochetChatConnectorService = RochetChatConnectorService;\n this.ChatMethodsService = ChatMethodsService;\n this.AESEncrypt = AESEncrypt;\n this.AttachmentsService = AttachmentsService;\n this.NetworkServiceService = NetworkServiceService;\n this.ChatSystemService = ChatSystemService;\n this.notificationService = notificationService;\n this.channels = [];\n this.mentions = [];\n this.msg = '';\n this.rid = '';\n this.ts = {};\n this.u = {\n name: '',\n username: '',\n _id: \"\"\n };\n this.t = '';\n this._id = '';\n this.id = ''; // table id\n this.displayType = '';\n this.temporaryData = {};\n this.hasFile = false;\n this.hasSendAttachment = false;\n this.sendAttempt = 0;\n this.uploadingFile = false;\n this.errorUploadingAttachment = false;\n this.loadHistory = false;\n this.duration = '';\n this.localReference = null;\n this.viewed = [];\n this.received = [];\n this.addToDb = false;\n this.messageSend = false;\n this.delate = false;\n this.delateRequest = false;\n this.downloadLoader = false;\n this.downloadAttachments = false;\n this.downloadAttachmentsTemp = 0;\n this.UploadAttachmentsTemp = 0;\n this.manualRetry = false;\n this.functionTimer = null;\n this.earlySave = false;\n }\n setData({\n customFields = {},\n channels,\n mentions,\n msg,\n rid,\n ts,\n u,\n t,\n _id,\n id,\n _updatedAt,\n file,\n attachments,\n temporaryData,\n localReference = 'out-' + uuidv4(),\n viewed = [],\n received = [],\n delate = false,\n delateRequest = false,\n from,\n sendAttempt = 0,\n origin\n }) {\n this.channels = channels || [];\n this.mentions = mentions || [];\n this.msg = msg || \"\";\n this.rid = rid;\n this.ts = ts;\n this.u = u || {\n name: this.usernameToDisplayName(SessionStore.user.UserName),\n username: SessionStore.user.UserName,\n _id: \"\"\n };\n this.t = t;\n this._id = _id || \"\";\n this._updatedAt = _updatedAt || new Date().getTime();\n this.file = file;\n this.temporaryData = temporaryData;\n this.localReference = localReference || null;\n this.id = id;\n this.delate = delate;\n this.delateRequest = delateRequest;\n this.sendAttempt = 0;\n this.origin = origin;\n if (this.attachments?.length >= 1 && attachments?.length >= 1) {\n this.attachments[0] = Object.assign(this.attachments[0], attachments[0]);\n } else {\n this.attachments = attachments;\n }\n this.viewed = [...new Set([...viewed, ...this.viewed])];\n this.received = [...new Set([...received, ...this.received])];\n if (!this.ts) {\n this.messageSend = false;\n } else {\n this.messageSend = true;\n }\n if (this.file) {\n if (this.file.type) {\n if (typeof this.file.type == 'string') {\n this.hasFile = true;\n }\n }\n }\n if (this.hasFile) {\n if (this.file.type != 'application/webtrix') {\n this.displayType = this.file.type.replace('application/', '').toUpperCase();\n }\n }\n if (!this.u.name && this.u.username) {\n const user = this.ChatSystemService.users.find(u => u.username == this.u.username);\n if (user) {\n this.u.name = user.name;\n } else if (this.u.username == SessionStore.user.UserName) {\n this.u.name = SessionStore.user.FullName;\n } else {}\n }\n this.calDateDuration();\n }\n get offline() {\n if (!this._id) {\n return true;\n }\n if (!this.ts) {\n return true;\n }\n return false;\n }\n /**\r\n * Message is on the server\r\n */\n get online() {\n return !this.offline;\n }\n /**\r\n * if Message is already saved on database\r\n */\n get save() {\n return this.id != '';\n }\n usernameToDisplayName(username) {\n try {\n const firstName = capitalizeTxt(username.split('.')[0]);\n const lastName = capitalizeTxt(username.split('.')[1]);\n return firstName + ' ' + lastName;\n } catch (error) {\n return username;\n }\n }\n send() {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (_this.messageSend) {\n return new Promise((resolve, reject) => {\n resolve('solve');\n });\n }\n _this.sendAttempt++;\n _this.manualRetry = false;\n if (!_this.hasFile) {\n const params = {\n roomId: _this.rid,\n msg: _this.msg,\n localReference: _this.localReference\n };\n yield _this.sendRequest(params);\n } else {\n let uploadSuccessfully = yield _this.sendRequestAttachment();\n if (uploadSuccessfully) {\n const params = {\n roomId: _this.rid,\n msg: _this.msg,\n attachments: _this.attachments,\n file: _this.file,\n localReference: _this.localReference\n };\n yield _this.sendRequest(params);\n } else if (_this.RochetChatConnectorService.isLogin == false) {\n _this.RochetChatConnectorService.registerCallback({\n type: 'reConnect',\n funx: function () {\n var _ref = _asyncToGenerator(function* () {\n _this.send().catch(error => {\n console.error(error);\n });\n return true;\n });\n return function funx() {\n return _ref.apply(this, arguments);\n };\n }()\n });\n } else if (_this.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Offline) {\n _this.RochetChatConnectorService.registerCallback({\n type: 'reConnect',\n funx: function () {\n var _ref2 = _asyncToGenerator(function* () {\n yield _this.send().catch(error => {\n console.error(error);\n });\n return true;\n });\n return function funx() {\n return _ref2.apply(this, arguments);\n };\n }()\n });\n } else if (_this.UploadAttachmentsTemp <= 3) {\n setTimeout( /*#__PURE__*/_asyncToGenerator(function* () {\n return yield _this.send();\n }), 3000);\n } else if (_this.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Online) {\n _this.manualRetry = true;\n }\n }\n })();\n }\n sendRequestAttachment() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.uploadingFile = true;\n let uploadSuccessfully = false;\n if (_this2.hasSendAttachment == false) {\n try {\n uploadSuccessfully = yield _this2.NfService.beforeSendAttachment(_this2);\n _this2.UploadAttachmentsTemp++;\n _this2.uploadingFile = false;\n _this2.manualRetry = false;\n _this2.errorUploadingAttachment = false;\n _this2.hasSendAttachment = true;\n _this2.temporaryData = {};\n } catch (error) {\n _this2.uploadingFile = false;\n _this2.errorUploadingAttachment = true;\n _this2.UploadAttachmentsTemp++;\n console.error('beforeSendAttachment error:', error);\n }\n }\n return uploadSuccessfully;\n })();\n }\n sendRequest(params) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (params?.attachments) {\n if (params?.attachments[0]?.image_url) {\n delete params?.attachments[0]?.image_url;\n }\n }\n if (_this3.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Online) {\n if (_this3.msg == '<script></script>') {\n if (_this3.sendAttempt >= 4) {\n _this3.RochetChatConnectorService.send(params).then(ChatMessage => {\n ChatMessage = ChatMessage.message.result;\n clearTimeout(_this3.functionTimer);\n _this3.redefinedMessage(ChatMessage);\n }).catch(error => {\n clearTimeout(_this3.functionTimer);\n console.error(error);\n });\n }\n } else {\n _this3.RochetChatConnectorService.send(params).then(ChatMessage => {\n ChatMessage = ChatMessage.message.result;\n clearTimeout(_this3.functionTimer);\n _this3.redefinedMessage(ChatMessage);\n }).catch(error => {\n clearTimeout(_this3.functionTimer);\n console.error(error);\n });\n }\n _this3.functionTimer = setTimeout(() => {\n _this3.RochetChatConnectorService.registerCallback({\n type: 'Onmessage',\n key: 'ping-pong-message',\n funx: message => {\n if (message.msg == \"ping\") {\n if (_this3.sendAttempt >= 3) {\n _this3.manualRetry = true;\n } else {\n _this3.send();\n }\n return true;\n }\n _this3.saveChanges();\n }\n });\n _this3.RochetChatConnectorService.wsSend({\n message: {\n msg: \"pong\"\n },\n loginRequired: false\n });\n }, 3000);\n } else {\n _this3.RochetChatConnectorService.registerCallback({\n type: 'reConnect',\n funx: function () {\n var _ref4 = _asyncToGenerator(function* () {\n _this3.send().catch(error => {\n console.error(error);\n });\n return true;\n });\n return function funx() {\n return _ref4.apply(this, arguments);\n };\n }()\n });\n }\n })();\n }\n redefinedMessage(ChatMessage, update = true) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n ChatMessage = _this4.NfService.fix_updatedAt(ChatMessage);\n const message = _this4.getChatObj();\n _this4.manualRetry = false;\n _this4.messageSend = true;\n ChatMessage = Object.assign(message, ChatMessage);\n _this4.setData(ChatMessage);\n const roomObject = _this4.ChatSystemService.getRoomById(_this4.rid);\n const users = roomObject.getUsersByStatus('online');\n for (const user of users) {\n _this4.addReceived(user._id);\n }\n if (!roomObject.isGroup) {\n var memeberTosend = _this4.ChatSystemService.getRoomById(_this4.rid).membersExcludeMe;\n _this4.notificationService.ChatSendMessageNotification(memeberTosend[0].username, ChatMessage.u.name, ChatMessage.msg, _this4.rid);\n } else {\n var memeberTosend = _this4.ChatSystemService.getRoomById(_this4.rid).membersExcludeMe;\n var usersNames = [];\n for (let i = 0; i < memeberTosend.length; i++) {\n usersNames.push(memeberTosend[i].username);\n }\n _this4.notificationService.ChatSendMessageNotificationGrup(usersNames, ChatMessage.u.name, ChatMessage.msg, _this4.rid);\n }\n yield _this4.saveChanges();\n })();\n }\n downloadFileMsg() {\n var _this5 = this;\n this.downloadLoader = true;\n let downloadFile = \"\";\n this.AttachmentsService.downloadFile(this.file.guid).subscribe( /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(function* (event) {\n if (event.type === HttpEventType.DownloadProgress) {} else if (event.type === HttpEventType.Response) {\n if (_this5.file.type == \"application/img\") {\n downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));\n } else if (_this5.file.type != \"application/img\") {\n downloadFile = new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '');\n }\n _this5.attachments[0] = {\n image_url: downloadFile,\n name: _this5.attachments[0].name,\n title: _this5.attachments[0].title,\n title_link: downloadFile,\n title_link_download: _this5.attachments[0].title_link_download,\n ts: _this5.attachments[0].ts\n };\n // save the changes to the storage\n _this5.saveChanges();\n _this5.downloadLoader = false;\n _this5.downloadAttachments = true;\n _this5.downloadAttachmentsTemp++;\n }\n });\n return function (_x) {\n return _ref5.apply(this, arguments);\n };\n }(), () => {\n // error\n this.downloadLoader = false;\n this.downloadAttachments = false;\n this.downloadAttachmentsTemp++;\n });\n }\n calDateDuration(date = null) {\n this.duration = showDateDuration(date || this._updatedAt);\n }\n delateStatusFalse() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n _this6.delate = true;\n _this6.saveChanges();\n })();\n }\n addViewed(id) {\n if (this.messageOwner()) {\n let found = this.viewed.find(UserId => UserId == id);\n if (!found) {\n this.viewed.push(id);\n return true;\n }\n }\n return false;\n }\n addReceived(id) {\n if (this.messageOwner()) {\n let found = this.received.find(UserId => UserId == id);\n if (!found) {\n this.received.push(id);\n return true;\n }\n }\n return false;\n }\n delateDB() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n if (!_this7.rowInstance) {\n _this7.rowInstance = yield _this7.getRowInstance();\n }\n yield _this7.rowInstance.delete();\n })();\n }\n isSenderIsNotMe(ChatMessage) {\n return SessionStore.user.ChatData.data.userId != ChatMessage.u._id;\n }\n messageOwner() {\n return SessionStore.user.ChatData.data.userId == this.u._id;\n }\n getChatObj() {\n return {\n channels: this.channels,\n mentions: this.mentions,\n // msg: this.AESEncrypt.encrypt(this.msg, SessionStore.user.UserName),\n sendAttempt: this.sendAttempt,\n msg: this.msg,\n rid: this.rid,\n ts: this.ts,\n u: this.u,\n _id: this._id,\n id: this.id,\n origin: this.origin,\n _updatedAt: this._updatedAt,\n messageSend: this.messageSend,\n offline: this.offline,\n viewed: this.viewed,\n received: this.received,\n localReference: this.localReference,\n attachments: this.attachments,\n file: this.file,\n delate: this.delate\n };\n }\n addMessageDB() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (!_this8.addToDb && _this8.save) {\n _this8.addToDb = true;\n const message = _this8.getChatObj();\n delete message.id;\n const createdMessage = yield MessageModel.create(message);\n _this8.rowInstance = createdMessage;\n _this8.id = createdMessage.id;\n if (_this8.earlySave) {\n _this8.saveChanges();\n }\n }\n })();\n }\n getRowInstance() {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n if (_this9.save) {\n const message = _this9.getChatObj();\n let a;\n if (!message.id) {\n delete message.id;\n }\n if (_this9.localReference) {\n a = yield MessageModel.get({\n localReference: _this9.localReference\n });\n } else if (_this9._id) {\n a = yield MessageModel.get({\n _id: _this9._id\n });\n } else if (_this9.id) {\n a = yield MessageModel.get({\n id: _this9.id\n });\n }\n return a;\n }\n })();\n }\n saveChanges() {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n if (!_this10.rowInstance) {\n _this10.rowInstance = yield _this10.getRowInstance();\n }\n if (_this10.save && _this10.rowInstance) {\n const message = _this10.getChatObj();\n if (!message.id) {\n delete message.id;\n }\n for (const [name, value] of Object.entries(message)) {\n try {\n _this10.rowInstance[name] = value;\n } catch (error) {}\n }\n yield _this10.rowInstance.save();\n } else {\n _this10.earlySave = true;\n }\n })();\n }\n decryptMessage() {\n try {\n // this.msg = this.AESEncrypt.decrypt(this.msg, SessionStore.user.UserName)\n } catch (error) {}\n }\n};\nMessageService.ctorParameters = () => [{\n type: NfService\n}, {\n type: RochetChatConnectorService\n}, {\n type: ChatMethodsService\n}, {\n type: AESEncrypt\n}, {\n type: AttachmentsService\n}, {\n type: NetworkServiceService\n}, {\n type: ChatSystemService\n}, {\n type: NotificationsService\n}];\nMessageService = __decorate([Injectable({\n providedIn: 'root'\n})], MessageService);\nexport { MessageService };","map":{"version":3,"mappings":"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","names":["Injectable","SessionStore","capitalizeTxt","NfService","RochetChatConnectorService","showDateDuration","ChatMethodsService","MessageModel","AESEncrypt","HttpEventType","AttachmentsService","NetworkServiceService","ConnectionStatus","ChatSystemService","v4","uuidv4","NotificationsService","MessageService","constructor","notificationService","name","username","_id","setData","customFields","channels","mentions","msg","rid","ts","u","t","id","_updatedAt","file","attachments","temporaryData","localReference","viewed","received","delate","delateRequest","from","sendAttempt","origin","usernameToDisplayName","user","UserName","Date","getTime","length","Object","assign","Set","messageSend","type","hasFile","displayType","replace","toUpperCase","users","find","FullName","calDateDuration","offline","online","save","firstName","split","lastName","error","send","_this","Promise","resolve","reject","manualRetry","params","roomId","sendRequest","uploadSuccessfully","sendRequestAttachment","isLogin","registerCallback","funx","catch","console","getCurrentNetworkStatus","Offline","UploadAttachmentsTemp","setTimeout","Online","_this2","uploadingFile","hasSendAttachment","beforeSendAttachment","errorUploadingAttachment","image_url","_this3","then","ChatMessage","message","result","clearTimeout","functionTimer","redefinedMessage","key","saveChanges","wsSend","loginRequired","update","_this4","fix_updatedAt","getChatObj","roomObject","getRoomById","getUsersByStatus","addReceived","isGroup","memeberTosend","membersExcludeMe","ChatSendMessageNotification","usersNames","i","push","ChatSendMessageNotificationGrup","downloadFileMsg","downloadLoader","downloadFile","guid","subscribe","event","DownloadProgress","Response","_this5","btoa","Uint8Array","body","reduce","data","byte","String","fromCharCode","title","title_link","title_link_download","downloadAttachments","downloadAttachmentsTemp","date","duration","delateStatusFalse","_this6","addViewed","messageOwner","found","UserId","delateDB","_this7","rowInstance","getRowInstance","delete","isSenderIsNotMe","ChatData","userId","addMessageDB","_this8","addToDb","createdMessage","create","earlySave","_this9","a","get","_this10","value","entries","decryptMessage","providedIn"],"sourceRoot":"","sources":["C:\\Users\\eudes.inacio\\GabineteDigital\\gabinete-digital-fo\\src\\app\\services\\chat\\message.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Message } from 'src/app/models/chatMethod';\r\nimport { SessionStore } from 'src/app/store/session.service';\r\nimport { capitalizeTxt } from 'src/plugin/text';\r\nimport { NfService } from 'src/app/services/chat/nf.service';\r\nimport { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service';\r\nimport { showDateDuration } from 'src/plugin/showDateDuration';\r\nimport { ChatMethodsService } from './chat-methods.service';\r\nimport { MessageModel } from '../../models/beast-orm';\r\nimport { AESEncrypt } from '../aesencrypt.service';\r\nimport { HttpEventType } from '@angular/common/http';\r\nimport { AttachmentsService } from 'src/app/services/attachments.service';\r\nimport { NetworkServiceService , ConnectionStatus} from 'src/app/services/network-service.service';\r\nimport { ChatSystemService } from './chat-system.service';\r\nimport { v4 as uuidv4 } from 'uuid'\r\nimport { NotificationsService } from 'src/app/services/notifications.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageService {\r\n\r\n customFields\r\n channels = []\r\n mentions = []\r\n msg = ''\r\n rid = ''\r\n ts = {}\r\n\r\n u = {\r\n name: '',\r\n username: '',\r\n _id: \"\"\r\n }\r\n\r\n t = ''\r\n _id = ''\r\n id = '' // table id\r\n _updatedAt\r\n file\r\n attachments\r\n displayType = ''\r\n temporaryData: any = {}\r\n hasFile = false\r\n hasSendAttachment = false\r\n sendAttempt = 0\r\n uploadingFile = false\r\n errorUploadingAttachment = false\r\n loadHistory = false\r\n from: 'Offline'|'History'|'stream'| 'send' \r\n duration = ''\r\n localReference = null\r\n viewed: string[] = []\r\n received: string[]= []\r\n addToDb = false\r\n\r\n messageSend = false\r\n delate = false\r\n delateRequest = false\r\n downloadLoader: boolean = false\r\n downloadAttachments = false;\r\n downloadAttachmentsTemp = 0;\r\n UploadAttachmentsTemp = 0;\r\n manualRetry = false\r\n origin: 'history' | 'stream' | 'local'\r\n\r\n rowInstance: MessageModel\r\n\r\n constructor(\r\n private NfService: NfService,\r\n private RochetChatConnectorService: RochetChatConnectorService,\r\n private ChatMethodsService: ChatMethodsService,\r\n private AESEncrypt: AESEncrypt,\r\n private AttachmentsService: AttachmentsService,\r\n private NetworkServiceService: NetworkServiceService,\r\n private ChatSystemService: ChatSystemService,\r\n private notificationService: NotificationsService) {\r\n }\r\n\r\n setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference = 'out-'+uuidv4() , viewed = [], received = [], delate = false, delateRequest =false, from, sendAttempt = 0, origin }:Message) {\r\n\r\n this.channels = channels || []\r\n this.mentions = mentions || []\r\n this.msg = msg || \"\"\r\n this.rid = rid\r\n this.ts = ts\r\n this.u = u || { name: this.usernameToDisplayName(SessionStore.user.UserName), username: SessionStore.user.UserName, _id: \"\"}\r\n this.t = t\r\n this._id = _id || \"\"\r\n this._updatedAt = _updatedAt || new Date().getTime()\r\n this.file = file\r\n this.temporaryData = temporaryData\r\n this.localReference = localReference || null\r\n this.id = id\r\n this.delate = delate\r\n this.delateRequest = delateRequest\r\n this.sendAttempt = 0\r\n this.origin = origin\r\n\r\n if(this.attachments?.length >= 1 && attachments?.length >= 1) {\r\n this.attachments[0] = Object.assign(this.attachments[0], attachments[0])\r\n } else {\r\n this.attachments = attachments\r\n }\r\n\r\n this.viewed = [...new Set([...viewed,...this.viewed])];\r\n this.received = [...new Set([...received,...this.received])];\r\n\r\n if(!this.ts) {\r\n this.messageSend = false\r\n } else {\r\n this.messageSend = true\r\n }\r\n\r\n if (this.file) {\r\n if(this.file.type) {\r\n if(typeof(this.file.type) == 'string') {\r\n this.hasFile = true\r\n }\r\n }\r\n }\r\n\r\n if(this.hasFile) {\r\n if(this.file.type != 'application/webtrix') {\r\n this.displayType = this.file.type.replace('application/','').toUpperCase()\r\n }\r\n }\r\n\r\n if(!this.u.name && this.u.username) {\r\n const user = this.ChatSystemService.users.find((u)=> u.username == this.u.username)\r\n if(user) {\r\n this.u.name = user.name\r\n } else if( this.u.username == SessionStore.user.UserName) {\r\n this.u.name = SessionStore.user.FullName\r\n } else {\r\n }\r\n }\r\n\r\n this.calDateDuration()\r\n }\r\n\r\n\r\n get offline () {\r\n if(!this._id) {\r\n return true\r\n }\r\n\r\n if(!this.ts) {\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n /**\r\n * Message is on the server\r\n */\r\n get online() {\r\n return !this.offline\r\n }\r\n\r\n /**\r\n * if Message is already saved on database\r\n */\r\n get save() {\r\n return this.id != ''\r\n }\r\n\r\n\r\n private usernameToDisplayName(username) {\r\n\r\n try {\r\n const firstName = capitalizeTxt(username.split('.')[0])\r\n const lastName = capitalizeTxt(username.split('.')[1])\r\n return firstName + ' ' + lastName\r\n } catch (error) {\r\n return username\r\n } \r\n\r\n }\r\n\r\n async send(): Promise<any> {\r\n if(this.messageSend) {\r\n return new Promise((resolve, reject) => {\r\n resolve('solve')\r\n })\r\n }\r\n\r\n this.sendAttempt++;\r\n this.manualRetry = false\r\n\r\n if(!this.hasFile) {\r\n\r\n const params = { \r\n roomId:this.rid, \r\n msg:this.msg, \r\n localReference: this.localReference\r\n }\r\n\r\n await this.sendRequest(params)\r\n\r\n } else {\r\n\r\n let uploadSuccessfully = await this.sendRequestAttachment()\r\n\r\n if(uploadSuccessfully) {\r\n\r\n const params = {roomId:this.rid, msg: this.msg, attachments: this.attachments, file: this.file, localReference: this.localReference}\r\n await this.sendRequest(params)\r\n\r\n } else if(this.RochetChatConnectorService.isLogin == false) {\r\n\r\n this.RochetChatConnectorService.registerCallback({\r\n type: 'reConnect',\r\n funx: async () => {\r\n this.send().catch((error) =>{\r\n console.error(error)\r\n })\r\n return true\r\n }\r\n })\r\n\r\n } else if(this.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Offline) {\r\n this.RochetChatConnectorService.registerCallback({\r\n type: 'reConnect',\r\n funx: async ()=> {\r\n \r\n await this.send().catch((error) => {\r\n console.error(error)\r\n })\r\n return true\r\n }\r\n })\r\n } else if (this.UploadAttachmentsTemp <= 3) {\r\n setTimeout(async () => {\r\n return await this.send()\r\n }, 3000)\r\n } else if (this.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Online) {\r\n this.manualRetry = true\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n functionTimer = null;\r\n\r\n async sendRequestAttachment() {\r\n this.uploadingFile = true\r\n\r\n let uploadSuccessfully = false\r\n if(this.hasSendAttachment == false) {\r\n try {\r\n uploadSuccessfully = await this.NfService.beforeSendAttachment(this)\r\n this.UploadAttachmentsTemp++\r\n this.uploadingFile = false\r\n this.manualRetry = false\r\n this.errorUploadingAttachment = false\r\n this.hasSendAttachment = true\r\n this.temporaryData = {}\r\n } catch (error) {\r\n this.uploadingFile = false\r\n this.errorUploadingAttachment = true\r\n this.UploadAttachmentsTemp++\r\n console.error('beforeSendAttachment error:', error)\r\n\r\n }\r\n \r\n }\r\n\r\n return uploadSuccessfully\r\n }\r\n\r\n async sendRequest(params) {\r\n if(params?.attachments) {\r\n if(params?.attachments[0]?.image_url) {\r\n delete params?.attachments[0]?.image_url\r\n }\r\n }\r\n\r\n if(this.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Online) {\r\n\r\n if(this.msg == '<script></script>') {\r\n if(this.sendAttempt >= 4) {\r\n this.RochetChatConnectorService.send(params).then(\r\n (ChatMessage: any) => {\r\n ChatMessage = ChatMessage.message.result\r\n clearTimeout(this.functionTimer);\r\n \r\n this.redefinedMessage(ChatMessage)\r\n }\r\n ).catch((error) => {\r\n clearTimeout(this.functionTimer);\r\n console.error(error)\r\n })\r\n }\r\n\r\n } else {\r\n\r\n this.RochetChatConnectorService.send(params).then(\r\n (ChatMessage: any) => {\r\n ChatMessage = ChatMessage.message.result\r\n clearTimeout(this.functionTimer);\r\n \r\n this.redefinedMessage(ChatMessage)\r\n \r\n }\r\n ).catch((error) => {\r\n clearTimeout(this.functionTimer);\r\n console.error(error)\r\n })\r\n }\r\n \r\n this.functionTimer = setTimeout(() => {\r\n this.RochetChatConnectorService.registerCallback({\r\n type:'Onmessage',\r\n key:'ping-pong-message',\r\n funx:(message: any) => {\r\n if(message.msg == \"ping\") {\r\n if(this.sendAttempt >= 3) {\r\n this.manualRetry = true\r\n } else {\r\n this.send()\r\n }\r\n return true\r\n }\r\n\r\n this.saveChanges()\r\n }\r\n })\r\n\r\n this.RochetChatConnectorService.wsSend({message:{msg:\"pong\"}, loginRequired: false})\r\n\r\n }, 3000)\r\n\r\n } else {\r\n this.RochetChatConnectorService.registerCallback({\r\n type: 'reConnect',\r\n funx: async ()=> {\r\n this.send().catch((error) =>{\r\n console.error(error)\r\n })\r\n return true\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n async redefinedMessage(ChatMessage , update = true) {\r\n ChatMessage = this.NfService.fix_updatedAt(ChatMessage)\r\n\r\n const message = this.getChatObj()\r\n\r\n this.manualRetry = false\r\n this.messageSend = true\r\n\r\n ChatMessage = Object.assign(message, ChatMessage)\r\n this.setData(ChatMessage)\r\n\r\n const roomObject = this.ChatSystemService.getRoomById(this.rid)\r\n const users = roomObject.getUsersByStatus('online')\r\n for(const user of users) {\r\n this.addReceived(user._id)\r\n }\r\n\r\n if(!roomObject.isGroup) {\r\n var memeberTosend = this.ChatSystemService.getRoomById(this.rid).membersExcludeMe\r\n this.notificationService.ChatSendMessageNotification(memeberTosend[0].username,ChatMessage.u.name,ChatMessage.msg,this.rid)\r\n } else {\r\n var memeberTosend = this.ChatSystemService.getRoomById(this.rid).membersExcludeMe\r\n var usersNames = [];\r\n for(let i = 0; i < memeberTosend.length; i++) {\r\n usersNames.push(memeberTosend[i].username)\r\n }\r\n this.notificationService.ChatSendMessageNotificationGrup(usersNames,ChatMessage.u.name,ChatMessage.msg,this.rid)\r\n }\r\n\r\n \r\n await this.saveChanges()\r\n }\r\n\r\n sendNotificaton\r\n\r\n downloadFileMsg() {\r\n\r\n this.downloadLoader = true;\r\n let downloadFile = \"\";\r\n this.AttachmentsService.downloadFile(this.file.guid).subscribe(async (event) => {\r\n\r\n if (event.type === HttpEventType.DownloadProgress) {\r\n\r\n } else if (event.type === HttpEventType.Response) {\r\n if (this.file.type == \"application/img\") {\r\n downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));\r\n } else if (this.file.type != \"application/img\") {\r\n\r\n downloadFile = new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '');\r\n \r\n }\r\n\r\n this.attachments[0] = {\r\n image_url: downloadFile,\r\n name: this.attachments[0].name,\r\n title: this.attachments[0].title,\r\n title_link: downloadFile,\r\n title_link_download: this.attachments[0].title_link_download,\r\n ts: this.attachments[0].ts\r\n }\r\n\r\n // save the changes to the storage\r\n this.saveChanges()\r\n this.downloadLoader = false;\r\n this.downloadAttachments = true\r\n this.downloadAttachmentsTemp++;\r\n }\r\n }, ()=>{\r\n // error\r\n this.downloadLoader = false;\r\n this.downloadAttachments = false\r\n this.downloadAttachmentsTemp++;\r\n });\r\n\r\n }\r\n\r\n private calDateDuration(date = null) {\r\n this.duration = showDateDuration(date || this._updatedAt);\r\n }\r\n\r\n\r\n async delateStatusFalse() {\r\n this.delate = true\r\n this.saveChanges()\r\n }\r\n\r\n addViewed(id: string) {\r\n if(this.messageOwner()) {\r\n let found = this.viewed.find((UserId) => UserId == id)\r\n\r\n if(!found) {\r\n this.viewed.push(id)\r\n return true\r\n }\r\n }\r\n \r\n return false\r\n }\r\n\r\n addReceived(id: string) {\r\n if(this.messageOwner()) {\r\n let found = this.received.find((UserId) => UserId == id)\r\n\r\n if(!found) {\r\n this.received.push(id)\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n async delateDB() {\r\n\r\n if(!this.rowInstance) {\r\n this.rowInstance = await this.getRowInstance()\r\n }\r\n\r\n await this.rowInstance.delete()\r\n }\r\n\r\n\r\n isSenderIsNotMe(ChatMessage) {\r\n return SessionStore.user.ChatData.data.userId != ChatMessage.u._id\r\n }\r\n\r\n messageOwner() {\r\n return SessionStore.user.ChatData.data.userId == this.u._id\r\n }\r\n\r\n getChatObj() {\r\n return {\r\n channels: this.channels,\r\n mentions: this.mentions,\r\n // msg: this.AESEncrypt.encrypt(this.msg, SessionStore.user.UserName),\r\n sendAttempt: this.sendAttempt,\r\n msg:this.msg,\r\n rid: this.rid,\r\n ts: this.ts,\r\n u: this.u,\r\n _id: this._id,\r\n id: this.id,\r\n origin: this.origin,\r\n _updatedAt: this._updatedAt,\r\n messageSend: this.messageSend,\r\n offline: this.offline,\r\n viewed: this.viewed,\r\n received: this.received,\r\n localReference: this.localReference,\r\n attachments: this.attachments,\r\n file: this.file,\r\n delate: this.delate\r\n }\r\n }\r\n\r\n earlySave = false\r\n \r\n async addMessageDB() {\r\n if(!this.addToDb && this.save) {\r\n this.addToDb = true\r\n const message = this.getChatObj()\r\n\r\n delete message.id\r\n const createdMessage = await MessageModel.create(message)\r\n\r\n this.rowInstance = createdMessage\r\n this.id = createdMessage.id\r\n\r\n if(this.earlySave) {\r\n this.saveChanges();\r\n }\r\n }\r\n }\r\n\r\n\r\n async getRowInstance () {\r\n\r\n if(this.save) {\r\n const message = this.getChatObj()\r\n let a\r\n\r\n if(!message.id) {\r\n delete message.id\r\n }\r\n \r\n if (this.localReference) {\r\n a = await MessageModel.get({localReference: this.localReference})\r\n } else if (this._id) {\r\n a = await MessageModel.get({_id: this._id})\r\n } else if(this.id) {\r\n a = await MessageModel.get({id: this.id})\r\n }\r\n\r\n return a\r\n }\r\n \r\n }\r\n\r\n async saveChanges() {\r\n\r\n if(!this.rowInstance) {\r\n this.rowInstance = await this.getRowInstance()\r\n }\r\n\r\n if(this.save && this.rowInstance) {\r\n const message = this.getChatObj()\r\n\r\n if(!message.id) {\r\n delete message.id\r\n }\r\n\r\n for( const [name, value] of Object.entries(message)) {\r\n try {\r\n this.rowInstance[name] = value\r\n } catch (error) {}\r\n }\r\n \r\n await this.rowInstance.save()\r\n \r\n } else {\r\n this.earlySave = true\r\n }\r\n \r\n }\r\n\r\n\tdecryptMessage() {\r\n try {\r\n // this.msg = this.AESEncrypt.decrypt(this.msg, SessionStore.user.UserName)\r\n } catch (error) {}\r\n\t}\r\n\r\n}\r\n"]},"metadata":{},"sourceType":"module"}