Merge pull request #17800 from Tainan404/fix-message-duplication-chat
Fix: duplicate messages when start a new chat
This commit is contained in:
commit
a295cc93b5
@ -1,4 +1,5 @@
|
|||||||
import { GroupChatMsg } from '/imports/api/group-chat-msg';
|
import { GroupChatMsg } from '/imports/api/group-chat-msg';
|
||||||
|
import GroupChat from '/imports/api/group-chat';
|
||||||
import Logger from '/imports/startup/server/logger';
|
import Logger from '/imports/startup/server/logger';
|
||||||
import flat from 'flat';
|
import flat from 'flat';
|
||||||
import { parseMessage } from './addGroupChatMsg';
|
import { parseMessage } from './addGroupChatMsg';
|
||||||
@ -24,7 +25,14 @@ export default async function addBulkGroupChatMsgs(msgs) {
|
|||||||
senderRole: sender.role,
|
senderRole: sender.role,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
.map((el) => flat(el, { safe: true }));
|
.map((el) => flat(el, { safe: true }))
|
||||||
|
.map((msg)=>{
|
||||||
|
const groupChat = GroupChat.findOne({ meetingId: msg.meetingId, chatId: msg.chatId });
|
||||||
|
return {
|
||||||
|
...msg,
|
||||||
|
participants: [...groupChat.users],
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { insertedCount } = await GroupChatMsg.rawCollection().insertMany(mappedMsgs);
|
const { insertedCount } = await GroupChatMsg.rawCollection().insertMany(mappedMsgs);
|
||||||
|
@ -3,6 +3,7 @@ import Logger from '/imports/startup/server/logger';
|
|||||||
import { GroupChatMsg } from '/imports/api/group-chat-msg';
|
import { GroupChatMsg } from '/imports/api/group-chat-msg';
|
||||||
import { BREAK_LINE } from '/imports/utils/lineEndings';
|
import { BREAK_LINE } from '/imports/utils/lineEndings';
|
||||||
import changeHasMessages from '/imports/api/users-persistent-data/server/modifiers/changeHasMessages';
|
import changeHasMessages from '/imports/api/users-persistent-data/server/modifiers/changeHasMessages';
|
||||||
|
import GroupChat from '/imports/api/group-chat';
|
||||||
|
|
||||||
export function parseMessage(message) {
|
export function parseMessage(message) {
|
||||||
let parsedMessage = message || '';
|
let parsedMessage = message || '';
|
||||||
@ -34,6 +35,8 @@ export default async function addGroupChatMsg(meetingId, chatId, msg) {
|
|||||||
...restMsg
|
...restMsg
|
||||||
} = msg;
|
} = msg;
|
||||||
|
|
||||||
|
const groupChat = GroupChat.findOne({ meetingId, chatId });
|
||||||
|
|
||||||
const msgDocument = {
|
const msgDocument = {
|
||||||
...restMsg,
|
...restMsg,
|
||||||
sender: sender.id,
|
sender: sender.id,
|
||||||
@ -41,6 +44,7 @@ export default async function addGroupChatMsg(meetingId, chatId, msg) {
|
|||||||
senderRole: sender.role,
|
senderRole: sender.role,
|
||||||
meetingId,
|
meetingId,
|
||||||
chatId,
|
chatId,
|
||||||
|
participants: [...groupChat.users],
|
||||||
message: parseMessage(msg.message),
|
message: parseMessage(msg.message),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,8 +6,7 @@ import GroupChat from '/imports/api/group-chat';
|
|||||||
import Logger from '/imports/startup/server/logger';
|
import Logger from '/imports/startup/server/logger';
|
||||||
import AuthTokenValidation, { ValidationStates } from '/imports/api/auth-token-validation';
|
import AuthTokenValidation, { ValidationStates } from '/imports/api/auth-token-validation';
|
||||||
|
|
||||||
async function groupChatMsg(chatCount) {
|
async function groupChatMsg() {
|
||||||
check(chatCount, Number);
|
|
||||||
const tokenValidation = await AuthTokenValidation
|
const tokenValidation = await AuthTokenValidation
|
||||||
.findOneAsync({ connectionId: this.connection.id });
|
.findOneAsync({ connectionId: this.connection.id });
|
||||||
|
|
||||||
@ -36,10 +35,10 @@ async function groupChatMsg(chatCount) {
|
|||||||
timestamp: { $gte: User.authTokenValidatedTime },
|
timestamp: { $gte: User.authTokenValidatedTime },
|
||||||
$or: [
|
$or: [
|
||||||
{ meetingId, chatId: { $eq: PUBLIC_GROUP_CHAT_ID } },
|
{ meetingId, chatId: { $eq: PUBLIC_GROUP_CHAT_ID } },
|
||||||
{ meetingId, chatId: { $in: chatsIds } },
|
{ meetingId, participants: { $in: [userId] } },
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
return GroupChatMsg.find(selector);
|
return GroupChatMsg.find(selector, { fields: { participants: 0 } });
|
||||||
}
|
}
|
||||||
|
|
||||||
function publish(...args) {
|
function publish(...args) {
|
||||||
|
@ -131,22 +131,11 @@ export default withTracker(() => {
|
|||||||
let groupChatMessageHandler = {};
|
let groupChatMessageHandler = {};
|
||||||
|
|
||||||
if (isChatEnabled() && ready) {
|
if (isChatEnabled() && ready) {
|
||||||
const chatsCount = GroupChat.find({
|
|
||||||
$or: [
|
|
||||||
{
|
|
||||||
meetingId,
|
|
||||||
access: PUBLIC_CHAT_TYPE,
|
|
||||||
chatId: { $ne: PUBLIC_GROUP_CHAT_ID },
|
|
||||||
},
|
|
||||||
{ meetingId, users: { $all: [requesterUserId] } },
|
|
||||||
],
|
|
||||||
}).count();
|
|
||||||
|
|
||||||
const subHandler = {
|
const subHandler = {
|
||||||
...subscriptionErrorHandler,
|
...subscriptionErrorHandler,
|
||||||
};
|
};
|
||||||
|
|
||||||
groupChatMessageHandler = Meteor.subscribe('group-chat-msg', chatsCount, subHandler);
|
groupChatMessageHandler = Meteor.subscribe('group-chat-msg', subHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Refactor all the late subscribers
|
// TODO: Refactor all the late subscribers
|
||||||
|
Loading…
Reference in New Issue
Block a user