You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
1.0 KiB
JavaScript

'use strict';
const sockets = require('../socket.io');
module.exports = function (Messaging) {
Messaging.deleteMessage = async (mid, uid) => await doDeleteRestore(mid, 1, uid);
Messaging.restoreMessage = async (mid, uid) => await doDeleteRestore(mid, 0, uid);
async function doDeleteRestore(mid, state, uid) {
const field = state ? 'deleted' : 'restored';
const { deleted, roomId } = await Messaging.getMessageFields(mid, ['deleted', 'roomId']);
if (deleted === state) {
throw new Error('[[error:chat-' + field + '-already]]');
}
await Messaging.setMessageField(mid, 'deleted', state);
const [uids, messages] = await Promise.all([
Messaging.getUidsInRoom(roomId, 0, -1),
Messaging.getMessagesData([mid], uid, roomId, true),
]);
uids.forEach(function (_uid) {
if (parseInt(_uid, 10) !== parseInt(uid, 10)) {
if (state === 1) {
sockets.in('uid_' + _uid).emit('event:chats.delete', mid);
} else if (state === 0) {
sockets.in('uid_' + _uid).emit('event:chats.restore', messages[0]);
}
}
});
}
};