diff --git a/src/app/core/chat/entity/group.ts b/src/app/core/chat/entity/group.ts index eb11ed3d0..e12fe51b2 100644 --- a/src/app/core/chat/entity/group.ts +++ b/src/app/core/chat/entity/group.ts @@ -85,7 +85,7 @@ export class RoomEntity extends BaseEntity(RoomEntitySchema) implem if(receiver) { return receiver.user.wxUserId.toString() } else { - Logger.error('cant get receiver Id from Room.getReceiverId '+ this.id, this) + // Logger.error('cant get receiver Id from Room.getReceiverId '+ this.id, this) return undefined } @@ -102,7 +102,7 @@ export class RoomEntity extends BaseEntity(RoomEntitySchema) implem if(receiverId) { this.receiverId = parseInt(receiverId) } else { - Logger.error('cant set receiver Id from Room.setReceiver', this) + // Logger.error('cant set receiver Id from Room.setReceiver', this) } } diff --git a/src/app/core/chat/entity/message.ts b/src/app/core/chat/entity/message.ts index 776fd47f2..aa3326611 100644 --- a/src/app/core/chat/entity/message.ts +++ b/src/app/core/chat/entity/message.ts @@ -109,6 +109,11 @@ export class MessageEntity { return info.filter(e => typeof e.readAt == 'string' && e.memberId == SessionStore.user.UserId).length == 1 } + haveSeen() { + return this.info.filter(e => typeof e.readAt == 'string' && e.memberId == SessionStore.user.UserId).length == 1 + } + + meSender() { return this.sender?.wxUserId == SessionStore.user.UserId } diff --git a/src/app/module/chat/data/async/list/rooms/roomListChangeDetector.ts b/src/app/module/chat/data/async/list/rooms/roomListChangeDetector.ts index 15d8524e8..460083653 100644 --- a/src/app/module/chat/data/async/list/rooms/roomListChangeDetector.ts +++ b/src/app/module/chat/data/async/list/rooms/roomListChangeDetector.ts @@ -11,7 +11,6 @@ export function roomListDetermineChanges(serverRooms: RoomListItemOutPutDTO[], l const roomsToUpdate = serverRooms.filter(room => { const localRoom = localRoomMap.get(room.chatRoom.id); - console.log(room.chatRoom, localRoom) return localRoom && ( room.chatRoom.roomName !== localRoom.roomName && room.chatRoom.roomType == RoomType.Group || diff --git a/src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts b/src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts index 6741e738b..91cc843b9 100644 --- a/src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts @@ -9,6 +9,9 @@ import { HttpAdapter } from 'src/app/infra/http/adapter'; import { SessionStore } from 'src/app/store/session.service'; import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; import { IRoomLocalRepository } from 'src/app/core/chat/repository/room/room-local-repository'; +import { IMessageGetAllByRoomIdOutPut } from 'src/app/core/chat/usecase/message/message-get-all-by-room-Id'; +import { RoomEntity } from 'src/app/core/chat/entity/group'; +import { messageListDetermineChanges } from '../../../data/async/list/rooms/messageListChangedetector'; @Injectable({ @@ -25,8 +28,9 @@ export class RoomBoldSyncUseCaseService { ) { this.listenToIncomingMessage(); // this.loadHistory() - this.onInsertToDB() + //this.onInsertToDB() this.listenToUpdateMessages(); + this.loadHistory() } private listenToIncomingMessage() { @@ -73,33 +77,50 @@ export class RoomBoldSyncUseCaseService { }); } + @XTracerAsync({name:'RoomBoldSyncUseCaseService/loadHistory', module:'chat', bugPrint: true}) + private loadHistory() { + const regex = new RegExp("Room\\/([0-9a-fA-F]{8})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{12})\\/Messages"); - @XTracerAsync({name:'RoomBoldSyncUseCaseService/onInsertToDB', module:'chat', bugPrint: true}) - private onInsertToDB(tracing?: TracingType) { + return this.http.listen().pipe( + filter((response: any)=> { + return response?.isOk() && regex.test(response.value.url) && response.value.url.endsWith('/Messages') + }), + map((response: any) => response.value.data as IMessageGetAllByRoomIdOutPut) + ).subscribe(async (data)=> { + const loadHistoryFirstMessage = data.data[0] + if(loadHistoryFirstMessage) { - let delay = 2000 - this.messageLocalRepository.onCreateObservable().pipe( - filter(e => e?.origin == 'history'), - filter(e => e.sender.wxUserId != SessionStore.user.UserId), - ).subscribe(async (newMessage)=> { + const roomId = loadHistoryFirstMessage.roomId - setTimeout(async ()=> { - const haveSeen = MessageEntity.haveSeen(newMessage.info) - if(!haveSeen) { - await this.boldLocalRepository.open() - const result = await this.boldLocalRepository.findOne({roomId: newMessage.roomId}) + const room = await this.roomLocalDataSourceService.findOne({id: roomId}) - if(result.isOk() && !result.value) { - const result = await this.boldLocalRepository.insert({roomId: newMessage.roomId, bold: 1}) - } else if(result.isOk() && result.value.bold == 0) { - const result = await this.boldLocalRepository.update(newMessage.roomId, {bold: 1}) - } else { - // tracing.hasError("failed to set bold",{}) + if(room.isOk()) { + const roomEntity = new RoomEntity(room.value) + if (roomEntity.hasLastMessage()) { + + const message = Object.assign(new MessageEntity(), roomEntity.messages[0]) + const haveSeen = message.haveSeen() + + if(!haveSeen && !message.meSender()) { + console.log('to see', roomEntity.roomName , roomEntity.messages[0], ) + await this.boldLocalRepository.open() + const result = await this.boldLocalRepository.findOne({roomId: roomEntity.id}) + + if(result.isOk() && !result.value) { + const result = await this.boldLocalRepository.insert({roomId: roomEntity.id, bold: 1}) + } else if(result.isOk() && result.value.bold == 0) { + const result = await this.boldLocalRepository.update(roomEntity.id, {bold: 1}) + } else { + // tracing.hasError("failed to set bold",{}) + } + } else { + const result = await this.boldLocalRepository.update(roomEntity.id, {bold: 0}) + } } + } - }, delay); - delay = 0 + } }) } } diff --git a/src/app/ui/chat/component/messages/messages.page.ts b/src/app/ui/chat/component/messages/messages.page.ts index 1a64b41b7..5c8ecffd9 100644 --- a/src/app/ui/chat/component/messages/messages.page.ts +++ b/src/app/ui/chat/component/messages/messages.page.ts @@ -444,9 +444,13 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy requestId: '', roomId: this.room.id }) + } else { + console.log('no need', message ) } } } + } else { + console.log('dont read for this room') } } diff --git a/version/git-version.ts b/version/git-version.ts index dad9b04eb..9d3d563be 100644 --- a/version/git-version.ts +++ b/version/git-version.ts @@ -1,11 +1,11 @@ export let versionData = { - "shortSHA": "eeaade9aa", - "SHA": "eeaade9aabf2466b5d4d00c8a2acff737a984040", + "shortSHA": "01c2f5efb", + "SHA": "01c2f5efb5fa836decbc130ca5dcb8a8b6634d94", "branch": "feature/chat-new-api-peter", "lastCommitAuthor": "'Peter Maquiran'", - "lastCommitTime": "'Tue Sep 17 18:05:47 2024 +0100'", - "lastCommitMessage": "update room bold", - "lastCommitNumber": "6078", - "changeStatus": "On branch feature/chat-new-api-peter\nYour branch is ahead of 'origin/feature/chat-new-api-peter' by 6 commits.\n (use \"git push\" to publish your local commits)\n\nChanges to be committed:\n (use \"git restore --staged ...\" to unstage)\n\tmodified: src/app/core/chat/entity/group.ts\n\tmodified: src/app/core/chat/repository/room/room-local-repository.ts\n\tmodified: src/app/infra/database/dexie/instance/chat/schema/message.ts\n\tmodified: src/app/infra/socket/signalR/signalR.ts\n\tmodified: src/app/module/chat/data/async/list/rooms/roomListChangeDetector.ts\n\tmodified: src/app/module/chat/data/repository/room/room-local-repository.service.ts\n\tmodified: src/app/module/chat/domain/chat-service.service.ts\n\tmodified: src/app/module/chat/domain/use-case/contact/contact-list.service.ts\n\tmodified: src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts\n\tnew file: src/app/module/chat/domain/use-case/room/room-direct-on-set-id-use-case.service.ts\n\tmodified: src/app/module/chat/domain/use-case/room/room-get-list-use-case.service.ts\n\tmodified: src/app/module/chat/domain/use-case/room/room-set-last-message.service.ts\n\tmodified: src/app/ui/chat/chat.page.ts\n\tmodified: src/app/ui/chat/component/messages/messages.page.html\n\tmodified: src/app/ui/chat/component/messages/messages.page.ts\n\tmodified: src/app/ui/chat/modal/messages/contacts/contacts.page.ts\n\tmodified: src/app/ui/chat/modal/messages/messages.page.html\n\tmodified: src/app/ui/chat/modal/messages/messages.page.ts\n\tmodified: version/git-version.ts", + "lastCommitTime": "'Wed Sep 18 11:47:23 2024 +0100'", + "lastCommitMessage": "fix direct room", + "lastCommitNumber": "6079", + "changeStatus": "On branch feature/chat-new-api-peter\nYour branch is up to date with 'origin/feature/chat-new-api-peter'.\n\nChanges to be committed:\n (use \"git restore --staged ...\" to unstage)\n\tmodified: src/app/core/chat/entity/group.ts\n\tmodified: src/app/core/chat/entity/message.ts\n\tmodified: src/app/module/chat/data/async/list/rooms/roomListChangeDetector.ts\n\tmodified: src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts\n\tmodified: src/app/ui/chat/component/messages/messages.page.ts", "changeAuthor": "peter.maquiran" } \ No newline at end of file