|
@@ -6,6 +6,7 @@ import { useWebSocketStore } from "@/stores/modules/webSocketStore";
|
|
|
import { useWalletStore } from "@/stores/modules/walletStore.js";
|
|
|
|
|
|
const IM_PATH = import.meta.env.VITE_IM_PATH_FIlE;
|
|
|
+let msgType = [Constant.REJECT_AUDIO_ONLINE, Constant.CANCELL_AUDIO_ONLINE, Constant.MESSAGE_REVOKE, Constant.MESSAGE_REVOKE_GROUP]
|
|
|
|
|
|
// 格式化扩展消息提取
|
|
|
const formatMessageExt = (message, ext) => {
|
|
@@ -14,6 +15,7 @@ const formatMessageExt = (message, ext) => {
|
|
|
message.content= ext.content || message.content;
|
|
|
message.msgId= ext.msgId || null;
|
|
|
message.cc = ext.cc || message.cc;
|
|
|
+ message.id = ext.id || message.id;
|
|
|
}
|
|
|
return message
|
|
|
}
|
|
@@ -23,24 +25,12 @@ const formatMessageExt = (message, ext) => {
|
|
|
export const setMessageHook = (message, state) => {
|
|
|
const wsStore = useWebSocketStore();
|
|
|
const walletStore = useWalletStore();
|
|
|
- // console.log('发送消息',message)
|
|
|
+ console.log('发送消息',message)
|
|
|
|
|
|
// 好友通过处理
|
|
|
if (message.messageType == MsgType.MESSAGE_PASS_FRIEND) {
|
|
|
wsStore.funRestoreDelAuth(message.to);
|
|
|
}
|
|
|
- // 群通知(群系统通知不需要发送处理)
|
|
|
- // if (MsgType.MSG_TYPE_GROUP.indexOf(message.messageType) >= 0) {
|
|
|
- // state.messages.push({
|
|
|
- // ...message,
|
|
|
- // toUsername: message.to,
|
|
|
- // contentType: MsgType.MSG_TYPE.NOTICE,
|
|
|
- // messageType: MsgType.MESSAGE_TYPE_GROUP
|
|
|
- // });
|
|
|
- // wsStore.indexs +=1;
|
|
|
- // return;
|
|
|
- // }
|
|
|
-
|
|
|
// 尝试解析扩展消息JOSON
|
|
|
let msg;
|
|
|
try{
|
|
@@ -51,9 +41,11 @@ export const setMessageHook = (message, state) => {
|
|
|
}catch(e){}
|
|
|
|
|
|
// 处理消息撤回
|
|
|
- if (message.messageType === MsgType.MESSAGE_REVOKE) {
|
|
|
-
|
|
|
- return;
|
|
|
+ if (message.messageType === MsgType.MESSAGE_REVOKE || message.messageType === MsgType.MESSAGE_REVOKE_GROUP) {
|
|
|
+ wsStore.messages = wsStore.messages.filter(item => {
|
|
|
+ if (item.id+'' === msg.msgId+'') return false;
|
|
|
+ return true;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
// 语音和视频挂断消息处理
|
|
@@ -85,12 +77,10 @@ export const setMessageHook = (message, state) => {
|
|
|
}
|
|
|
// 文本消息
|
|
|
if (message.contentType == MsgType.MSG_TYPE.TEXT) {
|
|
|
- state.messages.push({
|
|
|
+ state.messages.push(formatMessageExt({
|
|
|
...message,
|
|
|
- toUsername: message.friendUsername,
|
|
|
- content: msg?msg.content: message.content,
|
|
|
- msgId: msg?msg.msgId: null,
|
|
|
- });
|
|
|
+ toUsername: message.friendUsername
|
|
|
+ }, msg));
|
|
|
wsStore.indexs +=1;
|
|
|
}
|
|
|
// 音频消息
|
|
@@ -98,31 +88,32 @@ export const setMessageHook = (message, state) => {
|
|
|
const blob = new Blob([message.file], { type: message.fileSuffix });
|
|
|
const url = URL.createObjectURL(blob);
|
|
|
|
|
|
- state.messages.push({
|
|
|
+ state.messages.push(formatMessageExt({
|
|
|
...message,
|
|
|
- content: msg?msg.content: message.content,
|
|
|
- msgId: msg?msg.msgId: null,
|
|
|
+ // content: msg?msg.content: message.content,
|
|
|
+ // msgId: msg?msg.msgId: null,
|
|
|
toUsername: message.to,
|
|
|
localUrl: url,
|
|
|
- });
|
|
|
+ }, msg));
|
|
|
wsStore.indexs +=1;
|
|
|
}
|
|
|
// 图片
|
|
|
if (message.contentType === MsgType.MSG_TYPE.IMAGE) {
|
|
|
const blob = new Blob([message.file], { type: message.fileSuffix });
|
|
|
const url = URL.createObjectURL(blob);
|
|
|
- state.messages.push({
|
|
|
+ state.messages.push(formatMessageExt({
|
|
|
...message,
|
|
|
- content: msg?msg.content: message.content,
|
|
|
- msgId: msg?msg.msgId: null,
|
|
|
+ // content: msg?msg.content: message.content,
|
|
|
+ // msgId: msg?msg.msgId: null,
|
|
|
toUsername: message.to,
|
|
|
localUrl: url,
|
|
|
- });
|
|
|
+ }, msg));
|
|
|
wsStore.indexs +=1;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
// 同步更新会话列表缓存
|
|
|
- if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || message.contentType == Constant.REJECT_AUDIO_ONLINE || message.contentType == Constant.CANCELL_AUDIO_ONLINE){
|
|
|
+ if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || msgType.includes(message.contentType)){
|
|
|
wsStore.updateSessionList(message, 0, msg);
|
|
|
}
|
|
|
};
|
|
@@ -138,6 +129,7 @@ export const handleMessageHook = async (payload, state) => {
|
|
|
const wsStore = useWebSocketStore();
|
|
|
const walletStore = useWalletStore();
|
|
|
const message = {...payload};
|
|
|
+ if (!message.contentType && !message.messageType) return;
|
|
|
|
|
|
// 尝试解析扩展消息JOSON
|
|
|
let msg;
|
|
@@ -147,7 +139,14 @@ export const handleMessageHook = async (payload, state) => {
|
|
|
msg = ''
|
|
|
}
|
|
|
}catch(e){}
|
|
|
-
|
|
|
+ // 处理消息撤回
|
|
|
+ if (message.messageType === MsgType.MESSAGE_REVOKE || message.messageType === MsgType.MESSAGE_REVOKE_GROUP) {
|
|
|
+ console.log(wsStore.messages)
|
|
|
+ wsStore.messages = wsStore.messages.filter(item => {
|
|
|
+ if (item.id + '' === msg.msgId + '') return false;
|
|
|
+ return true;
|
|
|
+ });
|
|
|
+ }
|
|
|
// 处理消息已到达
|
|
|
if (message.messageType === MsgType.MESSAGE_RECEIPT) {
|
|
|
console.log('receipt', message, msg);
|
|
@@ -167,7 +166,7 @@ export const handleMessageHook = async (payload, state) => {
|
|
|
? message.avatar
|
|
|
: (IM_PATH + (message.avatar || ''));
|
|
|
// 同步更新会话列表缓存
|
|
|
- if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || message.contentType == Constant.REJECT_AUDIO_ONLINE || message.contentType == Constant.CANCELL_AUDIO_ONLINE) {
|
|
|
+ if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || msgType.includes(message.contentType)) {
|
|
|
const avatar = message.avatar;
|
|
|
// 兼容
|
|
|
if (Array.isArray(state.toUserInfo.avatar)) {
|
|
@@ -229,12 +228,12 @@ export const handleMessageHook = async (payload, state) => {
|
|
|
}
|
|
|
// 文本消息
|
|
|
if (message.contentType === MsgType.MSG_TYPE.TEXT) {
|
|
|
- state.messages.push({
|
|
|
+ state.messages.push(formatMessageExt({
|
|
|
...message,
|
|
|
toUsername: message.to,
|
|
|
- content: msg?msg.content: message.content,
|
|
|
- msgId: msg?msg.msgId: null,
|
|
|
- });
|
|
|
+ // content: msg?msg.content: message.content,
|
|
|
+ // msgId: msg?msg.msgId: null,
|
|
|
+ }, msg));
|
|
|
wsStore.indexs +=1;
|
|
|
setupNotifications(1)
|
|
|
return
|
|
@@ -246,13 +245,13 @@ export const handleMessageHook = async (payload, state) => {
|
|
|
});
|
|
|
// 生成可播放的 ObjectURL
|
|
|
const audioUrl = URL.createObjectURL(audioBlob);
|
|
|
- state.messages.push({
|
|
|
+ state.messages.push(formatMessageExt({
|
|
|
...message,
|
|
|
file: audioUrl,
|
|
|
toUsername: message.to,
|
|
|
- content: msg?msg.content: message.content,
|
|
|
- msgId: msg?msg.msgId: null,
|
|
|
- });
|
|
|
+ // content: msg?msg.content: message.content,
|
|
|
+ // msgId: msg?msg.msgId: null,
|
|
|
+ }, msg));
|
|
|
wsStore.indexs +=1;
|
|
|
setupNotifications(1)
|
|
|
return
|
|
@@ -262,13 +261,13 @@ export const handleMessageHook = async (payload, state) => {
|
|
|
if (message.contentType === MsgType.MSG_TYPE.IMAGE) {
|
|
|
const blob = new Blob([message.file], { type: message.fileSuffix });
|
|
|
const url = URL.createObjectURL(blob);
|
|
|
- state.messages.push({
|
|
|
+ state.messages.push(formatMessageExt({
|
|
|
...message,
|
|
|
file: url,
|
|
|
toUsername: message.to,
|
|
|
- content: msg?msg.content: message.content,
|
|
|
- msgId: msg?msg.msgId: null,
|
|
|
- });
|
|
|
+ // content: msg?msg.content: message.content,
|
|
|
+ // msgId: msg?msg.msgId: null,
|
|
|
+ }, msg));
|
|
|
wsStore.indexs +=1;
|
|
|
setupNotifications(1)
|
|
|
return
|