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

1 line
59 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 { RoomService } from './room.service';\nimport { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service';\nimport { MessageService } from 'src/app/services/chat/message.service';\nimport { SessionStore } from 'src/app/store/session.service';\nimport { capitalizeTxt } from 'src/plugin/text';\nimport { Storage } from '@ionic/storage';\nimport { Platform } from '@ionic/angular';\nimport { SqliteService } from 'src/app/services/sqlite.service';\nimport { ChatService } from 'src/app/services/chat.service';\nimport { NativeNotificationService } from 'src/app/services/native-notification.service';\nimport { SortService } from '../functions/sort.service';\nimport { NfService } from 'src/app/services/chat/nf.service';\nimport { ChangeProfileService } from '../change-profile.service';\nimport { ChatMethodsService } from './chat-methods.service';\nimport { AESEncrypt } from '../aesencrypt.service';\nimport { AttachmentsService } from 'src/app/services/attachments.service';\nimport { NetworkServiceService } from 'src/app/services/network-service.service';\nimport { ViewedMessageService } from './viewed-message.service';\nimport { NotificationsService } from '../notifications.service';\nlet ChatSystemService = class ChatSystemService {\n constructor(RochetChatConnectorService, storage, platform, sqlservice, NativeNotificationService, sortService, ChatService, NfService, changeProfileService, chatService, ChatMethodsService, AESEncrypt, AttachmentsService, NetworkServiceService, ViewedMessageService, notificationService) {\n var _this = this;\n this.RochetChatConnectorService = RochetChatConnectorService;\n this.storage = storage;\n this.platform = platform;\n this.sqlservice = sqlservice;\n this.NativeNotificationService = NativeNotificationService;\n this.sortService = sortService;\n this.ChatService = ChatService;\n this.NfService = NfService;\n this.changeProfileService = changeProfileService;\n this.chatService = chatService;\n this.ChatMethodsService = ChatMethodsService;\n this.AESEncrypt = AESEncrypt;\n this.AttachmentsService = AttachmentsService;\n this.NetworkServiceService = NetworkServiceService;\n this.ViewedMessageService = ViewedMessageService;\n this.notificationService = notificationService;\n this.dm = {};\n this.group = {};\n this._dm = [];\n this._group = [];\n this.loadingWholeList = false;\n this.dmCount = 0;\n this.groupCount = 0;\n this.currentRoom = null;\n this.users = [];\n this.sessionStore = SessionStore;\n this.delete = [];\n this.loadingUsers = false;\n /**\r\n * @description sort room list by last message date\r\n */\n this.sortRoomList = () => {\n this._dm = this.sortService.sortDate(this._dm, '_updatedAt').reverse();\n this._group = this.sortService.sortDate(this._group, '_updatedAt').reverse();\n };\n this.deleteRoom = roomId => {\n this.delete.push(roomId);\n delete this.group[roomId];\n this._group = this._group.filter(e => e.id != roomId);\n };\n this.getUsers = () => {\n return this.users;\n };\n this.RochetChatConnectorService.registerCallback({\n type: 'reConnect',\n funx: function () {\n var _ref = _asyncToGenerator(function* () {\n /**\r\n * @description when the phone is in the background for a long time it could disconnects from the socket then the socket reconnects automatically,\r\n * when the connection is lost the subscribe is also lost, so we have to subscribe again when reconnection is establish.\r\n */\n yield _this.chatService.refreshtoken();\n yield _this.getUser();\n yield _this.getAllRooms();\n _this.subscribeToRoom();\n //\n _this.getUserStatus();\n if (_this.currentRoom) {\n _this.currentRoom.loadHistory({\n forceUpdate: true\n });\n }\n for (const id in _this.dm) {\n _this.dm[id].hasLoadHistory = false;\n }\n for (const id in _this.group) {\n _this.group[id].hasLoadHistory = false;\n }\n });\n return function funx() {\n return _ref.apply(this, arguments);\n };\n }()\n });\n if (this.sessionStore.user.Inactivity) {\n this.loadChat();\n }\n document.addEventListener('resume', function () {\n if (this._dm?.length == 0 && this._group?.length == 0) {\n this.getAllRooms();\n }\n });\n if (SessionStore.user?.ChatData?.data) {\n this.restoreRooms();\n }\n }\n loadChat() {\n if (SessionStore.user?.ChatData?.data) {\n this.ReLoadChat();\n }\n }\n ReLoadChat() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n yield _this2.restoreUsers();\n yield _this2.chatService.refreshtoken();\n yield _this2.getUser();\n yield _this2.restoreRooms();\n yield _this2.getAllRooms();\n _this2.subscribeToRoom();\n //\n _this2.getUserStatus();\n })();\n }\n clearChat() {\n this.dm = {};\n this.group = {};\n this._dm = [];\n this._group = [];\n this.loadingWholeList = false;\n this.dmCount = 0;\n this.groupCount = 0;\n this.currentRoom = null;\n this.users = [];\n this.storage.remove('Users');\n }\n openRoom(roomId) {\n if (this.currentRoom) {\n this.currentRoom.roomLeave();\n }\n if (this.getDmRoom(roomId)) {\n this.currentRoom = this.getDmRoom(roomId);\n } else if (this.getGroupRoom(roomId)) {\n this.currentRoom = this.getGroupRoom(roomId);\n }\n this.currentRoom.open();\n }\n getRoomById(roomId) {\n if (this.getDmRoom(roomId)) {\n return this.getDmRoom(roomId);\n } else if (this.getGroupRoom(roomId)) {\n return this.getGroupRoom(roomId);\n }\n }\n restoreRooms() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n try {\n const rooms = yield _this3.storage.get('Rooms');\n if (rooms) {\n for (let roomData of rooms.result.update) {\n yield _this3.prepareRoom(roomData);\n }\n }\n } catch (e) {}\n setTimeout(() => {\n _this3.sortRoomList();\n }, 10000);\n })();\n }\n restoreUsers() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n const users = yield _this4.storage.get('Users');\n if (users) {\n _this4.users = users;\n }\n })();\n }\n getAllRooms() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n _this5.loadingWholeList = true;\n var rooms;\n if (_this5.RochetChatConnectorService.isLogin) {\n try {\n rooms = yield _this5.RochetChatConnectorService.getRooms();\n } catch (error) {\n _this5.loadingWholeList = false;\n console.error('chatgetrooms', error);\n }\n try {\n yield _this5.storage.remove('Rooms');\n } catch (e) {}\n }\n let index = 0;\n if (rooms?.result?.update) {\n for (let roomData of rooms.result.update) {\n const roomId = _this5.getRoomId(roomData);\n if (roomData.t == 'd') {\n let error = false;\n let res;\n try {\n res = yield _this5.chatService.getMembers(roomId).toPromise();\n } catch (e) {\n yield _this5.chatService.refreshtoken();\n error = true;\n }\n if (error) {\n res = yield _this5.chatService.getMembers(roomId).toPromise();\n }\n const members = res['members'];\n const users = members.filter(data => data.username != _this5.sessionStore.user.UserName);\n rooms.result.update[index]['members'] = members;\n rooms.result.update[index]['membersExcludeMe'] = users;\n yield _this5.prepareRoom(roomData);\n } else {\n if (roomData.t === 'p') {\n let error = false;\n let res;\n try {\n res = yield _this5.chatService.getGroupMembers(roomId).toPromise();\n } catch (e) {\n yield _this5.chatService.refreshtoken();\n error = true;\n }\n if (error) {\n res = yield _this5.chatService.getGroupMembers(roomId).toPromise();\n }\n const members = res['members'];\n const users = members.filter(data => data.username != _this5.sessionStore.user.UserName);\n rooms.result.update[index]['members'] = members;\n rooms.result.update[index]['membersExcludeMe'] = users;\n yield _this5.prepareRoom(roomData);\n } else {\n let error = false;\n let res;\n try {\n res = yield _this5.chatService.getChannelMembers(roomId).toPromise();\n } catch (e) {\n yield _this5.chatService.refreshtoken();\n error = true;\n }\n if (error) {\n res = yield _this5.chatService.getChannelMembers(roomId).toPromise();\n }\n const members = res['members'];\n const users = members.filter(data => data.username != _this5.sessionStore.user.UserName);\n rooms.result.update[index]['members'] = members;\n rooms.result.update[index]['membersExcludeMe'] = users;\n yield _this5.prepareRoom(roomData);\n }\n }\n index++;\n }\n }\n _this5.loadingWholeList = false;\n yield _this5.storage.set('Rooms', rooms);\n _this5.sortRoomList();\n setTimeout(() => {\n _this5.sortRoomList();\n }, 1000);\n setTimeout(() => {\n _this5.sortRoomList();\n }, 10000);\n })();\n }\n /**\r\n * @description subscribe all room\r\n */\n subscribeToRoom() {\n for (const id in this.dm) {\n this.defaultSubtribe(id);\n }\n for (const id in this.group) {\n this.defaultSubtribe(id);\n }\n this.RochetChatConnectorService.streamNotifyLogged().then(subscription => {});\n this.RochetChatConnectorService.subStreamMessageUser().then(subscription => {});\n }\n /**\r\n * @description when a new room is create, needs to subtribe in order to receive updates\r\n * @param id\r\n * @param roomData\r\n */\n subscribeToRoomUpdate(id, roomData) {\n this.defaultSubtribe(id);\n this.prepareRoom(roomData);\n this.getGroupRoom(id).loadHistory({});\n }\n /**\r\n * @deprecated things a room need to subscribe on\r\n * @param id room id\r\n */\n defaultSubtribe(id) {\n const room = this.getRoomById(id);\n if (!room.subscribeAttempt) {\n room.subscribeAttempt = true;\n this.RochetChatConnectorService.streamRoomMessages(id).then(subscription => {\n room.status.receive.message = true;\n });\n this.RochetChatConnectorService.subStreamNotifyRoom(id, 'typing', false).then(subscription => {\n room.status.receive.typing = true;\n //\n });\n\n this.RochetChatConnectorService.subStreamNotifyRoom(id, 'readMessage', false).then(subscription => {\n room.status.receive.readMessage = true;\n });\n this.RochetChatConnectorService.streamNotifyRoomDeleteMessage(id).then(subscription => {\n room.status.receive.deleteMessage = true;\n });\n }\n }\n fix_updatedAt(message) {\n if (message.result) {\n message.result._updatedAt = message.result._updatedAt['$date'];\n } else if (message._updatedAt) {\n if (message._updatedAt.hasOwnProperty('$date')) {\n message._updatedAt = message._updatedAt['$date'];\n }\n }\n return message;\n }\n /**\r\n * @description create a representation of an room in these instance this.dm, this.group ...\r\n * @param roomData\r\n */\n prepareRoom(roomData) {\n /**\r\n * @description data used to define or create room\r\n */\n roomData = this.fix_updatedAt(roomData);\n const setData = {\n customFields: roomData.customFields,\n id: this.getRoomId(roomData),\n name: this.getRoomName(roomData),\n t: roomData.t,\n lastMessage: this.getRoomLastMessage(roomData),\n _updatedAt: new Date(roomData._updatedAt || roomData._updatedAt['$date']),\n u: roomData.u || {},\n members: roomData.members,\n membersExcludeMe: roomData.membersExcludeMe\n };\n let roomId = this.getRoomId(roomData);\n if (setData.name != 'Rocket Cat' && setData.name != 'general') {\n // create room\n if (!this.roomExist(roomId)) {\n let room = new RoomService(this.RochetChatConnectorService, new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this, this.notificationService), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this, this.ViewedMessageService, this.notificationService);\n room.setData(setData);\n room.receiveMessage();\n room.getAllUsers = this.getUsers;\n room.receiveMessageDelete();\n room.sortRoomList = this.sortRoomList;\n room.chatServiceDeleteRoom = this.deleteRoom;\n room.isGroup = !this.isIndividual(roomData);\n // create individual room\n if (this.isIndividual(roomData)) {\n this.dm[roomId] = room;\n this._dm.push(room);\n this.dmCount++;\n } else {\n // create group room\n this.group[roomId] = room;\n this._group.push(room);\n this.groupCount++;\n }\n this.defaultSubtribe(roomId);\n } else {\n // in this case room is already present, therefor it will only be necessary,\n // to redefine\n if (this.dm[roomId]) {\n this.dm[roomId].setData(setData);\n } else if (this.group[roomId]) {\n this.group[roomId].setData(setData);\n }\n }\n }\n }\n deleteRecently(roomId) {\n return this.delete.includes(roomId);\n }\n roomExist(roomId) {\n return this.dm[roomId]?.id || this.group[roomId]?.id;\n }\n getReceptorName(roomData) {\n try {\n return roomData.usernames.find(e => e != SessionStore.user.UserName);\n } catch (e) {\n return '*';\n }\n }\n /**\r\n * @description update user status. this method is called once only\r\n * @param id user ID\r\n */\n getUserStatus(id) {\n var _this6 = this;\n this.RochetChatConnectorService.getUserStatus( /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (d) {\n const userId = d.fields.args[0][0];\n const username = d.fields.args[0][1];\n const statusNum = d.fields.args[0][2];\n const statusText = _this6.statusNumberToText(statusNum);\n for (const user of _this6.users) {\n if (user._id == userId) {\n user.status = statusText;\n }\n }\n });\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }());\n }\n getUserByName(username) {\n return this.users.find(user => user.username == username);\n }\n /**\r\n * @description convert rocketchat statues num to readable string\r\n * @param text\r\n * @returns\r\n */\n statusNumberToText(text) {\n if (text == '0') {\n return \"offline\";\n } else if (text == '1') {\n return \"online\";\n } else if (text == '2') {\n return \"away\";\n } else if (text == '3') {\n return \"busy\";\n }\n }\n deleteMessage(id) {\n return this.RochetChatConnectorService.deleteMessage(id);\n }\n leaveRoom(id) {\n return this.RochetChatConnectorService.leaveRoom(id);\n }\n hideRoom(id) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n _this7._dm.forEach((md, index) => {\n if (md.id == id) {\n _this7._dm.splice(index, 1);\n delete _this7.dm[id];\n }\n });\n _this7._group.forEach((group, index) => {\n if (group.id == id) {\n _this7._group.splice(index, 1);\n delete _this7.group[id];\n }\n });\n })();\n }\n hidingRoom(id) {\n return this.RochetChatConnectorService.hidingRoom(id).then(() => {\n // this.hideRoom(id)\n });\n }\n addRoomOwner(roomid, userId) {\n return this.RochetChatConnectorService.addRoomOwner(roomid, userId);\n }\n createPrivateRoom(groupName, username, customFields) {\n return this.RochetChatConnectorService.createPrivateRoom(groupName, username, customFields);\n }\n getDmRoom(id) {\n try {\n return this.dm[id];\n } catch (e) {}\n }\n getGroupRoom(id) {\n try {\n return this.group[id];\n } catch (e) {}\n }\n getRoomName(roomData) {\n if (this.isIndividual(roomData)) {\n const names = roomData.usernames;\n const roomName = names.filter((name, index) => {\n return name != SessionStore.user.UserName;\n })[0];\n if (roomName) {\n try {\n const firstName = capitalizeTxt(roomName.split('.')[0]);\n const lastName = capitalizeTxt(roomName.split('.')[1]);\n return firstName + ' ' + lastName;\n } catch (e) {\n return roomData['membersExcludeMe'][0].name;\n }\n } else if (roomData.name) {\n return roomData.name;\n } else {\n return 'Sem nome';\n }\n } else {\n return roomData.fname;\n }\n }\n getRoomId(roomData) {\n return roomData._id;\n }\n getRoomLastMessage(roomData) {\n return roomData.lastMessage;\n }\n isIndividual(roomData) {\n return !roomData.fname;\n }\n getUser() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n _this8.loadingUsers = true;\n let _res;\n try {\n _res = yield _this8.ChatService.getAllUsers().toPromise();\n } catch (error) {\n yield _this8.chatService.refreshtoken();\n _res = yield _this8.ChatService.getAllUsers().toPromise();\n }\n let users = _res['users'].filter(data => data.username != SessionStore.user.UserName);\n users = users.filter(data => !(data.name == 'Rocket.Cat' || data.name == 'Administrator'));\n const userIds = _this8.users.map(user => user._id);\n for (let UserUpdate of users) {\n if (userIds.includes(UserUpdate._id)) {\n for (var index = 0; index < _this8.users.length; index++) {\n if (UserUpdate._id == _this8.users[index]._id) {\n _this8.users[index] = UserUpdate;\n }\n }\n } else {\n _this8.users.push(UserUpdate);\n }\n }\n _this8.users = _this8.users.sort((a, b) => {\n if (a.name < b.name) {\n return -1;\n }\n if (a.name > b.name) {\n return 1;\n }\n return 0;\n });\n yield _this8.storage.set('Users', _this8.users);\n _this8.loadingUsers = false;\n })();\n }\n getUserOfRoom(roomId) {\n return this.RochetChatConnectorService.getUserOfRoom(roomId);\n }\n};\nChatSystemService.ctorParameters = () => [{\n type: RochetChatConnectorService\n}, {\n type: Storage\n}, {\n type: Platform\n}, {\n type: SqliteService\n}, {\n type: NativeNotificationService\n}, {\n type: SortService\n}, {\n type: ChatService\n}, {\n type: NfService\n}, {\n type: ChangeProfileService\n}, {\n type: ChatService\n}, {\n type: ChatMethodsService\n}, {\n type: AESEncrypt\n}, {\n type: AttachmentsService\n}, {\n type: NetworkServiceService\n}, {\n type: ViewedMessageService\n}, {\n type: NotificationsService\n}];\nChatSystemService = __decorate([Injectable({\n providedIn: 'root'\n})], ChatSystemService);\nexport { ChatSystemService };","map":{"version":3,"mappings":"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","names":["Injectable","RoomService","RochetChatConnectorService","MessageService","SessionStore","capitalizeTxt","Storage","Platform","SqliteService","ChatService","NativeNotificationService","SortService","NfService","ChangeProfileService","ChatMethodsService","AESEncrypt","AttachmentsService","NetworkServiceService","ViewedMessageService","NotificationsService","ChatSystemService","constructor","storage","platform","sqlservice","sortService","changeProfileService","chatService","notificationService","_dm","sortDate","reverse","_group","roomId","delete","push","group","filter","e","id","users","registerCallback","type","funx","_this","refreshtoken","getUser","getAllRooms","subscribeToRoom","getUserStatus","currentRoom","loadHistory","forceUpdate","dm","hasLoadHistory","sessionStore","user","Inactivity","loadChat","document","addEventListener","length","ChatData","data","restoreRooms","ReLoadChat","_this2","restoreUsers","clearChat","loadingWholeList","dmCount","groupCount","remove","openRoom","roomLeave","getDmRoom","getGroupRoom","open","getRoomById","rooms","_this3","get","roomData","result","update","prepareRoom","setTimeout","sortRoomList","_this4","_this5","isLogin","getRooms","error","console","index","getRoomId","t","res","getMembers","toPromise","members","username","UserName","getGroupMembers","getChannelMembers","set","defaultSubtribe","streamNotifyLogged","then","subscription","subStreamMessageUser","subscribeToRoomUpdate","room","subscribeAttempt","streamRoomMessages","status","receive","message","subStreamNotifyRoom","typing","readMessage","streamNotifyRoomDeleteMessage","deleteMessage","fix_updatedAt","_updatedAt","hasOwnProperty","setData","customFields","name","getRoomName","lastMessage","getRoomLastMessage","Date","u","membersExcludeMe","roomExist","receiveMessage","getAllUsers","getUsers","receiveMessageDelete","chatServiceDeleteRoom","deleteRoom","isGroup","isIndividual","deleteRecently","includes","getReceptorName","usernames","find","d","userId","fields","args","statusNum","statusText","_this6","statusNumberToText","_id","getUserByName","text","leaveRoom","hideRoom","_this7","forEach","md","splice","hidingRoom","addRoomOwner","roomid","createPrivateRoom","groupName","names","roomName","firstName","split","lastName","fname","_this8","loadingUsers","_res","userIds","map","UserUpdate","sort","a","b","getUserOfRoom","providedIn"],"sourceRoot":"","sources":["C:\\Users\\eudes.inacio\\GabineteDigital\\gabinete-digital-fo\\src\\app\\services\\chat\\chat-system.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { RoomService } from './room.service';\r\nimport { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service';\r\nimport { MessageService } from 'src/app/services/chat/message.service';\r\nimport { SessionStore } from 'src/app/store/session.service';\r\nimport { capitalizeTxt } from 'src/plugin/text';\r\nimport { Update as room } from 'src/app/models/chatMethod';\r\nimport { Storage } from '@ionic/storage';\r\nimport { Platform } from '@ionic/angular';\r\nimport { SqliteService } from 'src/app/services/sqlite.service';\r\nimport { ChatService } from 'src/app/services/chat.service';\r\nimport { NativeNotificationService } from 'src/app/services/native-notification.service';\r\nimport { SortService } from '../functions/sort.service';\r\nimport { chatUser } from 'src/app/models/chatMethod';\r\nimport { NfService } from 'src/app/services/chat/nf.service'\r\nimport { ChangeProfileService } from '../change-profile.service';\r\nimport { ChatMethodsService } from './chat-methods.service';\r\nimport { AESEncrypt } from '../aesencrypt.service'\r\nimport { AttachmentsService } from 'src/app/services/attachments.service';\r\nimport { NetworkServiceService} from 'src/app/services/network-service.service';\r\nimport { ViewedMessageService } from './viewed-message.service'\r\nimport { NotificationsService } from '../notifications.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ChatSystemService {\r\n\r\n dm: {[key: string]: RoomService} = {}\r\n group: {[key: string]: RoomService} = {}\r\n\r\n _dm: RoomService[] = []\r\n _group: RoomService[] = []\r\n\r\n loadingWholeList = false;\r\n\r\n dmCount = 0;\r\n groupCount = 0;\r\n\r\n currentRoom: RoomService = null\r\n users: chatUser[] = []\r\n sessionStore = SessionStore\r\n delete = []\r\n loadingUsers = false\r\n \r\n constructor(\r\n private RochetChatConnectorService: RochetChatConnectorService,\r\n private storage: Storage,\r\n private platform: Platform,\r\n private sqlservice: SqliteService,\r\n private NativeNotificationService: NativeNotificationService,\r\n private sortService: SortService,\r\n private ChatService: ChatService,\r\n private NfService: NfService,\r\n private changeProfileService: ChangeProfileService,\r\n private chatService: ChatService,\r\n private ChatMethodsService:ChatMethodsService,\r\n private AESEncrypt: AESEncrypt,\r\n private AttachmentsService:AttachmentsService,\r\n private NetworkServiceService: NetworkServiceService,\r\n private ViewedMessageService: ViewedMessageService,\r\n private notificationService: NotificationsService\r\n ) {\r\n\r\n this.RochetChatConnectorService.registerCallback({\r\n type: 'reConnect',\r\n funx: async () => {\r\n /**\r\n * @description when the phone is in the background for a long time it could disconnects from the socket then the socket reconnects automatically,\r\n * when the connection is lost the subscribe is also lost, so we have to subscribe again when reconnection is establish.\r\n */\r\n\r\n await this.chatService.refreshtoken();\r\n await this.getUser();\r\n await this.getAllRooms();\r\n this.subscribeToRoom();\r\n //\r\n this.getUserStatus();\r\n\r\n if(this.currentRoom) {\r\n this.currentRoom.loadHistory({forceUpdate: true})\r\n }\r\n\r\n for (const id in this.dm) {\r\n this.dm[id].hasLoadHistory = false\r\n }\r\n\r\n for (const id in this.group) {\r\n this.group[id].hasLoadHistory = false\r\n }\r\n\r\n }\r\n })\r\n\r\n if(this.sessionStore.user.Inactivity) {\r\n this.loadChat();\r\n }\r\n\r\n\r\n document.addEventListener('resume', function () {\r\n if(this._dm?.length == 0 && this._group?.length == 0) {\r\n this.getAllRooms();\r\n }\r\n });\r\n\r\n\r\n if(SessionStore.user?.ChatData?.data) {\r\n this.restoreRooms();\r\n }\r\n\r\n }\r\n\r\n loadChat() {\r\n if(SessionStore.user?.ChatData?.data) {\r\n this.ReLoadChat()\r\n }\r\n }\r\n\r\n private async ReLoadChat() {\r\n\r\n await this.restoreUsers();\r\n await this.chatService.refreshtoken();\r\n await this.getUser();\r\n await this.restoreRooms();\r\n await this.getAllRooms();\r\n this.subscribeToRoom();\r\n\r\n //\r\n this.getUserStatus();\r\n }\r\n\r\n clearChat() {\r\n this.dm = {}\r\n this.group = {}\r\n this._dm = []\r\n this._group = []\r\n\r\n this.loadingWholeList = false;\r\n\r\n this.dmCount = 0;\r\n this.groupCount = 0;\r\n\r\n this.currentRoom = null\r\n this.users = []\r\n this.storage.remove('Users');\r\n }\r\n\r\n openRoom(roomId) {\r\n\r\n if(this.currentRoom) {\r\n this.currentRoom.roomLeave()\r\n }\r\n\r\n if(this.getDmRoom(roomId)) {\r\n this.currentRoom = this.getDmRoom(roomId)\r\n } else if(this.getGroupRoom(roomId)) {\r\n this.currentRoom = this.getGroupRoom(roomId)\r\n }\r\n\r\n this.currentRoom.open()\r\n\r\n }\r\n\r\n getRoomById(roomId) {\r\n if(this.getDmRoom(roomId)) {\r\n return this.getDmRoom(roomId)\r\n } else if(this.getGroupRoom(roomId)) {\r\n return this.getGroupRoom(roomId)\r\n }\r\n }\r\n\r\n async restoreRooms() {\r\n\r\n try {\r\n const rooms = await this.storage.get('Rooms');\r\n\r\n if(rooms) {\r\n for (let roomData of rooms.result.update) { \r\n await this.prepareRoom(roomData);\r\n }\r\n }\r\n } catch(e){}\r\n\r\n setTimeout(() => {\r\n this.sortRoomList()\r\n }, 10000)\r\n\r\n }\r\n\r\n async restoreUsers () {\r\n const users = await this.storage.get('Users');\r\n\r\n if(users) {\r\n this.users = users\r\n\r\n }\r\n }\r\n\r\n async getAllRooms () {\r\n this.loadingWholeList = true\r\n var rooms;\r\n\r\n if(this.RochetChatConnectorService.isLogin) {\r\n try {\r\n rooms = await this.RochetChatConnectorService.getRooms();\r\n } catch (error) {\r\n this.loadingWholeList = false\r\n console.error('chatgetrooms',error)\r\n }\r\n try {\r\n await this.storage.remove('Rooms');\r\n } catch(e) {} \r\n }\r\n\r\n let index = 0\r\n\r\n if(rooms?.result?.update) {\r\n for (let roomData of rooms.result.update) {\r\n\r\n const roomId = this.getRoomId(roomData);\r\n\r\n if(roomData.t == 'd') {\r\n \r\n let error = false\r\n let res;\r\n\r\n try {\r\n res = await this.chatService.getMembers(roomId).toPromise();\r\n } catch (e) {\r\n await this.chatService.refreshtoken();\r\n error = true\r\n }\r\n\r\n if(error) {\r\n res = await this.chatService.getMembers(roomId).toPromise();\r\n }\r\n \r\n \r\n const members = res['members'];\r\n const users = members.filter(data => data.username != this.sessionStore.user.UserName);\r\n rooms.result.update[index]['members'] = members\r\n rooms.result.update[index]['membersExcludeMe'] = users\r\n \r\n await this.prepareRoom(roomData);\r\n } else {\r\n if (roomData.t === 'p') {\r\n let error = false\r\n let res;\r\n\r\n try {\r\n res = await this.chatService.getGroupMembers(roomId).toPromise()\r\n } catch (e) {\r\n await this.chatService.refreshtoken();\r\n error = true\r\n }\r\n \r\n if(error) {\r\n res = await this.chatService.getGroupMembers(roomId).toPromise()\r\n }\r\n\r\n const members = res['members'];\r\n const users = members.filter(data => data.username != this.sessionStore.user.UserName);\r\n \r\n rooms.result.update[index]['members'] = members\r\n rooms.result.update[index]['membersExcludeMe'] = users\r\n \r\n await this.prepareRoom(roomData);\r\n \r\n }\r\n else {\r\n\r\n let error = false\r\n let res;\r\n\r\n try {\r\n res = await this.chatService.getChannelMembers(roomId).toPromise()\r\n\r\n } catch (e) {\r\n await this.chatService.refreshtoken();\r\n error = true\r\n }\r\n \r\n if(error) {\r\n res = await this.chatService.getChannelMembers(roomId).toPromise()\r\n }\r\n\r\n\r\n const members = res['members'];\r\n const users = members.filter(data => data.username != this.sessionStore.user.UserName);\r\n \r\n rooms.result.update[index]['members'] = members\r\n rooms.result.update[index]['membersExcludeMe'] = users\r\n await this.prepareRoom(roomData);\r\n }\r\n }\r\n \r\n index++;\r\n }\r\n }\r\n\r\n this.loadingWholeList = false\r\n await this.storage.set('Rooms', rooms);\r\n\r\n this.sortRoomList()\r\n\r\n setTimeout(() => {\r\n this.sortRoomList()\r\n }, 1000)\r\n\r\n setTimeout(() => {\r\n this.sortRoomList()\r\n }, 10000)\r\n\r\n }\r\n\r\n /**\r\n * @description sort room list by last message date\r\n */\r\n sortRoomList = () => {\r\n\r\n this._dm = this.sortService.sortDate(this._dm,'_updatedAt').reverse()\r\n this._group = this.sortService.sortDate(this._group,'_updatedAt').reverse()\r\n }\r\n\r\n /**\r\n * @description subscribe all room\r\n */\r\n subscribeToRoom() {\r\n\r\n for (const id in this.dm) {\r\n this.defaultSubtribe(id)\r\n }\r\n\r\n for (const id in this.group) {\r\n this.defaultSubtribe(id)\r\n }\r\n\r\n this.RochetChatConnectorService.streamNotifyLogged().then((subscription => {}))\r\n\r\n this.RochetChatConnectorService.subStreamMessageUser().then((subscription => {}))\r\n }\r\n\r\n /**\r\n * @description when a new room is create, needs to subtribe in order to receive updates\r\n * @param id\r\n * @param roomData\r\n */\r\n subscribeToRoomUpdate(id, roomData) {\r\n\r\n this.defaultSubtribe(id);\r\n\r\n this.prepareRoom(roomData);\r\n\r\n this.getGroupRoom(id).loadHistory({});\r\n\r\n }\r\n\r\n\r\n /**\r\n * @deprecated things a room need to subscribe on\r\n * @param id room id\r\n */\r\n private defaultSubtribe(id: any) {\r\n \r\n const room = this.getRoomById(id);\r\n \r\n if(!room.subscribeAttempt) {\r\n room.subscribeAttempt = true;\r\n \r\n this.RochetChatConnectorService.streamRoomMessages(id).then((subscription) => {\r\n room.status.receive.message = true;\r\n })\r\n \r\n this.RochetChatConnectorService.subStreamNotifyRoom(id, 'typing', false).then((subscription) => {\r\n room.status.receive.typing = true;\r\n //\r\n })\r\n \r\n this.RochetChatConnectorService.subStreamNotifyRoom(id, 'readMessage', false).then((subscription) => {\r\n room.status.receive.readMessage = true;\r\n })\r\n \r\n this.RochetChatConnectorService.streamNotifyRoomDeleteMessage(id).then((subscription) => {\r\n room.status.receive.deleteMessage = true;\r\n })\r\n } \r\n\r\n }\r\n\r\n private fix_updatedAt(message) {\r\n if (message.result) {\r\n message.result._updatedAt = message.result._updatedAt['$date']\r\n } else if(message._updatedAt) {\r\n if(message._updatedAt.hasOwnProperty('$date')) {\r\n message._updatedAt = message._updatedAt['$date']\r\n }\r\n }\r\n return message\r\n }\r\n\r\n /**\r\n * @description create a representation of an room in these instance this.dm, this.group ...\r\n * @param roomData\r\n */\r\n prepareRoom(roomData) {\r\n\r\n\r\n /**\r\n * @description data used to define or create room\r\n */\r\n\r\n\r\n roomData = this.fix_updatedAt(roomData)\r\n const setData = {\r\n customFields: roomData.customFields,\r\n id: this.getRoomId(roomData),\r\n name: this.getRoomName(roomData),\r\n t: roomData.t,\r\n lastMessage: this.getRoomLastMessage(roomData),\r\n _updatedAt: new Date( roomData._updatedAt || roomData._updatedAt['$date']),\r\n u : roomData.u || {},\r\n members: roomData.members,\r\n membersExcludeMe: roomData.membersExcludeMe\r\n }\r\n\r\n let roomId = this.getRoomId(roomData);\r\n\r\n if (setData.name != 'Rocket Cat' && setData.name != 'general' ) {\r\n // create room\r\n if(!this.roomExist(roomId)) {\r\n let room:RoomService = new RoomService(this.RochetChatConnectorService, new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this,this.notificationService), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this, this.ViewedMessageService,this.notificationService)\r\n room.setData(setData)\r\n room.receiveMessage()\r\n room.getAllUsers = this.getUsers\r\n room.receiveMessageDelete();\r\n room.sortRoomList = this.sortRoomList\r\n room.chatServiceDeleteRoom = this.deleteRoom\r\n room.isGroup = !this.isIndividual(roomData)\r\n\r\n // create individual room\r\n if(this.isIndividual(roomData)) {\r\n\r\n this.dm[roomId] = room\r\n this._dm.push(room)\r\n this.dmCount++\r\n\r\n } else {\r\n // create group room\r\n\r\n this.group[roomId] = room\r\n this._group.push(room)\r\n this.groupCount++\r\n\r\n }\r\n\r\n this.defaultSubtribe(roomId)\r\n } else {\r\n // in this case room is already present, therefor it will only be necessary,\r\n // to redefine\r\n\r\n if(this.dm[roomId]) {\r\n this.dm[roomId].setData(setData)\r\n } else if(this.group[roomId]) {\r\n this.group[roomId].setData(setData)\r\n }\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n deleteRoom =(roomId) => {\r\n\r\n this.delete.push(roomId)\r\n delete this.group[roomId];\r\n this._group = this._group.filter((e)=> e.id != roomId); \r\n }\r\n\r\n deleteRecently(roomId) {\r\n return this.delete.includes(roomId)\r\n }\r\n\r\n roomExist(roomId) {\r\n return this.dm[roomId]?.id || this.group[roomId]?.id\r\n }\r\n\r\n getReceptorName(roomData) {\r\n try {\r\n return roomData.usernames.find((e)=> e != SessionStore.user.UserName)\r\n } catch(e) {\r\n return '*'\r\n }\r\n }\r\n\r\n /**\r\n * @description update user status. this method is called once only\r\n * @param id user ID\r\n */\r\n private getUserStatus(id?:string) {\r\n\r\n this.RochetChatConnectorService.getUserStatus(async (d) => {\r\n\r\n const userId = d.fields.args[0][0]\r\n const username = d.fields.args[0][1]\r\n const statusNum = d.fields.args[0][2]\r\n\r\n const statusText = this.statusNumberToText(statusNum)\r\n\r\n for ( const user of this.users) {\r\n if(user._id == userId) {\r\n user.status = statusText\r\n }\r\n }\r\n\r\n })\r\n }\r\n\r\n getUserByName(username) {\r\n return this.users.find((user)=> user.username == username)\r\n }\r\n\r\n /**\r\n * @description convert rocketchat statues num to readable string\r\n * @param text\r\n * @returns\r\n */\r\n statusNumberToText(text) {\r\n if(text == '0') {\r\n return \"offline\"\r\n }\r\n else if(text == '1') {\r\n return \"online\"\r\n }\r\n else if(text == '2') {\r\n return \"away\"\r\n }\r\n else if(text == '3') {\r\n return \"busy\"\r\n }\r\n }\r\n\r\n\r\n deleteMessage(id?) {\r\n return this.RochetChatConnectorService.deleteMessage(id);\r\n }\r\n\r\n leaveRoom(id?) {\r\n return this.RochetChatConnectorService.leaveRoom(id);\r\n }\r\n\r\n async hideRoom(id) {\r\n this._dm.forEach((md, index)=>{\r\n if(md.id == id) {\r\n this._dm.splice(index, 1)\r\n delete this.dm[id]\r\n }\r\n });\r\n\r\n this._group.forEach((group, index)=>{\r\n if(group.id == id) {\r\n this._group.splice(index, 1)\r\n delete this.group[id]\r\n }\r\n })\r\n }\r\n\r\n hidingRoom(id?) {\r\n\r\n return this.RochetChatConnectorService.hidingRoom(id).then(()=>{\r\n // this.hideRoom(id)\r\n })\r\n\r\n }\r\n\r\n addRoomOwner(roomid, userId) {\r\n return this.RochetChatConnectorService.addRoomOwner(roomid, userId);\r\n }\r\n\r\n createPrivateRoom(groupName, username, customFields){\r\n return this.RochetChatConnectorService.createPrivateRoom(groupName, username, customFields);\r\n }\r\n\r\n getDmRoom(id): RoomService {\r\n try {\r\n return this.dm[id]\r\n } catch(e) {}\r\n }\r\n\r\n getGroupRoom(id): RoomService {\r\n try {\r\n return this.group[id]\r\n } catch(e) {}\r\n }\r\n\r\n getRoomName(roomData: room): string {\r\n if(this.isIndividual(roomData)) {\r\n const names: String[] = roomData.usernames\r\n const roomName = names.filter((name, index)=>{\r\n return name != SessionStore.user.UserName\r\n })[0]\r\n\r\n if(roomName) {\r\n try {\r\n const firstName = capitalizeTxt(roomName.split('.')[0])\r\n const lastName = capitalizeTxt(roomName.split('.')[1])\r\n return firstName + ' ' + lastName\r\n } catch(e) {\r\n return roomData['membersExcludeMe'][0].name\r\n }\r\n\r\n } else if(roomData.name) {\r\n return roomData.name\r\n } else {\r\n return 'Sem nome'\r\n }\r\n\r\n \r\n } else {\r\n return roomData.fname\r\n }\r\n }\r\n\r\n getRoomId(roomData:room) {\r\n return roomData._id\r\n }\r\n\r\n getRoomLastMessage(roomData: room):any {\r\n return roomData.lastMessage\r\n }\r\n\r\n private isIndividual(roomData: room) {\r\n return !roomData.fname\r\n }\r\n\r\n getUsers = () => {\r\n return this.users\r\n }\r\n\r\n async getUser() {\r\n\r\n this.loadingUsers = true\r\n let _res\r\n\r\n try {\r\n _res = await this.ChatService.getAllUsers().toPromise();\r\n } catch (error) {\r\n await this.chatService.refreshtoken();\r\n _res = await this.ChatService.getAllUsers().toPromise();\r\n }\r\n\r\n let users: chatUser[] = _res['users'].filter(data => data.username != SessionStore.user.UserName);\r\n\r\n users = users.filter((data) => !(data.name == 'Rocket.Cat' || data.name == 'Administrator'))\r\n\r\n const userIds = this.users.map((user) => user._id)\r\n\r\n for(let UserUpdate of users) {\r\n if(userIds.includes(UserUpdate._id)) {\r\n for (var index = 0; index < this.users.length; index++) {\r\n if(UserUpdate._id == this.users[index]._id) {\r\n this.users[index] = UserUpdate\r\n }\r\n }\r\n } else {\r\n this.users.push(UserUpdate)\r\n }\r\n }\r\n\r\n this.users = this.users.sort((a,b) => {\r\n if(a.name < b.name) {\r\n return -1;\r\n }\r\n if(a.name > b.name) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n await this.storage.set('Users',this.users);\r\n this.loadingUsers = false\r\n\r\n }\r\n\r\n getUserOfRoom(roomId){\r\n return this.RochetChatConnectorService.getUserOfRoom(roomId);\r\n }\r\n\r\n}\r\n"]},"metadata":{},"sourceType":"module"}