Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion apps/meteor/app/lib/server/functions/cleanRoomHistory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ export async function cleanRoomHistory({

if (count) {
const lastMessage = await Messages.getLastVisibleMessageSentWithNoTypeByRoomId(rid);
await Rooms.resetLastMessageById(rid, lastMessage);

await Rooms.resetLastMessageById(rid, lastMessage, -count);

void api.broadcast('notify.deleteMessageBulk', rid, {
rid,
excludePinned,
Expand Down
14 changes: 6 additions & 8 deletions apps/meteor/app/lib/server/functions/deleteMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,14 @@ export async function deleteMessage(message: IMessage, user: IUser): Promise<voi
const room = await Rooms.findOneById(message.rid, { projection: { lastMessage: 1, prid: 1, mid: 1, federated: 1 } });

// update last message
if (settings.get('Store_Last_Message')) {
if (!room?.lastMessage || room.lastMessage._id === message._id) {
const lastMessageNotDeleted = await Messages.getLastVisibleMessageSentWithNoTypeByRoomId(message.rid);
await Rooms.resetLastMessageById(message.rid, lastMessageNotDeleted);
}
if (settings.get('Store_Last_Message') && (!room?.lastMessage || room.lastMessage._id === message._id)) {
const lastMessageNotDeleted = await Messages.getLastVisibleMessageSentWithNoTypeByRoomId(message.rid);
await Rooms.resetLastMessageById(message.rid, lastMessageNotDeleted, -1);
} else {
// decrease message count
await Rooms.decreaseMessageCountById(message.rid, 1);
}

// decrease message count
await Rooms.decreaseMessageCountById(message.rid, 1);

await callbacks.run('afterDeleteMessage', deletedMsg, room);

if (keepHistory || showDeletedStatus) {
Expand Down
12 changes: 0 additions & 12 deletions apps/meteor/server/models/raw/Messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import type {
IMessageWithPendingFileImport,
} from '@rocket.chat/core-typings';
import type { FindPaginated, IMessagesModel } from '@rocket.chat/model-typings';
import { Rooms } from '@rocket.chat/models';
import type { PaginatedRequest } from '@rocket.chat/rest-typings';
import { escapeRegExp } from '@rocket.chat/string-helpers';
import type {
Expand Down Expand Up @@ -1340,8 +1339,6 @@ export class MessagesRaw extends BaseRaw<IMessage> implements IMessagesModel {

const data = Object.assign(record, extraData);

await Rooms.incMsgCountById(rid, 1);

return this.insertOne(data);
}

Expand Down Expand Up @@ -1464,10 +1461,6 @@ export class MessagesRaw extends BaseRaw<IMessage> implements IMessagesModel {

if (!limit) {
const count = (await this.deleteMany(query)).deletedCount - notCountedMessages;
if (count) {
// decrease message count
await Rooms.decreaseMessageCountById(rid, count);
}

return count;
}
Expand All @@ -1481,11 +1474,6 @@ export class MessagesRaw extends BaseRaw<IMessage> implements IMessagesModel {
})
).deletedCount - notCountedMessages;

if (count) {
// decrease message count
await Rooms.decreaseMessageCountById(rid, count);
}

return count;
}

Expand Down
30 changes: 18 additions & 12 deletions apps/meteor/server/models/raw/Rooms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1566,20 +1566,26 @@ export class RoomsRaw extends BaseRaw<IRoom> implements IRoomsModel {
return this.updateOne(query, update);
}

async resetLastMessageById(_id: IRoom['_id'], lastMessage: IRoom['lastMessage']): Promise<UpdateResult> {
async resetLastMessageById(_id: IRoom['_id'], lastMessage?: IRoom['lastMessage'], msgCounter?: number): Promise<UpdateResult> {
const query: Filter<IRoom> = { _id };

const update: UpdateFilter<IRoom> = lastMessage
? {
$set: {
lastMessage,
},
}
: {
$unset: {
lastMessage: 1,
},
};
const update: UpdateFilter<IRoom> = {};

if (lastMessage) {
update.$set = {
lastMessage,
};
} else {
update.$unset = {
lastMessage: 1,
};
}

if (msgCounter) {
update.$inc = {
msgs: msgCounter,
};
}

return this.updateOne(query, update);
}
Expand Down
22 changes: 14 additions & 8 deletions apps/meteor/server/services/messages/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,18 +108,24 @@ export class MessageService extends ServiceClassInternal implements IMessageServ
if (!username) {
throw new Error('The username cannot be empty.');
}
const result = await Messages.createWithTypeRoomIdMessageUserAndUnread(
type,
rid,
message,
{ _id: userId, username, name },
settings.get('Message_Read_Receipt_Enabled'),
extraData,
);

const [result] = await Promise.all([
Messages.createWithTypeRoomIdMessageUserAndUnread(
type,
rid,
message,
{ _id: userId, username, name },
settings.get('Message_Read_Receipt_Enabled'),
extraData,
),
Rooms.incMsgCountById(rid, 1),
]);

void broadcastMessageSentEvent({
id: result.insertedId,
broadcastCallback: async (message) => this.api?.broadcast('message.sent', message),
});

return result.insertedId;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/model-typings/src/models/IRoomsModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ export interface IRoomsModel extends IBaseModel<IRoom> {
incUsersCountById(rid: string, inc: number): Promise<UpdateResult>;
incUsersCountNotDMsByIds(rids: string[], inc: number): Promise<Document | UpdateResult>;
setLastMessageById(rid: string, lastMessage: IRoom['lastMessage']): Promise<UpdateResult>;
resetLastMessageById(rid: string, lastMessage?: IMessage | null): Promise<UpdateResult>;
resetLastMessageById(rid: string, lastMessage?: IMessage | null, msgCounter?: number): Promise<UpdateResult>;
Comment thread
sampaiodiego marked this conversation as resolved.
Outdated
replaceUsername(username: string, newUsername: string): Promise<UpdateResult | Document>;
replaceMutedUsername(username: string, newUsername: string): Promise<UpdateResult | Document>;
replaceUsernameOfUserByUserId(userId: string, newUsername: string): Promise<UpdateResult | Document>;
Expand Down