From d4e8aa8192d3f79f2eee96cd41c183e911371235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o?= <leopold.chappuis@savoirfairelinux.com> Date: Fri, 7 Feb 2025 12:07:38 -0500 Subject: [PATCH] conversation-loading: implement automatic reload upon conversation retrieval This change aims to prevent the user from needing to refresh the page to view their loaded conversation. Change-Id: Ie4e0e385d261d5a2ac5cab610463ede3caf8d96a --- client/src/components/ConversationList.tsx | 11 ++++------- common/src/enums/websocket-message-type.ts | 1 + common/src/interfaces/websocket-interfaces.ts | 4 ++++ common/src/interfaces/websocket-message.ts | 2 ++ server/src/jamid/jamid.ts | 3 +++ 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/client/src/components/ConversationList.tsx b/client/src/components/ConversationList.tsx index a6322cb3..0cbcbf0b 100644 --- a/client/src/components/ConversationList.tsx +++ b/client/src/components/ConversationList.tsx @@ -116,14 +116,11 @@ const SummariesTabPanel = (props: TabPanelProps) => { const refreshConversationsSummaries = useRefreshConversationsSummaries() useEffect(() => { - function conversationMessageListener() { - refreshConversationsSummaries() - } - - websocket.bind(WebSocketMessageType.ConversationMessage, conversationMessageListener) - + websocket.bind(WebSocketMessageType.ConversationMessage, refreshConversationsSummaries) + websocket.bind(WebSocketMessageType.ConversationReady, refreshConversationsSummaries) return () => { - websocket.unbind(WebSocketMessageType.ConversationMessage, conversationMessageListener) + websocket.unbind(WebSocketMessageType.ConversationMessage, refreshConversationsSummaries) + websocket.unbind(WebSocketMessageType.ConversationReady, refreshConversationsSummaries) } }, [websocket, refreshConversationsSummaries]) diff --git a/common/src/enums/websocket-message-type.ts b/common/src/enums/websocket-message-type.ts index 6f791dc5..b0665e5f 100644 --- a/common/src/enums/websocket-message-type.ts +++ b/common/src/enums/websocket-message-type.ts @@ -30,6 +30,7 @@ export enum WebSocketMessageType { LoadMoreMessages = 'load-more-messages', LoadSwarmUntil = 'load-swarm-until', KnownDevicesChanged = 'known-devices-changed', + ConversationReady = 'conversation-ready', // calls (in the order they should be sent) sendCallInvite = 'sendCallInvite', diff --git a/common/src/interfaces/websocket-interfaces.ts b/common/src/interfaces/websocket-interfaces.ts index 11efdfd2..99ab4e3a 100644 --- a/common/src/interfaces/websocket-interfaces.ts +++ b/common/src/interfaces/websocket-interfaces.ts @@ -47,6 +47,10 @@ export interface ConversationView { conversationId: string } +export interface ConversationReady { + conversationId: string +} + export interface AccountMessageStatus { conversationId: string peer: string diff --git a/common/src/interfaces/websocket-message.ts b/common/src/interfaces/websocket-message.ts index 8b6214ff..62d1a0b8 100644 --- a/common/src/interfaces/websocket-message.ts +++ b/common/src/interfaces/websocket-message.ts @@ -25,6 +25,7 @@ import { ComposingStatus, ConversationMemberEvent, ConversationMessage, + ConversationReady, ConversationView, IAccountDetails, IKnownDevicesChanged, @@ -54,6 +55,7 @@ export interface WebSocketMessageTable { [WebSocketMessageType.LoadMoreMessages]: LoadMoreMessages [WebSocketMessageType.LoadSwarmUntil]: LoadSwarmUntil [WebSocketMessageType.KnownDevicesChanged]: IKnownDevicesChanged + [WebSocketMessageType.ConversationReady]: ConversationReady // calls (in the order they should be sent) [WebSocketMessageType.sendCallInvite]: CallInvite diff --git a/server/src/jamid/jamid.ts b/server/src/jamid/jamid.ts index 1832e8e6..1b75d7b8 100644 --- a/server/src/jamid/jamid.ts +++ b/server/src/jamid/jamid.ts @@ -856,6 +856,9 @@ export class Jamid { this.events.onConversationReady.subscribe((signal) => { log.debug('Received ConversationReady:', JSON.stringify(signal)) + this.webSocketServer.send(signal.accountId, WebSocketMessageType.ConversationReady, { + conversationId: signal.conversationId, + }) }) this.events.onConversationRemoved.subscribe((signal) => { -- GitLab