diff --git a/src/app/modals/profile/profile.page.html b/src/app/modals/profile/profile.page.html index 0b4d029e5..7b4c9a65b 100644 --- a/src/app/modals/profile/profile.page.html +++ b/src/app/modals/profile/profile.page.html @@ -45,7 +45,8 @@
- {{notificationdata.length}} novas notificações + {{notificationdata.length}} novas notificações + 0 novas notificações diff --git a/src/app/pages/chat/chat.page.html b/src/app/pages/chat/chat.page.html index 27c49e4f1..c08544c4c 100644 --- a/src/app/pages/chat/chat.page.html +++ b/src/app/pages/chat/chat.page.html @@ -37,6 +37,7 @@ +
diff --git a/src/app/pages/chat/chat.page.ts b/src/app/pages/chat/chat.page.ts index 636c72896..7af4f7fa5 100644 --- a/src/app/pages/chat/chat.page.ts +++ b/src/app/pages/chat/chat.page.ts @@ -125,6 +125,8 @@ export class ChatPage implements OnInit { this.showLoader = true; + this.segment = 'Contactos' + } ngOnInit() { @@ -320,7 +322,6 @@ export class ChatPage implements OnInit { async setIntervenient(data) { this.taskParticipants = removeDuplicate(data) - } async setIntervenientCC(data) { @@ -339,12 +340,11 @@ export class ChatPage implements OnInit { } onSegmentChange() { - //this.load(); + this.wsChatMethodsService.getAllRooms(); } doRefresh(event) { setTimeout(() => { - //this.load(); event.target.complete(); }, 1000); } @@ -357,7 +357,6 @@ export class ChatPage implements OnInit { }); } - getDirectMessagesDB() { if (this.platform.is('desktop') || this.platform.is('mobileweb')) { this.storageservice.get("rooms").then((rooms) =>{ diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index 092058387..980185f06 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -150,7 +150,6 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { }) - //this.loadFiles(); } setStatus(status: string) { diff --git a/src/app/pages/chat/messages/contacts/contacts.page.ts b/src/app/pages/chat/messages/contacts/contacts.page.ts index 1c4bc1b2b..2e0777fdf 100644 --- a/src/app/pages/chat/messages/contacts/contacts.page.ts +++ b/src/app/pages/chat/messages/contacts/contacts.page.ts @@ -104,7 +104,6 @@ export class ContactsPage implements OnInit { this.room = res['room']; - await this.WsChatMethodsService.getAllRooms(); this.getDirectMessage(this.room._id); }); @@ -148,7 +147,6 @@ export class ContactsPage implements OnInit { /* this.getDirectMessage(this.room._id); */ - /* const modal = await this.modalController.create({ component: MessagesPage, cssClass: 'group-messages', diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts index 2d78790c8..0a55bfca5 100644 --- a/src/app/pages/chat/messages/messages.page.ts +++ b/src/app/pages/chat/messages/messages.page.ts @@ -126,7 +126,6 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { private sqlservice: SqliteService, public wsChatMethodsService: WsChatMethodsService, private AttachmentsService: AttachmentsService, - private CameraService: CameraService, private processesService: ProcessesService, private storage: Storage, @@ -150,7 +149,6 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { } - this.wsChatMethodsService.getDmRoom(this.roomId).loadHistory({}) this.wsChatMethodsService.getDmRoom(this.roomId).scrollDown = this.scrollToBottomClicked this.wsChatMethodsService.openRoom(this.roomId) diff --git a/src/app/pages/login/login.page.ts b/src/app/pages/login/login.page.ts index 74519ab76..6a576a779 100644 --- a/src/app/pages/login/login.page.ts +++ b/src/app/pages/login/login.page.ts @@ -13,7 +13,11 @@ import { ThemeService } from 'src/app/services/theme.service'; import { StorageService } from 'src/app/services/storage.service'; import { PermissionService } from 'src/app/services/permission.service'; import { PermissionList } from 'src/app/models/permission/permissionList'; -import { MessageModel, DeleteMessageModel } from '../../models/beast-orm' +import { MessageModel, DeleteMessageModel } from '../../models/beast-orm'; +import { WsChatService } from 'src/app/services/chat/ws-chat.service'; +import { Storage } from '@ionic/storage'; +import { WsChatMethodsService } from 'src/app/services/chat/ws-chat-methods.service'; +import { ChatService } from 'src/app/services/chat.service'; @Component({ selector: 'app-login', templateUrl: './login.page.html', @@ -46,6 +50,10 @@ export class LoginPage implements OnInit { public ThemeService: ThemeService, private storageservice: StorageService, public p: PermissionService, + private WsChatService: WsChatService, + private storage: Storage, + public WsChatMethodsService: WsChatMethodsService, + private ChatService: ChatService ) {} ngOnInit() { @@ -124,6 +132,7 @@ export class LoginPage implements OnInit { await this.authService.loginChat(attempt.ChatData.data); await this.authService.loginToChatWs(); + this.ChatService.setheader() } @@ -134,7 +143,9 @@ export class LoginPage implements OnInit { } else { + this.WsChatService.logout(); this.clearStoreService.clear(); + this.WsChatMethodsService.clearChat(); SessionStore.delete(); window.localStorage.clear(); await MessageModel.deleteAll() @@ -148,6 +159,7 @@ export class LoginPage implements OnInit { if(attempt.ChatData) { await this.authService.loginChat(attempt.ChatData.data); await this.authService.loginToChatWs(); + this.ChatService.setheader() } this.getToken(); diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index c55f09766..908324f5c 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -20,7 +20,7 @@ import { RoomService } from './chat/room.service'; import { Storage } from '@ionic/storage'; import { InitialsService } from './functions/initials.service'; import { PermissionService } from './permission.service'; - +import { WsChatMethodsService } from 'src/app/services/chat/ws-chat-methods.service'; @Injectable({ providedIn: 'root' }) @@ -48,7 +48,8 @@ export class AuthService { private AttachmentsService: AttachmentsService, private storage: Storage, private initialsService: InitialsService, - public p: PermissionService, ) { + public p: PermissionService, + public WsChatMethodsService: WsChatMethodsService, ) { this.headers = new HttpHeaders(); @@ -201,6 +202,11 @@ export class AuthService { this.WsChatService.setStatus('online') + + setTimeout(() => { + this.WsChatMethodsService.getAllRooms(); + }, 200); + // alert('wsLogin') }).catch((message) => { diff --git a/src/app/services/chat.service.ts b/src/app/services/chat.service.ts index e21c11ab5..70978415c 100644 --- a/src/app/services/chat.service.ts +++ b/src/app/services/chat.service.ts @@ -1,14 +1,13 @@ import { HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { AuthService } from './auth.service'; import { HttpService } from './http.service'; import { StorageService } from './storage.service'; -import { HttpClient, HttpHeaderResponse } from '@angular/common/http'; +import { HttpClient } from '@angular/common/http'; import { environment } from 'src/environments/environment'; import { Storage } from '@ionic/storage'; import { PermissionService } from './permission.service'; import { SessionStore } from '../store/session.service'; - +import { ChangeProfileService } from 'src/app/services/change-profile.service'; @Injectable({ providedIn: 'root' }) @@ -24,19 +23,21 @@ export class ChatService { constructor( private http: HttpClient, private httpService: HttpService, - private authService: AuthService, private storage: Storage, private storageService: StorageService, - public p: PermissionService) { + public p: PermissionService, + private changeProfileService: ChangeProfileService,) { - this.setheader() + this.changeProfileService.registerCallback(() => { + this.setheader(); + }) } getDocumentDetails(url: string) { let headersc = new HttpHeaders(); - headersc = headersc.set('X-User-Id', this.loggedUserChat['data'].userId); - headersc = headersc.set('X-Auth-Token', this.loggedUserChat['data'].authToken); + headersc = headersc.set('X-User-Id', SessionStore.user.ChatData.data.userId); + headersc = headersc.set('X-Auth-Token', SessionStore.user.ChatData.data.authToken); headersc = headersc.set('Sec-Fetch-Dest', 'attachment'); headersc = headersc.set('Sec-Fetch-Mode', 'navigate'); headersc = headersc.set('Cookie', 'rc_uid=fsMwcNdufWvdnChj7'); @@ -342,7 +343,6 @@ export class ChatService { setheader() { try { if (this.p.userPermission(this.p.permissionList.Chat.access)) { - this.loggedUserChat = this.authService.ValidatedUserChat; this.headers = new HttpHeaders(); if (this.p.userPermission(this.p.permissionList.Chat.access)) { @@ -360,24 +360,30 @@ export class ChatService { } refreshtoken() { - this.headers = this.headers.set('Authorization', SessionStore.user.BasicAuthKey); - let options = { - headers: this.headers - }; - return this.http.get(environment.apiURL + 'UserAuthentication/RegenereChatToken', options).subscribe(async res => { - let data = { - status: res['status'], - data: { - userId: res['data'].userId, - authToken: res['data'].authToken + + if(this.headers) { + this.headers = this.headers.set('Authorization', SessionStore.user.BasicAuthKey); + let options = { + headers: this.headers + }; + return this.http.get(environment.apiURL + 'UserAuthentication/RegenereChatToken', options).subscribe(async res => { + let data = { + status: res['status'], + data: { + userId: res['data'].userId, + authToken: res['data'].authToken + } } - } - SessionStore.user.ChatData = data - SessionStore.save() + SessionStore.user.ChatData = data + SessionStore.save() + this.setheader() + // console.log(res) + // console.log(SessionStore.user.ChatData) + }); + } else { this.setheader() - // console.log(res) - // console.log(SessionStore.user.ChatData) - }); + } + } } diff --git a/src/app/services/chat/message.service.ts b/src/app/services/chat/message.service.ts index a2603d28c..c0ee74133 100644 --- a/src/app/services/chat/message.service.ts +++ b/src/app/services/chat/message.service.ts @@ -77,7 +77,7 @@ export class MessageService { this.ts = ts this.u = u || { name: this.usernameToDisplayName(SessionStore.user.UserName), username: SessionStore.user.UserName, _id: ""} this.t = t - this._id = _id + this._id = _id || "" this._updatedAt = _updatedAt || new Date().getTime() this.file = file this.temporaryData = temporaryData @@ -310,7 +310,7 @@ export class MessageService { async addMessageDB() { if(!this.addToDb) { - this.addToDb= true + this.addToDb = true const message = this.getChatObj() delete message.id diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts index 314f640d5..1969b7d7f 100644 --- a/src/app/services/chat/room.service.ts +++ b/src/app/services/chat/room.service.ts @@ -39,6 +39,7 @@ export class RoomService { name = '' _updatedAt = {} hasLoadHistory = false + hasLoadHistoryMessageRF = [] restoreFromOffline = false duration = '' isTyping = false @@ -179,7 +180,7 @@ export class RoomService { if(difference < 0) { - this.deleteRoom() + this.deleteRoom(); } else { setTimeout(() => { @@ -236,18 +237,20 @@ export class RoomService { let IncomingChatMessageArgs = IncomingChatMessage.fields.args[0] let ChatMessage : ChatMessageInterface = this.fix_updatedAt(IncomingChatMessageArgs) - if(!this.messagesLocalReference.includes(ChatMessage.localReference)) { + const allMessageIds = this.messages.map((e)=> e._id); + + if(!this.messagesLocalReference.includes(ChatMessage.localReference) && !allMessageIds.includes(ChatMessage?._id)) { this.messagesLocalReference.push(ChatMessage.localReference); - const message = await this.prepareCreate({message: ChatMessage, save: true}) + const message = await this.prepareCreate({message: ChatMessage, save: true}); message.messageSend = true - this.lastMessage = message - this.calDateDuration(ChatMessage._updatedAt) + this.lastMessage = message; + this.calDateDuration(ChatMessage._updatedAt); if (message.t == 'r') { - this.name = message.msg + this.name = message.msg; } if(this.isSenderIsNotMe(ChatMessage)) { @@ -312,19 +315,17 @@ export class RoomService { this.otherUserType = args[1] this.readAllMessage() - // - // alert(JSON.stringify(args)) + } else if(args[0]?.method == 'viewMessage' || args[1]?.method == 'viewMessage') { this.readAllMessage() } else if(args[0]?.method == 'deleteMessage' || args[1]?.method == 'deleteMessage') { - // alert('delete') - // + this.deleteMessage(args[1]?.method?._id) } else { - // alert('miss') + } @@ -468,7 +469,7 @@ export class RoomService { deleteAll() { - this.messages.forEach((message)=>{ + this.messages.forEach((message) => { if(message?._id) { this.sendDeleteRequest(message._id) } @@ -477,7 +478,7 @@ export class RoomService { async delateMessageToSendToOthers(userId) { - const deleteMessage = await DeleteMessageModel.all() + const deleteMessage = await DeleteMessageModel.all(); const toSend = deleteMessage.filter((DeleteMessage:string[])=> ! DeleteMessage.includes(userId)) @@ -493,8 +494,8 @@ export class RoomService { this.WsChatService.deleteMessage(msgId).then(async() => { message.delateRequest = true - await message.save() - this.deleteMessage(msgId) + await message.save(); + this.deleteMessage(msgId); }) } else { @@ -516,7 +517,7 @@ export class RoomService { */ async send({file = null, attachments = null, temporaryData = {}}) { - const localReference = uuidv4() + const localReference = uuidv4(); let offlineChatMessage = { rid: this.id, @@ -529,9 +530,9 @@ export class RoomService { this.message= '' + this.messagesLocalReference.push(localReference) const message: MessageService = await this.prepareCreate({message:offlineChatMessage, save: environment.chatOffline}) - this.messagesLocalReference.push(localReference) await message.addMessageDB() message.send() @@ -547,7 +548,9 @@ export class RoomService { this.sortRoomList() } - + if(this.hasLoadHistory == false) { + this.hasLoadHistoryMessageRF.push(localReference) + } } @@ -679,17 +682,17 @@ export class RoomService { } await this.WsChatService.loadHistory(this.id, limit).then( async (chatHistory:chatHistory) => { - + // console.log('load history', chatHistory) // const messagesId = this.messages.map((message)=> message._id) - chatHistory.result.messages.reverse().forEach(async(message: any) => { + await chatHistory.result.messages.reverse().forEach(async(message: any) => { if (!messagesId.includes(message._id)) { const messagesToSave = await this.prepareMessageCreateIfNotExist_iD({message: message}); if(messagesToSave) { - await messagesToSave.addMessageDB() + messagesToSave.addMessageDB() } } @@ -703,6 +706,28 @@ export class RoomService { }, 50) this.hasLoadHistory = true + this.messageReorder(); + } + + async messageReorder() { + const reorderMessage: MessageService[] = this.messages.filter((message) => + this.hasLoadHistoryMessageRF.includes(message?.localReference) + ); + + await this.messages.forEach( async (message, i) => { + + if(this.hasLoadHistoryMessageRF.includes(message?.localReference)) { + this.messages.splice(i, 1) + } + + }) + + this.hasLoadHistoryMessageRF = []; + + reorderMessage.forEach((message) => { + this.messages.push(message) + }); + } @@ -714,10 +739,10 @@ export class RoomService { await this.messages.forEach( async (message, index) => { - if(message._id) { + if(message._id) { if(message.viewed.length == 0) { - this.messages[index].viewed = membersIds - this.messages[index].received = membersIds + this.messages[index].viewed = membersIds; + this.messages[index].received = membersIds; await this.messages[index].save() } @@ -797,7 +822,33 @@ export class RoomService { wewMessage.setData(message) wewMessage.loadHistory = this.hasLoadHistory - this.messages.push(wewMessage) + + let found; + + if(wewMessage.localReference != null) { + found = this.messages.find((MessageService, index) => { + if ( MessageService.localReference == wewMessage.localReference ) { + return true + } else { + return false + } + }) + } else { + found = this.messages.find((MessageService, index) => { + if ( MessageService._id == wewMessage._id) { + return true + } else { + return false + } + }) + } + + + if (!found) { + this.messages.push(wewMessage) + return wewMessage + } + return wewMessage } @@ -840,7 +891,7 @@ export class RoomService { message = this.fix_updatedAt(message) const found = this.messages.find((MessageService, index) => { - if (MessageService._id == message._id ) { + if (MessageService._id == message._id) { return true } else { return false diff --git a/src/app/services/chat/ws-chat-methods.service.ts b/src/app/services/chat/ws-chat-methods.service.ts index 87976f395..d12c22731 100644 --- a/src/app/services/chat/ws-chat-methods.service.ts +++ b/src/app/services/chat/ws-chat-methods.service.ts @@ -14,7 +14,6 @@ import { SortService } from '../functions/sort.service'; import { chatUser } from 'src/app/models/chatMethod'; import { NfService } from 'src/app/services/chat/nf.service' import { ChangeProfileService } from '../change-profile.service'; -import { AuthService } from '../auth.service'; import { ChatStorageService } from './chat-storage.service'; import { ChatMethodsService } from './chat-methods.service'; import { AESEncrypt } from '../aesencrypt.service' @@ -41,7 +40,7 @@ export class WsChatMethodsService { users: chatUser[] = [] sessionStore = SessionStore - loggedUser: any; + delete = [] @@ -56,7 +55,6 @@ export class WsChatMethodsService { private NfService: NfService, private changeProfileService: ChangeProfileService, private chatService: ChatService, - private authService: AuthService, private ChatStorageService: ChatStorageService, private ChatMethodsService:ChatMethodsService, private AESEncrypt: AESEncrypt, @@ -64,7 +62,7 @@ export class WsChatMethodsService { private NetworkServiceService: NetworkServiceService, ) { - this.loggedUser = authService.ValidatedUserChat['data']; + this.loadChat() @@ -93,13 +91,6 @@ export class WsChatMethodsService { }) - // on change profile remove a rooms - this.changeProfileService.registerCallback(() => { - this.clearChat() - this.ReLoadChat() - this.storage.remove('Rooms'); - }) - } private loadChat() { @@ -173,8 +164,10 @@ export class WsChatMethodsService { async getAllRooms () { this.loadingWholeList = true const rooms = await this.WsChatService.getRooms(); + try { + await this.storage.remove('Rooms'); + } catch(e) {} - await this.storage.remove('Rooms'); await rooms.result.update.forEach( async (roomData: room, index) => { const roomId = this.getRoomId(roomData); diff --git a/src/app/services/chat/ws-chat.service.ts b/src/app/services/chat/ws-chat.service.ts index 173a9f167..2bc758e80 100644 --- a/src/app/services/chat/ws-chat.service.ts +++ b/src/app/services/chat/ws-chat.service.ts @@ -78,7 +78,6 @@ export class WsChatService { // if(message.result) { if(message.result.token) { - this.isLogin = true this.loginResponse = message @@ -106,6 +105,7 @@ export class WsChatService { getRooms(roomOlder = 1480377601) { + //const requestId = uuidv4() const requestId = uuidv4() const message = { @@ -121,7 +121,6 @@ export class WsChatService { this.ws.registerCallback({type:'Onmessage', funx:(message)=>{ if(message.id == requestId) { // same request send resolve(message) - // return true } }}) @@ -186,6 +185,7 @@ export class WsChatService { logout() { this.isLogin = false this.ws.connected = false + this.ws.disconnect() } // send message to room @@ -749,6 +749,7 @@ export class WsChatService { const data = JSON.parse(event.data) // + // console.log(data) for (const [key, value] of Object.entries(this.wsCallbacks)) { if(value.type== 'Onmessage') { @@ -777,6 +778,15 @@ export class WsChatService { onerror: (event: any) => { + }, + disconnect:() => { + if(this.socket) { + this.socket.onopen = (event: any) => {} + this.socket.onmessage = (event: any) => {} + this.socket.onclose = (event: any) => {} + this.socket.onerror = (event: any) => {} + this.socket.close() + } } }} diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index 2a91751fb..705e3445f 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -49,8 +49,6 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy @ViewChild('scrollMe') private myScrollContainer: ElementRef; @ViewChild('message-item') messageContainer: ElementRef; - loggedUser: any; - messages: any; dm: any; userPresence = ''; @@ -126,7 +124,6 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy private platform: Platform, private fileOpener: FileOpener, ) { - this.loggedUser = authService.ValidatedUserChat['data']; this.checkAudioPermission() } @@ -448,15 +445,15 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } else { - var str = msg.attachments[0].image_url; - str = str.substring(1, ((str.length) - 1)); + // var str = msg.attachments[0].image_url; + // str = str.substring(1, ((str.length) - 1)); - const encodedData = btoa(str); + // const encodedData = btoa(str); - let file = this.base64toBlob(encodedData, 'application/pdf') - let fileURL = URL.createObjectURL(file) + // let file = this.base64toBlob(encodedData, 'application/pdf') + // let fileURL = URL.createObjectURL(file) - window.open(fileURL); + // window.open(fileURL); } }