fix: #6422, update deleted/restored messages
parent
20fbab9723
commit
067034082f
@ -1,16 +1,33 @@
|
||||
'use strict';
|
||||
|
||||
const sockets = require('../socket.io');
|
||||
|
||||
module.exports = function (Messaging) {
|
||||
Messaging.deleteMessage = async mid => await doDeleteRestore(mid, 1);
|
||||
Messaging.restoreMessage = async mid => await doDeleteRestore(mid, 0);
|
||||
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) {
|
||||
async function doDeleteRestore(mid, state, uid) {
|
||||
const field = state ? 'deleted' : 'restored';
|
||||
const cur = await Messaging.getMessageField(mid, 'deleted');
|
||||
if (cur === state) {
|
||||
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]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue