✨ feat(im): 增强消息处理逻辑,支持好友通知与撤回消息
parent
4e181564b8
commit
c653c2fa2b
|
|
@ -17,7 +17,9 @@ import {
|
||||||
ImConversationType,
|
ImConversationType,
|
||||||
ImMessageType,
|
ImMessageType,
|
||||||
PRIVATE_MESSAGE_PULL_SIZE,
|
PRIVATE_MESSAGE_PULL_SIZE,
|
||||||
GROUP_MESSAGE_PULL_SIZE
|
GROUP_MESSAGE_PULL_SIZE,
|
||||||
|
isFriendChatTip,
|
||||||
|
isFriendNotification
|
||||||
} from '../../utils/constants'
|
} from '../../utils/constants'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import type { Message } from '../types'
|
import type { Message } from '../types'
|
||||||
|
|
@ -121,6 +123,7 @@ export const useMessagePuller = () => {
|
||||||
for (const raw of list) {
|
for (const raw of list) {
|
||||||
if (isPrivate) {
|
if (isPrivate) {
|
||||||
const message = raw as ImPrivateMessageRespVO
|
const message = raw as ImPrivateMessageRespVO
|
||||||
|
// 特殊:撤回消息的处理
|
||||||
if (message.type === ImMessageType.RECALL) {
|
if (message.type === ImMessageType.RECALL) {
|
||||||
conversationStore.recallMessage(
|
conversationStore.recallMessage(
|
||||||
ImConversationType.PRIVATE,
|
ImConversationType.PRIVATE,
|
||||||
|
|
@ -129,12 +132,23 @@ export const useMessagePuller = () => {
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// 特殊:离线 pull 期间入库的 FRIEND_* 帧(目前仅 FRIEND_ADD persistent=true)也要走好友数据分发,
|
||||||
|
// 否则断线期间的好友列表更新会丢失;与 WebSocket 路径 dispatchPrivateFrame 保持对称
|
||||||
|
if (isFriendNotification(message.type)) {
|
||||||
|
wsStore.handleFriendNotification(message)
|
||||||
|
// 仅 FRIEND_ADD / FRIEND_DELETE 才作为会话气泡入消息列表
|
||||||
|
if (!isFriendChatTip(message.type)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 其它消息正常入会话消息列表
|
||||||
conversationStore.insertMessage(
|
conversationStore.insertMessage(
|
||||||
convertPrivateConversation(message),
|
convertPrivateConversation(message),
|
||||||
convertPrivateMessage(message)
|
convertPrivateMessage(message)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
const message = raw as ImGroupMessageRespVO
|
const message = raw as ImGroupMessageRespVO
|
||||||
|
// 特殊:撤回消息的处理
|
||||||
if (message.type === ImMessageType.RECALL) {
|
if (message.type === ImMessageType.RECALL) {
|
||||||
conversationStore.recallMessage(
|
conversationStore.recallMessage(
|
||||||
ImConversationType.GROUP,
|
ImConversationType.GROUP,
|
||||||
|
|
@ -143,6 +157,7 @@ export const useMessagePuller = () => {
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// 其它消息正常入会话消息列表
|
||||||
conversationStore.insertMessage(
|
conversationStore.insertMessage(
|
||||||
convertGroupConversation(message),
|
convertGroupConversation(message),
|
||||||
convertGroupMessage(message)
|
convertGroupMessage(message)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue