diff --git a/shared/model/converse.ts b/shared/model/converse.ts index 70fdff68..c6c3fd43 100644 --- a/shared/model/converse.ts +++ b/shared/model/converse.ts @@ -1,9 +1,14 @@ import { request } from '../api/request'; +export enum ChatConverseType { + DM = 'DM', + Group = 'Group', +} + export interface ChatConverseInfo { _id: string; name: string; - type: 'DM' | 'Group'; + type: ChatConverseType; members: string[]; } diff --git a/shared/redux/setup.ts b/shared/redux/setup.ts index de00b7bb..bc64bbfe 100644 --- a/shared/redux/setup.ts +++ b/shared/redux/setup.ts @@ -8,7 +8,12 @@ import { ChatMessage, fetchConverseLastMessages } from '../model/message'; import { socketEventListeners } from '../manager/socket'; import { showToasts } from '../manager/ui'; import { t } from '../i18n'; -import { ChatConverseInfo, fetchUserAck } from '../model/converse'; +import { + ChatConverseInfo, + ChatConverseType, + fetchUserAck, +} from '../model/converse'; +import { appendUserDMConverse } from '../model/user'; /** * 初始化 Redux 上下文 @@ -117,12 +122,37 @@ function listenNotify(socket: AppSocket, store: AppStore) { ); socket.listen('chat.message.add', (message) => { - store.dispatch( - chatActions.appendConverseMessage({ - converseId: message.converseId, - messages: [message], - }) - ); + // 处理接受到的消息 + const converseId = message.converseId; + const converse = store.getState().chat.converses[converseId]; + + // 添加消息到会话中 + const appendMessage = () => { + store.dispatch( + chatActions.appendConverseMessage({ + converseId: message.converseId, + messages: [message], + }) + ); + }; + + if (converse) { + appendMessage(); + } else if (!message.groupId) { + // 获取会话信息后添加到会话消息中 + getCachedConverseInfo(converseId).then((converse) => { + if (converse.type === ChatConverseType.DM) { + // 如果是私人会话, 则添加到dmlist + appendUserDMConverse(converse._id); + } + + store.dispatch(chatActions.setConverseInfo(converse)); + + appendMessage(); + }); + } else { + console.warn('无法处理的新增会话内容', message); + } }); socket.listen(