isolate notifications in channel per user
This commit is contained in:
parent
f83494d012
commit
82e2fae1b8
|
@ -46,8 +46,8 @@
|
||||||
var bus, user;
|
var bus, user;
|
||||||
bus = Discourse.MessageBus;
|
bus = Discourse.MessageBus;
|
||||||
|
|
||||||
// We don't want to receive any previous user notidications
|
// We don't want to receive any previous user notifications
|
||||||
bus.unsubscribe("/notification");
|
bus.unsubscribe("/notification/*");
|
||||||
bus.callbackInterval = Discourse.SiteSettings.anon_polling_interval;
|
bus.callbackInterval = Discourse.SiteSettings.anon_polling_interval;
|
||||||
bus.enableLongPolling = false;
|
bus.enableLongPolling = false;
|
||||||
user = this.get('currentUser');
|
user = this.get('currentUser');
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
return user.set('site_flagged_posts_count', data.total);
|
return user.set('site_flagged_posts_count', data.total);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return bus.subscribe("/notification", (function(data) {
|
return bus.subscribe("/notification/" + user.id, (function(data) {
|
||||||
user.set('unread_notifications', data.unread_notifications);
|
user.set('unread_notifications', data.unread_notifications);
|
||||||
return user.set('unread_private_messages', data.unread_private_messages);
|
return user.set('unread_private_messages', data.unread_private_messages);
|
||||||
}), user.notification_channel_position);
|
}), user.notification_channel_position);
|
||||||
|
@ -98,7 +98,8 @@
|
||||||
// If we're in the same topic, don't push the state
|
// If we're in the same topic, don't push the state
|
||||||
topicRegexp = /\/t\/([^\/]+)\/(\d+)\/?(\d+)?/;
|
topicRegexp = /\/t\/([^\/]+)\/(\d+)\/?(\d+)?/;
|
||||||
newMatches = topicRegexp.exec(path);
|
newMatches = topicRegexp.exec(path);
|
||||||
if (newTopicId = newMatches ? newMatches[2] : void 0) {
|
newTopicId = newMatches ? newMatches[2] : null;
|
||||||
|
if (newTopicId) {
|
||||||
oldMatches = topicRegexp.exec(window.location.pathname);
|
oldMatches = topicRegexp.exec(window.location.pathname);
|
||||||
if ((oldTopicId = oldMatches ? oldMatches[2] : void 0) && (oldTopicId === newTopicId)) {
|
if ((oldTopicId = oldMatches ? oldMatches[2] : void 0) && (oldTopicId === newTopicId)) {
|
||||||
Discourse.replaceState(path);
|
Discourse.replaceState(path);
|
||||||
|
@ -255,8 +256,8 @@
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}).each(function(item) {
|
}).each(function(item) {
|
||||||
var output;
|
var output = f("" + item.k, item.v);
|
||||||
if (output = f("" + item.k, item.v)) {
|
if (output) {
|
||||||
return console.log(output);
|
return console.log(output);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -288,7 +289,7 @@
|
||||||
oldBuilder.call(this);
|
oldBuilder.call(this);
|
||||||
}
|
}
|
||||||
return builder.call(this);
|
return builder.call(this);
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
start: function() {
|
start: function() {
|
||||||
this.bindDOMEvents();
|
this.bindDOMEvents();
|
||||||
|
|
|
@ -49,10 +49,10 @@ class MessageBusObserver < DiscourseObserver
|
||||||
|
|
||||||
def refresh_notification_count(notification)
|
def refresh_notification_count(notification)
|
||||||
user_id = notification.user.id
|
user_id = notification.user.id
|
||||||
MessageBus.publish("/notification",
|
MessageBus.publish("/notification/#{user_id}",
|
||||||
{unread_notifications: notification.user.unread_notifications,
|
{unread_notifications: notification.user.unread_notifications,
|
||||||
unread_private_messages: notification.user.unread_private_messages},
|
unread_private_messages: notification.user.unread_private_messages},
|
||||||
user_ids: [notification.user.id] # only publish the notification to this user
|
user_ids: [user_id] # only publish the notification to this user
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -85,7 +85,6 @@ class PostAlertObserver < ActiveRecord::Observer
|
||||||
|
|
||||||
# Don't notify the same user about the same notification on the same post
|
# Don't notify the same user about the same notification on the same post
|
||||||
return if user.notifications.exists?(notification_type: type, topic_id: post.topic_id, post_number: post.post_number)
|
return if user.notifications.exists?(notification_type: type, topic_id: post.topic_id, post_number: post.post_number)
|
||||||
|
|
||||||
user.notifications.create(notification_type: type,
|
user.notifications.create(notification_type: type,
|
||||||
topic_id: post.topic_id,
|
topic_id: post.topic_id,
|
||||||
post_number: post.post_number,
|
post_number: post.post_number,
|
||||||
|
|
2040
db/structure.sql
2040
db/structure.sql
File diff suppressed because it is too large
Load Diff
|
@ -38,7 +38,6 @@ class MessageBus::Client
|
||||||
r = []
|
r = []
|
||||||
@subscriptions.each do |k,v|
|
@subscriptions.each do |k,v|
|
||||||
next if v.to_i < 0
|
next if v.to_i < 0
|
||||||
|
|
||||||
messages = MessageBus.backlog(k,v)
|
messages = MessageBus.backlog(k,v)
|
||||||
messages.each do |msg|
|
messages.each do |msg|
|
||||||
allowed = !msg.user_ids || msg.user_ids.include?(self.user_id)
|
allowed = !msg.user_ids || msg.user_ids.include?(self.user_id)
|
||||||
|
|
Loading…
Reference in New Issue