From ef923f1bb126c14f1595c9931e129c8d8497c7c3 Mon Sep 17 00:00:00 2001 From: Andrei Prigorshnev Date: Thu, 7 Jul 2022 17:37:05 +0400 Subject: [PATCH] FEATURE: Publish everyone's status to everyone (#17343) --- .../subscribe-user-notifications.js | 4 ++-- .../javascripts/discourse/app/models/user.js | 20 ++++--------------- app/models/user.rb | 2 +- spec/requests/user_status_controller_spec.rb | 17 ++++++++-------- 4 files changed, 16 insertions(+), 27 deletions(-) diff --git a/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js b/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js index 3244064e1a7..1b7eb903e84 100644 --- a/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js +++ b/app/assets/javascripts/discourse/app/initializers/subscribe-user-notifications.js @@ -116,8 +116,8 @@ export default { user.updateDoNotDisturbStatus(data.ends_at); }); - bus.subscribe(`/user-status/${user.id}`, (data) => { - appEvents.trigger("current-user-status:changed", data); + bus.subscribe(`/user-status`, (data) => { + appEvents.trigger("user-status:changed", data); }); const site = container.lookup("site:main"); diff --git a/app/assets/javascripts/discourse/app/models/user.js b/app/assets/javascripts/discourse/app/models/user.js index bfb0f21be0f..b2ee18e2434 100644 --- a/app/assets/javascripts/discourse/app/models/user.js +++ b/app/assets/javascripts/discourse/app/models/user.js @@ -1185,13 +1185,7 @@ User.reopen(Evented, { trackStatus() { this.addObserver("status", this, "_statusChanged"); - if (this.isCurrent) { - this.appEvents.on( - "current-user-status:changed", - this, - this._updateStatus - ); - } + this.appEvents.on("user-status:changed", this, this._updateStatus); if (this.status && this.status.ends_at) { this._scheduleStatusClearing(this.status.ends_at); @@ -1200,13 +1194,7 @@ User.reopen(Evented, { stopTrackingStatus() { this.removeObserver("status", this, "_statusChanged"); - if (this.isCurrent) { - this.appEvents.off( - "current-user-status:changed", - this, - this._updateStatus - ); - } + this.appEvents.off("user-status:changed", this, this._updateStatus); this._unscheduleStatusClearing(); }, @@ -1244,8 +1232,8 @@ User.reopen(Evented, { this.set("status", null); }, - _updateStatus(status) { - this.set("status", status); + _updateStatus(statuses) { + this.set("status", statuses[this.id]); }, }); diff --git a/app/models/user.rb b/app/models/user.rb index d385f093f25..abf0f69628d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -676,7 +676,7 @@ class User < ActiveRecord::Base payload = nil end - MessageBus.publish("/user-status/#{id}", payload, user_ids: [id]) + MessageBus.publish("/user-status", { id => payload }, group_ids: [Group::AUTO_GROUPS[:trust_level_0]]) end def password=(password) diff --git a/spec/requests/user_status_controller_spec.rb b/spec/requests/user_status_controller_spec.rb index adb617351de..0cb5e8fff13 100644 --- a/spec/requests/user_status_controller_spec.rb +++ b/spec/requests/user_status_controller_spec.rb @@ -98,12 +98,12 @@ describe UserStatusController do end expect(messages.size).to eq(1) - expect(messages[0].channel).to eq("/user-status/#{user.id}") - expect(messages[0].user_ids).to eq([user.id]) + expect(messages[0].channel).to eq("/user-status") + expect(messages[0].group_ids).to eq([Group::AUTO_GROUPS[:trust_level_0]]) - expect(messages[0].data[:description]).to eq(status) - expect(messages[0].data[:emoji]).to eq(emoji) - expect(messages[0].data[:ends_at]).to eq(ends_at) + expect(messages[0].data[user.id][:description]).to eq(status) + expect(messages[0].data[user.id][:emoji]).to eq(emoji) + expect(messages[0].data[user.id][:ends_at]).to eq(ends_at) end end end @@ -145,9 +145,10 @@ describe UserStatusController do messages = MessageBus.track_publish { delete "/user-status.json" } expect(messages.size).to eq(1) - expect(messages[0].channel).to eq("/user-status/#{user.id}") - expect(messages[0].data).to eq(nil) - expect(messages[0].user_ids).to eq([user.id]) + expect(messages[0].channel).to eq("/user-status") + expect(messages[0].group_ids).to eq([Group::AUTO_GROUPS[:trust_level_0]]) + + expect(messages[0].data[user.id]).to eq(nil) end end end