1
0
Fork 0

Fix socket notification with multiple user tabs

This commit is contained in:
Chocobozzz 2019-08-22 10:33:22 +02:00
parent 916937d7da
commit 1b42d73f44
No known key found for this signature in database
GPG key ID: 583A612D890159BE

View file

@ -8,7 +8,7 @@ class PeerTubeSocket {
private static instance: PeerTubeSocket private static instance: PeerTubeSocket
private userNotificationSockets: { [ userId: number ]: SocketIO.Socket } = {} private userNotificationSockets: { [ userId: number ]: SocketIO.Socket[] } = {}
private constructor () {} private constructor () {}
@ -22,23 +22,27 @@ class PeerTubeSocket {
logger.debug('User %d connected on the notification system.', userId) logger.debug('User %d connected on the notification system.', userId)
this.userNotificationSockets[userId] = socket if (!this.userNotificationSockets[userId]) this.userNotificationSockets[userId] = []
this.userNotificationSockets[userId].push(socket)
socket.on('disconnect', () => { socket.on('disconnect', () => {
logger.debug('User %d disconnected from SocketIO notifications.', userId) logger.debug('User %d disconnected from SocketIO notifications.', userId)
delete this.userNotificationSockets[userId] this.userNotificationSockets[userId] = this.userNotificationSockets[userId].filter(s => s !== socket)
}) })
}) })
} }
sendNotification (userId: number, notification: UserNotificationModel) { sendNotification (userId: number, notification: UserNotificationModel) {
const socket = this.userNotificationSockets[userId] const sockets = this.userNotificationSockets[userId]
if (!socket) return if (!sockets) return
for (const socket of sockets) {
socket.emit('new-notification', notification.toFormattedJSON()) socket.emit('new-notification', notification.toFormattedJSON())
} }
}
static get Instance () { static get Instance () {
return this.instance || (this.instance = new this()) return this.instance || (this.instance = new this())