2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-06 10:50:21 +08:00
discourse/app/assets/javascripts/discourse/initializers/subscribe-user-notifications.js.es6
Sam aa9b3bb35a FEATURE: allow long polling to go to a different url
Added the site setting long_polling_base_url , this allows you
to farm long polling to a different server.

This setting is very important if a CDN is serving dynamic content.
2014-10-24 13:38:38 +11:00

57 lines
1.9 KiB
JavaScript

/**
Subscribes to user events on the message bus
**/
export default {
name: 'subscribe-user-notifications',
after: 'message-bus',
initialize: function(container) {
var user = Discourse.User.current();
var site = container.lookup('site:main'),
siteSettings = container.lookup('site-settings:main');
var bus = Discourse.MessageBus;
bus.callbackInterval = siteSettings.anon_polling_interval;
bus.backgroundCallbackInterval = siteSettings.background_polling_interval;
bus.baseUrl = siteSettings.long_polling_base_url;
if (bus.baseUrl !== '/') {
// zepto compatible, 1 param only
bus.ajax = function(opts){
opts.headers = opts.headers || {};
opts.headers['X-Shared-Session-Key'] = $('meta[name=shared_session_key]').attr('content');
return $.ajax(opts);
};
} else {
bus.baseUrl = Discourse.getURL('/');
}
if (user) {
bus.callbackInterval = siteSettings.polling_interval;
bus.enableLongPolling = true;
if (user.admin || user.moderator) {
bus.subscribe('/flagged_counts', function(data) {
user.set('site_flagged_posts_count', data.total);
});
}
bus.subscribe("/notification/" + user.get('id'), (function(data) {
var oldUnread = user.get('unread_notifications');
var oldPM = user.get('unread_private_messages');
user.set('unread_notifications', data.unread_notifications);
user.set('unread_private_messages', data.unread_private_messages);
if(oldUnread !== data.unread_notifications || oldPM !== data.unread_private_messages) {
user.set('lastNotificationChange', new Date());
}
}), user.notification_channel_position);
bus.subscribe("/categories", function(data){
_.each(data.categories,function(c){
site.updateCategory(c);
});
});
}
}
};