FIX: correctly listens to chat notifications (#20246)

This change will ensure we enter and subscribe to presence channels on start and will use the correct "change" events from presence channel to update state.
This commit is contained in:
Joffrey JAFFEUX 2023-02-12 23:26:11 +01:00 committed by GitHub
parent 5fb6dd9bfa
commit e4738cb1bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 7 deletions

View File

@ -1,12 +1,11 @@
import Service, { inject as service } from "@ember/service";
import discourseDebounce from "discourse-common/lib/debounce";
import { withPluginApi } from "discourse/lib/plugin-api";
import { isTesting } from "discourse-common/config/environment";
import {
alertChannel,
onNotification,
} from "discourse/lib/desktop-notifications";
import { bind, observes } from "discourse-common/utils/decorators";
import { bind } from "discourse-common/utils/decorators";
export default class ChatNotificationManager extends Service {
@service presence;
@ -36,6 +35,17 @@ export default class ChatNotificationManager extends Service {
withPluginApi("0.12.1", (api) => {
api.onPageChange(this._pageChanged);
});
this._pageChanged();
this._chatPresenceChannel.on(
"change",
this._subscribeToCorrectNotifications
);
this._corePresenceChannel.on(
"change",
this._subscribeToCorrectNotifications
);
}
willDestroy() {
@ -45,8 +55,17 @@ export default class ChatNotificationManager extends Service {
return;
}
this._chatPresenceChannel.off(
"change",
this._subscribeToCorrectNotifications
);
this._chatPresenceChannel.unsubscribe();
this._chatPresenceChannel.leave();
this._corePresenceChannel.off(
"change",
this._subscribeToCorrectNotifications
);
this._corePresenceChannel.unsubscribe();
this._corePresenceChannel.leave();
}
@ -66,11 +85,6 @@ export default class ChatNotificationManager extends Service {
}
}
@observes("_chatPresenceChannel.count", "_corePresenceChannel.count")
_channelCountsChanged() {
discourseDebounce(this, this._subscribeToCorrectNotifications, 2000);
}
_coreAlertChannel() {
return alertChannel(this.currentUser);
}
@ -79,6 +93,7 @@ export default class ChatNotificationManager extends Service {
return `/chat${alertChannel(this.currentUser)}`;
}
@bind
_subscribeToCorrectNotifications() {
const oneTabForEachOpen =
this._chatPresenceChannel.count > 0 &&