diff --git a/src/app/module/chat/data/async/socket/message-async.service.ts b/src/app/module/chat/data/async/socket/message-async.service.ts index 846d3d91c..e512ecdb6 100644 --- a/src/app/module/chat/data/async/socket/message-async.service.ts +++ b/src/app/module/chat/data/async/socket/message-async.service.ts @@ -22,24 +22,27 @@ export class MessageAsyncService { this.messageLiveSignalRDataSourceService.getMessage().pipe( filter((message) => { + if(!message?.requestId?.startsWith(InstanceId) == false) { + // console.log('exclude my message---') + } return !message?.requestId?.startsWith(InstanceId) }) ).subscribe(async (message) => { if(message?.id) { - console.log('message async ', message) + // console.log('message async ', message) const id = message.id + '' delete message.id; - + const incomingMessage = { ...message, messageId: id, sending: false, roomId:message.chatRoomId } - + this.incomingMessage(incomingMessage) } @@ -59,15 +62,15 @@ export class MessageAsyncService { const id = message.id + '' delete message.id; - + const incomingMessage = { ...message, messageId: id, sending: false, roomId:message.chatRoomId } - - this.incomingMessage(incomingMessage) + + this.incomingUpdateMessage(incomingMessage) } @@ -79,7 +82,7 @@ export class MessageAsyncService { if(message.id) { this.incomingDeleted(message) } - + }) } @@ -106,4 +109,18 @@ export class MessageAsyncService { console.log(result.error) } } + + + async incomingUpdateMessage(data: MessageOutPutDataDTO & { messageId }) { + const result = await this.messageLocalDataSourceService.messageExist({messageId: data.messageId}) + + if(result.isOk()) { + console.log('message exist') + return this.messageLocalDataSourceService.update(result.value) + } else { + console.log('message else') + } + + } + } diff --git a/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts b/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts index 44cd478c5..401039030 100644 --- a/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts +++ b/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts @@ -53,7 +53,7 @@ export const messageDataSource = new Dexie('chat-message') as Dexie & { }; messageDataSource.version(1).stores({ - message: '++id, roomId, message, messageType, canEdit, oneShot, requireUnlock, messageId' + message: '++id, roomId, message, messageType, canEdit, oneShot, requireUnlock, messageId, info' }); @Injectable({ @@ -136,13 +136,16 @@ export class MessageLocalDataSourceService { async messageExist({messageId}) { try { + + console.log({messageId}); + const existingMessage = await messageDataSource.message .where('messageId') .equals(messageId) .first(); if (existingMessage) { - return ok(true) + return ok(existingMessage) } else { return err(false) } @@ -165,6 +168,18 @@ export class MessageLocalDataSourceService { } + async updateByMessageId(data: TableMessage ) { + + try { + const result = await messageDataSource.message.update(data.id, data) + return ok(result) + } catch (e) { + return err(false) + } + + } + + async findOrUpdate(data: TableMessage) { const findResult = await this.findMessageById(data.messageId) diff --git a/src/app/module/chat/data/repository/message-respository.service.ts b/src/app/module/chat/data/repository/message-respository.service.ts index 0bd760147..c0dd4c3d7 100644 --- a/src/app/module/chat/data/repository/message-respository.service.ts +++ b/src/app/module/chat/data/repository/message-respository.service.ts @@ -65,16 +65,18 @@ export class MessageRepositoryService { delete sendMessageResult.value.sender } - // let clone: TableMessage = { - // ...sendMessageResult.value, - // messageId: sendMessageResult.value.id, - // id : localActionResult.value - // } + let clone: TableMessage = { + ...sendMessageResult.value, + messageId: sendMessageResult.value.id, + id : localActionResult.value + } // console.log({clone}) console.log('update message') - //return this.messageLocalDataSourceService.update({...clone, sending: false}) + return this.messageLocalDataSourceService.update({...clone, sending: false}) return ok(true) + } else { + console.log('no message to upload') } } else { @@ -84,7 +86,7 @@ export class MessageRepositoryService { sendMessageDelete(data: MessageDeleteInputDTO) { - + data['requestId'] = InstanceId +'@'+ uuidv4(); return this.messageLiveSignalRDataSourceService.sendMessageDelete(data) @@ -94,7 +96,7 @@ export class MessageRepositoryService { const result = await this.messageLocalDataSourceService.getLastMessageByRoomId(roomId) if(result.isOk()) { if(result.value) { - + return await this.messageLiveSignalRDataSourceService.sendReadAt({roomId, memberId: SessionStore.user.UserId, chatMessageId: result.value.messageId}) } return ok(true) @@ -130,7 +132,7 @@ export class MessageRepositoryService { sendTyping(roomId) { return this.messageLiveSignalRDataSourceService.sendTyping({ - roomId, + roomId, UserName:SessionStore.user.FullName, userId: SessionStore.user.UserId })