From ca2a6ab97394d59110a1f17dbfc692fbdc656255 Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Mon, 27 Nov 2023 15:09:51 -0300 Subject: [PATCH 1/4] chore: add new msg stream for reported msgs --- .../ui-utils/client/lib/LegacyRoomManager.ts | 20 +++++++++++++++++++ .../lib/moderation/deleteReportedMessages.ts | 12 +++++++++-- .../modules/listeners/listeners.module.ts | 14 +++++++++++++ .../notifications/notifications.module.ts | 6 +++++- ee/packages/ddp-client/src/types/streams.ts | 6 +++++- packages/core-services/src/events/Events.ts | 7 +++++++ 6 files changed, 61 insertions(+), 4 deletions(-) diff --git a/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts b/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts index 85aafa4bb1854..2370de3123cc0 100644 --- a/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts +++ b/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts @@ -190,6 +190,26 @@ const computation = Tracker.autorun(() => { } ChatMessage.remove(query); }); + + void sdk.stream( + 'room-messages', + [`${record.rid}/reported-messages`], + async ({ messageIds, hidden, showDeletedStatus, remove }: Record) => { + if (remove) { + return ChatMessage.remove({ _id: { $in: messageIds } }); + } + if (hidden) { + return ChatMessage.update({ _id: { $in: messageIds } }, { $set: { _hidden: true } }, { multi: true }); + } + if (showDeletedStatus) { + return ChatMessage.update( + { _id: { $in: messageIds } }, + { $set: { t: 'rm', msg: '', urls: [], mentions: [], attachments: [], reactions: {} } }, + { multi: true }, + ); + } + }, + ); } } diff --git a/apps/meteor/server/lib/moderation/deleteReportedMessages.ts b/apps/meteor/server/lib/moderation/deleteReportedMessages.ts index f53817353d65a..015367954ecf7 100644 --- a/apps/meteor/server/lib/moderation/deleteReportedMessages.ts +++ b/apps/meteor/server/lib/moderation/deleteReportedMessages.ts @@ -1,3 +1,4 @@ +import { api } from '@rocket.chat/core-services'; import type { IUser, IMessage } from '@rocket.chat/core-typings'; import { Messages, Uploads, ReadReceipts } from '@rocket.chat/models'; @@ -7,8 +8,8 @@ import { settings } from '../../../app/settings/server'; // heavily inspired from message delete taking place in the user deletion process // in this path we don't care about the apps engine events - it's a "raw" bulk action export async function deleteReportedMessages(messages: IMessage[], user: IUser): Promise { - const keepHistory = settings.get('Message_KeepHistory'); - const showDeletedStatus = settings.get('Message_ShowDeletedStatus'); + const keepHistory = settings.get('Message_KeepHistory'); + const showDeletedStatus = settings.get('Message_ShowDeletedStatus'); const files: string[] = []; const messageIds: string[] = []; for (const message of messages) { @@ -47,4 +48,11 @@ export async function deleteReportedMessages(messages: IMessage[], user: IUser): if (showDeletedStatus) { await Messages.setAsDeletedByIdsAndUser(messageIds, user as any); } + + void api.broadcast('notify.deletedReportedMessages', { + messages: messages.map((message) => ({ _id: message._id, rid: message.rid })), + showDeletedStatus, + hidden: keepHistory && !showDeletedStatus, + remove: !keepHistory && !showDeletedStatus, + }); } diff --git a/apps/meteor/server/modules/listeners/listeners.module.ts b/apps/meteor/server/modules/listeners/listeners.module.ts index aba351dbc9580..00bcfb6899f47 100644 --- a/apps/meteor/server/modules/listeners/listeners.module.ts +++ b/apps/meteor/server/modules/listeners/listeners.module.ts @@ -402,6 +402,20 @@ export class ListenersModule { notifications.notifyRoomInThisInstance(rid, 'deleteMessageBulk', data); }); + service.onEvent('notify.deletedReportedMessages', ({ messages, hidden, showDeletedStatus, remove }): void => { + const transformed = messages.reduce((acc, { rid, _id }) => { + if (!acc[rid]) { + acc[rid] = []; + } + acc[rid].push(_id); + return acc; + }, {} as Record); + + Object.entries(transformed).forEach(([rid, messageIds]) => { + notifications.streamRoomMessage.emitWithoutBroadcast(`${rid}/reported-messages`, { messageIds, hidden, showDeletedStatus, remove }); + }); + }); + service.onEvent('notify.deleteCustomSound', (data): void => { notifications.notifyAllInThisInstance('deleteCustomSound', data); notifications.notifyAllInThisInstance('public-info', ['deleteCustomSound', [data]]); diff --git a/apps/meteor/server/modules/notifications/notifications.module.ts b/apps/meteor/server/modules/notifications/notifications.module.ts index ba66a31e5ee4d..5d43b77f8612b 100644 --- a/apps/meteor/server/modules/notifications/notifications.module.ts +++ b/apps/meteor/server/modules/notifications/notifications.module.ts @@ -96,7 +96,11 @@ export class NotificationsModule { this.streamRoomMessage.allowWrite('none'); this.streamRoomMessage.allowRead(async function (eventName, extraData) { - const room = await Rooms.findOneById(eventName); + const roomId: string | undefined = eventName.includes('/') ? eventName.split('/').shift() : eventName; + if (!roomId) { + return false; + } + const room = await Rooms.findOneById(roomId); if (!room) { return false; } diff --git a/ee/packages/ddp-client/src/types/streams.ts b/ee/packages/ddp-client/src/types/streams.ts index f1a54c674b9b8..09041f6566c55 100644 --- a/ee/packages/ddp-client/src/types/streams.ts +++ b/ee/packages/ddp-client/src/types/streams.ts @@ -56,7 +56,11 @@ export interface StreamerEvents { // { key: `${string}/${string}`; args: [id: string] }, ]; - 'room-messages': [{ key: '__my_messages__'; args: [IMessage] }, { key: string; args: [IMessage] }]; + 'room-messages': [ + { key: `${string}/reported-messages`; args: [{ messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }] }, + { key: '__my_messages__'; args: [IMessage] }, + { key: `${string}`; args: [IMessage] }, + ]; 'notify-all': [ { diff --git a/packages/core-services/src/events/Events.ts b/packages/core-services/src/events/Events.ts index 49e78ea7244a3..a25525ac2407a 100644 --- a/packages/core-services/src/events/Events.ts +++ b/packages/core-services/src/events/Events.ts @@ -90,6 +90,13 @@ export type EventSignatures = { users: string[]; }, ): void; + 'notify.deletedReportedMessages'(data: { + messages: Pick[]; + showDeletedStatus: boolean; + hidden: boolean; + remove: boolean; + }): void; + 'notify.deleteCustomSound'(data: { soundData: ICustomSound }): void; 'notify.deleteCustomSound'(data: { soundData: ICustomSound }): void; 'notify.updateCustomSound'(data: { soundData: ICustomSound }): void; 'notify.calendar'(uid: string, data: ICalendarNotification): void; From 3348890516ad52b52e88827d77c00c8c4d58599e Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Fri, 8 Dec 2023 16:28:38 -0300 Subject: [PATCH 2/4] chore: use existing stream deleteMessageBulk instead of creating new one --- .../ui-utils/client/lib/LegacyRoomManager.ts | 55 +++++++++---------- .../lists/useStreamUpdatesForMessageList.ts | 13 ++++- .../hooks/useThreadMainMessageQuery.ts | 13 ++++- .../lib/moderation/deleteReportedMessages.ts | 27 +++++++-- .../modules/listeners/listeners.module.ts | 14 ----- .../notifications/notifications.module.ts | 6 +- ee/packages/ddp-client/src/types/streams.ts | 17 ++++-- packages/core-services/src/events/Events.ts | 7 +-- 8 files changed, 85 insertions(+), 67 deletions(-) diff --git a/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts b/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts index 2370de3123cc0..6903578ffd2c4 100644 --- a/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts +++ b/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts @@ -177,39 +177,36 @@ const computation = Tracker.autorun(() => { // remove thread refenrece from deleted message ChatMessage.update({ tmid: msg._id }, { $unset: { tmid: 1 } }, { multi: true }); }); - Notifications.onRoom(record.rid, 'deleteMessageBulk', ({ rid, ts, excludePinned, ignoreDiscussion, users }) => { - const query: Mongo.Selector = { rid, ts }; - if (excludePinned) { - query.pinned = { $ne: true }; + Notifications.onRoom(record.rid, 'deleteMessageBulk', ({ rid, ts, excludePinned, ignoreDiscussion, users, reportedMessages }) => { + if (!reportedMessages) { + const query: Mongo.Selector = { rid, ts }; + if (excludePinned) { + query.pinned = { $ne: true }; + } + if (ignoreDiscussion) { + query.drid = { $exists: false }; + } + if (users?.length) { + query['u.username'] = { $in: users }; + } + return ChatMessage.remove(query); + } + + const { messageIds, remove, hidden, showDeletedStatus } = reportedMessages; + if (remove) { + return ChatMessage.remove({ _id: { $in: messageIds } }); } - if (ignoreDiscussion) { - query.drid = { $exists: false }; + if (hidden) { + return ChatMessage.update({ _id: { $in: messageIds } }, { $set: { _hidden: true } }, { multi: true }); } - if (users?.length) { - query['u.username'] = { $in: users }; + if (showDeletedStatus) { + return ChatMessage.update( + { _id: { $in: messageIds } }, + { $set: { t: 'rm', msg: '', urls: [], mentions: [], attachments: [], reactions: {} } }, + { multi: true }, + ); } - ChatMessage.remove(query); }); - - void sdk.stream( - 'room-messages', - [`${record.rid}/reported-messages`], - async ({ messageIds, hidden, showDeletedStatus, remove }: Record) => { - if (remove) { - return ChatMessage.remove({ _id: { $in: messageIds } }); - } - if (hidden) { - return ChatMessage.update({ _id: { $in: messageIds } }, { $set: { _hidden: true } }, { multi: true }); - } - if (showDeletedStatus) { - return ChatMessage.update( - { _id: { $in: messageIds } }, - { $set: { t: 'rm', msg: '', urls: [], mentions: [], attachments: [], reactions: {} } }, - { multi: true }, - ); - } - }, - ); } } diff --git a/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts b/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts index c9e287d573d29..313ef29d6bfbe 100644 --- a/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts +++ b/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts @@ -12,10 +12,21 @@ type NotifyRoomRidDeleteMessageBulkEvent = { ignoreDiscussion: boolean; ts: FieldExpression; users: string[]; + reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; }; const createDeleteCriteria = (params: NotifyRoomRidDeleteMessageBulkEvent): ((message: IMessage) => boolean) => { - const query: Query = { ts: params.ts }; + const query: Query = {}; + const { reportedMessages } = params; + if ( + reportedMessages && + reportedMessages.messageIds.length > 0 && + (reportedMessages?.remove || reportedMessages?.showDeletedStatus || reportedMessages?.hidden) + ) { + return createFilterFromQuery({ _id: { $in: reportedMessages.messageIds } }); + } + + query.ts = params.ts; if (params.excludePinned) { query.pinned = { $ne: true }; diff --git a/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts b/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts index aca714549cf19..5ff31b0b1d080 100644 --- a/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts +++ b/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts @@ -18,10 +18,21 @@ type NotifyRoomRidDeleteMessageBulkEvent = { ignoreDiscussion: boolean; ts: FieldExpression; users: string[]; + reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; }; const createDeleteCriteria = (params: NotifyRoomRidDeleteMessageBulkEvent): ((message: IMessage) => boolean) => { - const query: Query = { ts: params.ts }; + const query: Query = {}; + const { reportedMessages } = params; + if ( + reportedMessages && + reportedMessages.messageIds.length > 0 && + (reportedMessages?.remove || reportedMessages?.showDeletedStatus || reportedMessages?.hidden) + ) { + return createFilterFromQuery({ _id: { $in: reportedMessages.messageIds } }); + } + + query.ts = params.ts; if (params.excludePinned) { query.pinned = { $ne: true }; diff --git a/apps/meteor/server/lib/moderation/deleteReportedMessages.ts b/apps/meteor/server/lib/moderation/deleteReportedMessages.ts index 015367954ecf7..341a52828567c 100644 --- a/apps/meteor/server/lib/moderation/deleteReportedMessages.ts +++ b/apps/meteor/server/lib/moderation/deleteReportedMessages.ts @@ -49,10 +49,27 @@ export async function deleteReportedMessages(messages: IMessage[], user: IUser): await Messages.setAsDeletedByIdsAndUser(messageIds, user as any); } - void api.broadcast('notify.deletedReportedMessages', { - messages: messages.map((message) => ({ _id: message._id, rid: message.rid })), - showDeletedStatus, - hidden: keepHistory && !showDeletedStatus, - remove: !keepHistory && !showDeletedStatus, + const transformed = messages.reduce((acc, { rid, _id }) => { + if (!acc[rid]) { + acc[rid] = []; + } + acc[rid].push(_id); + return acc; + }, {} as Record); + + Object.entries(transformed).forEach(([rid, messageIds]) => { + void api.broadcast('notify.deleteMessageBulk', rid, { + rid, + excludePinned: true, + ignoreDiscussion: true, + ts: { $gt: new Date() }, + users: [], + reportedMessages: { + messageIds, + showDeletedStatus, + hidden: keepHistory && !showDeletedStatus, + remove: !keepHistory && !showDeletedStatus, + }, + }); }); } diff --git a/apps/meteor/server/modules/listeners/listeners.module.ts b/apps/meteor/server/modules/listeners/listeners.module.ts index 00bcfb6899f47..aba351dbc9580 100644 --- a/apps/meteor/server/modules/listeners/listeners.module.ts +++ b/apps/meteor/server/modules/listeners/listeners.module.ts @@ -402,20 +402,6 @@ export class ListenersModule { notifications.notifyRoomInThisInstance(rid, 'deleteMessageBulk', data); }); - service.onEvent('notify.deletedReportedMessages', ({ messages, hidden, showDeletedStatus, remove }): void => { - const transformed = messages.reduce((acc, { rid, _id }) => { - if (!acc[rid]) { - acc[rid] = []; - } - acc[rid].push(_id); - return acc; - }, {} as Record); - - Object.entries(transformed).forEach(([rid, messageIds]) => { - notifications.streamRoomMessage.emitWithoutBroadcast(`${rid}/reported-messages`, { messageIds, hidden, showDeletedStatus, remove }); - }); - }); - service.onEvent('notify.deleteCustomSound', (data): void => { notifications.notifyAllInThisInstance('deleteCustomSound', data); notifications.notifyAllInThisInstance('public-info', ['deleteCustomSound', [data]]); diff --git a/apps/meteor/server/modules/notifications/notifications.module.ts b/apps/meteor/server/modules/notifications/notifications.module.ts index 651ea044be3e1..979603c926506 100644 --- a/apps/meteor/server/modules/notifications/notifications.module.ts +++ b/apps/meteor/server/modules/notifications/notifications.module.ts @@ -96,11 +96,7 @@ export class NotificationsModule { this.streamRoomMessage.allowWrite('none'); this.streamRoomMessage.allowRead(async function (eventName, extraData) { - const roomId: string | undefined = eventName.includes('/') ? eventName.split('/').shift() : eventName; - if (!roomId) { - return false; - } - const room = await Rooms.findOneById(roomId); + const room = await Rooms.findOneById(eventName); if (!room) { return false; } diff --git a/ee/packages/ddp-client/src/types/streams.ts b/ee/packages/ddp-client/src/types/streams.ts index 870bd6c05730d..8c1131b03b00e 100644 --- a/ee/packages/ddp-client/src/types/streams.ts +++ b/ee/packages/ddp-client/src/types/streams.ts @@ -47,7 +47,16 @@ export interface StreamerEvents { { key: `${string}/typing`; args: [username: string, typing: boolean] }, { key: `${string}/deleteMessageBulk`; - args: [args: { rid: IMessage['rid']; excludePinned: boolean; ignoreDiscussion: boolean; ts: Record; users: string[] }]; + args: [ + args: { + rid: IMessage['rid']; + excludePinned: boolean; + ignoreDiscussion: boolean; + ts: Record; + users: string[]; + reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; + }, + ]; }, { key: `${string}/deleteMessage`; args: [{ _id: IMessage['_id'] }] }, { key: `${string}/e2e.keyRequest`; args: [unknown] }, @@ -56,11 +65,7 @@ export interface StreamerEvents { // { key: `${string}/${string}`; args: [id: string] }, ]; - 'room-messages': [ - { key: `${string}/reported-messages`; args: [{ messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }] }, - { key: '__my_messages__'; args: [IMessage] }, - { key: `${string}`; args: [IMessage] }, - ]; + 'room-messages': [{ key: '__my_messages__'; args: [IMessage] }, { key: string; args: [IMessage] }]; 'notify-all': [ { diff --git a/packages/core-services/src/events/Events.ts b/packages/core-services/src/events/Events.ts index 835703bd247df..b01d87301ccb3 100644 --- a/packages/core-services/src/events/Events.ts +++ b/packages/core-services/src/events/Events.ts @@ -88,14 +88,9 @@ export type EventSignatures = { ignoreDiscussion: boolean; ts: Record; users: string[]; + reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; }, ): void; - 'notify.deletedReportedMessages'(data: { - messages: Pick[]; - showDeletedStatus: boolean; - hidden: boolean; - remove: boolean; - }): void; 'notify.deleteCustomSound'(data: { soundData: ICustomSound }): void; 'notify.deleteCustomSound'(data: { soundData: ICustomSound }): void; 'notify.updateCustomSound'(data: { soundData: ICustomSound }): void; From b7863c4a2e7d98f73bee9157cdc394d6d553a43f Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Fri, 8 Dec 2023 16:30:45 -0300 Subject: [PATCH 3/4] chore: remove duplicated stream --- packages/core-services/src/events/Events.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core-services/src/events/Events.ts b/packages/core-services/src/events/Events.ts index b01d87301ccb3..e5de3a7f06812 100644 --- a/packages/core-services/src/events/Events.ts +++ b/packages/core-services/src/events/Events.ts @@ -92,7 +92,6 @@ export type EventSignatures = { }, ): void; 'notify.deleteCustomSound'(data: { soundData: ICustomSound }): void; - 'notify.deleteCustomSound'(data: { soundData: ICustomSound }): void; 'notify.updateCustomSound'(data: { soundData: ICustomSound }): void; 'notify.calendar'(uid: string, data: ICalendarNotification): void; 'permission.changed'(data: { clientAction: ClientAction; data: any }): void; From 8bd933ccb07045637b6dbb087c81c45147e0c6e2 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 27 Dec 2023 18:50:27 -0300 Subject: [PATCH 4/4] change payload --- .../ui-utils/client/lib/LegacyRoomManager.ts | 41 ++++++++++--------- .../lists/useStreamUpdatesForMessageList.ts | 17 ++++---- .../hooks/useThreadMainMessageQuery.ts | 17 ++++---- .../lib/moderation/deleteReportedMessages.ts | 8 +--- ee/packages/ddp-client/src/types/streams.ts | 3 +- packages/core-services/src/events/Events.ts | 3 +- 6 files changed, 41 insertions(+), 48 deletions(-) diff --git a/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts b/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts index 6903578ffd2c4..3cf64a1e07cf7 100644 --- a/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts +++ b/apps/meteor/app/ui-utils/client/lib/LegacyRoomManager.ts @@ -177,9 +177,17 @@ const computation = Tracker.autorun(() => { // remove thread refenrece from deleted message ChatMessage.update({ tmid: msg._id }, { $unset: { tmid: 1 } }, { multi: true }); }); - Notifications.onRoom(record.rid, 'deleteMessageBulk', ({ rid, ts, excludePinned, ignoreDiscussion, users, reportedMessages }) => { - if (!reportedMessages) { - const query: Mongo.Selector = { rid, ts }; + Notifications.onRoom( + record.rid, + 'deleteMessageBulk', + ({ rid, ts, excludePinned, ignoreDiscussion, users, ids, showDeletedStatus }) => { + const query: Mongo.Selector = { rid }; + + if (ids) { + query._id = { $in: ids }; + } else { + query.ts = ts; + } if (excludePinned) { query.pinned = { $ne: true }; } @@ -189,24 +197,17 @@ const computation = Tracker.autorun(() => { if (users?.length) { query['u.username'] = { $in: users }; } + + if (showDeletedStatus) { + return ChatMessage.update( + query, + { $set: { t: 'rm', msg: '', urls: [], mentions: [], attachments: [], reactions: {} } }, + { multi: true }, + ); + } return ChatMessage.remove(query); - } - - const { messageIds, remove, hidden, showDeletedStatus } = reportedMessages; - if (remove) { - return ChatMessage.remove({ _id: { $in: messageIds } }); - } - if (hidden) { - return ChatMessage.update({ _id: { $in: messageIds } }, { $set: { _hidden: true } }, { multi: true }); - } - if (showDeletedStatus) { - return ChatMessage.update( - { _id: { $in: messageIds } }, - { $set: { t: 'rm', msg: '', urls: [], mentions: [], attachments: [], reactions: {} } }, - { multi: true }, - ); - } - }); + }, + ); } } diff --git a/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts b/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts index 313ef29d6bfbe..a28c4424d313c 100644 --- a/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts +++ b/apps/meteor/client/hooks/lists/useStreamUpdatesForMessageList.ts @@ -12,21 +12,18 @@ type NotifyRoomRidDeleteMessageBulkEvent = { ignoreDiscussion: boolean; ts: FieldExpression; users: string[]; - reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; + ids?: string[]; // message ids have priority over ts + showDeletedStatus?: boolean; }; const createDeleteCriteria = (params: NotifyRoomRidDeleteMessageBulkEvent): ((message: IMessage) => boolean) => { const query: Query = {}; - const { reportedMessages } = params; - if ( - reportedMessages && - reportedMessages.messageIds.length > 0 && - (reportedMessages?.remove || reportedMessages?.showDeletedStatus || reportedMessages?.hidden) - ) { - return createFilterFromQuery({ _id: { $in: reportedMessages.messageIds } }); - } - query.ts = params.ts; + if (params.ids) { + query._id = { $in: params.ids }; + } else { + query.ts = params.ts; + } if (params.excludePinned) { query.pinned = { $ne: true }; diff --git a/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts b/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts index 5ff31b0b1d080..ecf2d54a45f7f 100644 --- a/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts +++ b/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMainMessageQuery.ts @@ -18,21 +18,18 @@ type NotifyRoomRidDeleteMessageBulkEvent = { ignoreDiscussion: boolean; ts: FieldExpression; users: string[]; - reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; + ids?: string[]; // message ids have priority over ts + showDeletedStatus?: boolean; }; const createDeleteCriteria = (params: NotifyRoomRidDeleteMessageBulkEvent): ((message: IMessage) => boolean) => { const query: Query = {}; - const { reportedMessages } = params; - if ( - reportedMessages && - reportedMessages.messageIds.length > 0 && - (reportedMessages?.remove || reportedMessages?.showDeletedStatus || reportedMessages?.hidden) - ) { - return createFilterFromQuery({ _id: { $in: reportedMessages.messageIds } }); - } - query.ts = params.ts; + if (params.ids) { + query._id = { $in: params.ids }; + } else { + query.ts = params.ts; + } if (params.excludePinned) { query.pinned = { $ne: true }; diff --git a/apps/meteor/server/lib/moderation/deleteReportedMessages.ts b/apps/meteor/server/lib/moderation/deleteReportedMessages.ts index 341a52828567c..218714d5a8b0d 100644 --- a/apps/meteor/server/lib/moderation/deleteReportedMessages.ts +++ b/apps/meteor/server/lib/moderation/deleteReportedMessages.ts @@ -64,12 +64,8 @@ export async function deleteReportedMessages(messages: IMessage[], user: IUser): ignoreDiscussion: true, ts: { $gt: new Date() }, users: [], - reportedMessages: { - messageIds, - showDeletedStatus, - hidden: keepHistory && !showDeletedStatus, - remove: !keepHistory && !showDeletedStatus, - }, + ids: messageIds, + showDeletedStatus, }); }); } diff --git a/ee/packages/ddp-client/src/types/streams.ts b/ee/packages/ddp-client/src/types/streams.ts index e04a88e6a03b3..5f15e1020c90f 100644 --- a/ee/packages/ddp-client/src/types/streams.ts +++ b/ee/packages/ddp-client/src/types/streams.ts @@ -54,7 +54,8 @@ export interface StreamerEvents { ignoreDiscussion: boolean; ts: Record; users: string[]; - reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; + ids?: string[]; // message ids have priority over ts + showDeletedStatus?: boolean; }, ]; }, diff --git a/packages/core-services/src/events/Events.ts b/packages/core-services/src/events/Events.ts index 3c0637e5d1135..1ab7f5d1df424 100644 --- a/packages/core-services/src/events/Events.ts +++ b/packages/core-services/src/events/Events.ts @@ -88,7 +88,8 @@ export type EventSignatures = { ignoreDiscussion: boolean; ts: Record; users: string[]; - reportedMessages?: { messageIds: string[]; hidden: boolean; showDeletedStatus: boolean; remove: boolean }; + ids?: string[]; // message ids have priority over ts + showDeletedStatus?: boolean; }, ): void; 'notify.deleteCustomSound'(data: { soundData: ICustomSound }): void;