The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/server/publications/subscription.js

83 lines
1.6 KiB

const fields = {
t: 1,
ts: 1,
ls: 1,
name: 1,
fname: 1,
rid: 1,
code: 1,
f: 1,
u: 1,
open: 1,
alert: 1,
roles: 1,
unread: 1,
userMentions: 1,
groupMentions: 1,
archived: 1,
audioNotifications: 1,
audioNotificationValue: 1,
desktopNotifications: 1,
desktopNotificationDuration: 1,
mobilePushNotifications: 1,
emailNotifications: 1,
unreadAlert: 1,
_updatedAt: 1,
blocked: 1,
blocker: 1,
autoTranslate: 1,
autoTranslateLanguage: 1,
disableNotifications: 1,
hideUnreadStatus: 1,
muteGroupMentions: 1,
ignored: 1,
E2EKey: 1,
};
Meteor.methods({
'subscriptions/get'(updatedAt) {
if (!Meteor.userId()) {
return [];
}
this.unblock();
const options = { fields };
const records = RocketChat.models.Subscriptions.findByUserId(Meteor.userId(), options).fetch();
if (updatedAt instanceof Date) {
return {
update: records.filter(function(record) {
return record._updatedAt > updatedAt;
}),
remove: RocketChat.models.Subscriptions.trashFindDeletedAfter(updatedAt, {
'u._id': Meteor.userId(),
}, {
fields: {
_id: 1,
_deletedAt: 1,
},
}).fetch(),
};
}
return records;
},
});
RocketChat.models.Subscriptions.on('change', ({ clientAction, id, data }) => {
switch (clientAction) {
case 'updated':
case 'inserted':
// Override data cuz we do not publish all fields
data = RocketChat.models.Subscriptions.findOneById(id, { fields });
break;
case 'removed':
data = RocketChat.models.Subscriptions.trashFindOneById(id, { fields: { u: 1 } });
break;
}
RocketChat.Notifications.notifyUserInThisInstance(data.u._id, 'subscriptions-changed', clientAction, data);
});