2015-12-15 14:10:32 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
2020-02-14 23:26:54 -05:00
|
|
|
const sockets = require('../socket.io');
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
module.exports = function (Messaging) {
|
2020-02-14 23:26:54 -05:00
|
|
|
Messaging.deleteMessage = async (mid, uid) => await doDeleteRestore(mid, 1, uid);
|
|
|
|
|
Messaging.restoreMessage = async (mid, uid) => await doDeleteRestore(mid, 0, uid);
|
2017-12-18 14:45:06 -05:00
|
|
|
|
2020-02-14 23:26:54 -05:00
|
|
|
async function doDeleteRestore(mid, state, uid) {
|
2019-07-22 11:18:13 -04:00
|
|
|
const field = state ? 'deleted' : 'restored';
|
2020-02-14 23:26:54 -05:00
|
|
|
const { deleted, roomId } = await Messaging.getMessageFields(mid, ['deleted', 'roomId']);
|
|
|
|
|
if (deleted === state) {
|
2019-07-22 11:18:13 -04:00
|
|
|
throw new Error('[[error:chat-' + field + '-already]]');
|
|
|
|
|
}
|
2017-12-18 14:45:06 -05:00
|
|
|
|
2020-01-23 22:19:15 -05:00
|
|
|
await Messaging.setMessageField(mid, 'deleted', state);
|
2020-02-14 23:26:54 -05:00
|
|
|
|
|
|
|
|
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]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2019-07-22 11:18:13 -04:00
|
|
|
}
|
2017-02-18 02:30:48 -07:00
|
|
|
};
|