Skip to content

Commit

Permalink
(Chat): Display system add/remove messages immediately after update
Browse files Browse the repository at this point in the history
fixes #9876
  • Loading branch information
friofry committed Mar 25, 2024
1 parent bbb0fd7 commit a1798f6
Showing 1 changed file with 32 additions and 11 deletions.
43 changes: 32 additions & 11 deletions src/app_service/service/chat/service.nim
Original file line number Diff line number Diff line change
Expand Up @@ -400,22 +400,41 @@ QtObject:
chats.add(chat)
result = (chats, messages)

proc processMessageUpdateAfterSend*(self: Service, response: RpcResponse[JsonNode]): (seq[ChatDto], seq[MessageDto]) =
result = self.parseChatResponse(response)
var (chats, messages) = result
if chats.len == 0 or messages.len == 0:
error "no chats or messages in the parsed response"
return
proc parseGroupChatResponse*(self: Service, response: RpcResponse[JsonNode]): (ChatDto, seq[MessageDto]) =
var chat: ChatDto
var messages: seq[MessageDto] = @[]
if response.result{"chat"} != nil:
chat = chat_dto.toChatDto(response.result["chat"])
self.updateOrAddChat(chat)
if response.result{"messages"} != nil:
for jsonMsg in response.result["messages"]:
messages.add(jsonMsg.toMessageDto)
return (chat, messages)

proc signalChatsAndMessagesUpdates*(self: Service, chats: seq[ChatDto], messages: seq[MessageDto]) =
if chats.len == 0 and messages.len == 0:
error "both chats and messages are empty in the parsed response"
return
for chat in chats:
if (chat.active):
self.events.emit(SIGNAL_CHAT_CREATED, CreatedChatArgs(chat: chat))

var chatMap: Table[string, ChatDto] = initTable[string, ChatDto]()
for chat in chats:
chatMap[chat.id] = chat
for msg in messages:
for chat in chats:
if chat.id == msg.chatId:
self.events.emit(SIGNAL_SENDING_SUCCESS, MessageSendingSuccess(message: msg, chat: chat))
break
if chatMap.hasKey(msg.chatId):
let chat = chatMap[msg.chatId]
self.events.emit(SIGNAL_SENDING_SUCCESS, MessageSendingSuccess(message: msg, chat: chat))

proc processMessageUpdateAfterSend*(self: Service, response: RpcResponse[JsonNode]): (seq[ChatDto], seq[MessageDto]) =
result = self.parseChatResponse(response)
var (chats, messages) = result
self.signalChatsAndMessagesUpdates(chats, messages)

proc processGroupChatUpdateAfterSend*(self: Service, response: RpcResponse[JsonNode]): (ChatDto, seq[MessageDto]) =
result = self.parseGroupChatResponse(response)
var (chat, messages) = result
self.signalChatsAndMessagesUpdates(@[chat], messages)

proc processUpdateForTransaction*(self: Service, messageId: string, response: RpcResponse[JsonNode]) =
var (chats, _) = self.processMessageUpdateAfterSend(response)
Expand Down Expand Up @@ -665,6 +684,7 @@ QtObject:
let response = status_group_chat.addMembers(communityID, chatId, members)
if (response.error.isNil):
self.events.emit(SIGNAL_CHAT_MEMBERS_ADDED, ChatMembersAddedArgs(chatId: chatId, ids: members))
discard self.processGroupChatUpdateAfterSend(response)
except Exception as e:
error "error while adding group members: ", msg = e.msg

Expand All @@ -673,6 +693,7 @@ QtObject:
let response = status_group_chat.removeMember(communityID, chatId, member)
if (response.error.isNil):
self.events.emit(SIGNAL_CHAT_MEMBER_REMOVED, ChatMemberRemovedArgs(chatId: chatId, id: member))
discard self.processGroupChatUpdateAfterSend(response)
except Exception as e:
error "error while removing member from group: ", msg = e.msg

Expand Down

0 comments on commit a1798f6

Please # to comment.