From 8ea5c060f50d1231c3ae3f7cbf5b2fe23ecf51e6 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Tue, 13 Jun 2017 15:20:31 -0400 Subject: [PATCH] closes #5754 --- public/src/client/notifications.js | 11 +--------- public/src/modules/notifications.js | 28 +++++++++---------------- src/notifications.js | 4 +++- src/socket.io/notifications.js | 32 ++++++++++++++++++++++++++--- 4 files changed, 43 insertions(+), 32 deletions(-) diff --git a/public/src/client/notifications.js b/public/src/client/notifications.js index 04213499e3..88216fe61e 100644 --- a/public/src/client/notifications.js +++ b/public/src/client/notifications.js @@ -1,7 +1,7 @@ 'use strict'; -define('forum/notifications', ['components', 'notifications'], function (components, notifs) { +define('forum/notifications', ['components'], function (components) { var Notifications = {}; Notifications.init = function () { @@ -12,14 +12,6 @@ define('forum/notifications', ['components', 'notifications'], function (compone if (err) { return app.alertError(err); } - - socket.emit('notifications.getCount', function (err, count) { - if (err) { - return app.alertError(err.message); - } - - notifs.updateNotifCount(count); - }); }); }); @@ -32,7 +24,6 @@ define('forum/notifications', ['components', 'notifications'], function (compone } components.get('notifications/item').removeClass('unread'); - notifs.updateNotifCount(0); }); }); }; diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js index ecbfaadd1b..928884b69a 100644 --- a/public/src/modules/notifications.js +++ b/public/src/modules/notifications.js @@ -10,29 +10,27 @@ define('notifications', ['sounds', 'translator', 'components'], function (sounds var notifContainer = components.get('notifications'); var notifTrigger = notifContainer.children('a'); var notifList = components.get('notifications/list'); - var notifIcon = components.get('notifications/icon'); - notifTrigger - .on('click', function (e) { - e.preventDefault(); - if (notifContainer.hasClass('open')) { - return; - } + notifTrigger.on('click', function (e) { + e.preventDefault(); + if (notifContainer.hasClass('open')) { + return; + } - Notifications.loadNotifications(notifList); - }); + Notifications.loadNotifications(notifList); + }); notifList.on('click', '[data-nid]', function () { var unread = $(this).hasClass('unread'); - var nid = $(this).attr('data-nid'); if (!unread) { return; } + var nid = $(this).attr('data-nid'); socket.emit('notifications.markRead', nid, function (err) { if (err) { return app.alertError(err.message); } - incrementNotifCount(-1); + if (unreadNotifs[nid]) { delete unreadNotifs[nid]; } @@ -52,7 +50,7 @@ define('notifications', ['sounds', 'translator', 'components'], function (sounds } liEl.toggleClass('unread'); - incrementNotifCount(unread ? -1 : 1); + if (unread && unreadNotifs[nid]) { delete unreadNotifs[nid]; } @@ -60,11 +58,6 @@ define('notifications', ['sounds', 'translator', 'components'], function (sounds return false; }); - function incrementNotifCount(delta) { - var count = parseInt(notifIcon.attr('data-content'), 10) + delta; - Notifications.updateNotifCount(count); - } - socket.on('event:new_notification', function (notifData) { // If a path is defined, show notif data, otherwise show generic data var payload = { @@ -164,7 +157,6 @@ define('notifications', ['sounds', 'translator', 'components'], function (sounds if (err) { app.alertError(err.message); } - Notifications.updateNotifCount(0); unreadNotifs = {}; }); }; diff --git a/src/notifications.js b/src/notifications.js index b11e7ed392..3004a68fc7 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -292,7 +292,9 @@ Notifications.markUnread = function (nid, uid, callback) { async.apply(db.sortedSetAdd, 'uid:' + uid + ':notifications:unread', notification.datetime, nid), ], next); }, - ], callback); + ], function (err) { + callback(err); + }); }; Notifications.markReadMultiple = function (nids, uid, callback) { diff --git a/src/socket.io/notifications.js b/src/socket.io/notifications.js index 80f2bb4e12..3a56ff8a55 100644 --- a/src/socket.io/notifications.js +++ b/src/socket.io/notifications.js @@ -1,5 +1,7 @@ 'use strict'; +var async = require('async'); + var user = require('../user'); var notifications = require('../notifications'); var SocketNotifs = module.exports; @@ -25,13 +27,37 @@ SocketNotifs.deleteAll = function (socket, data, callback) { }; SocketNotifs.markRead = function (socket, nid, callback) { - notifications.markRead(nid, socket.uid, callback); + async.waterfall([ + function (next) { + notifications.markRead(nid, socket.uid, next); + }, + function (next) { + user.notifications.pushCount(socket.uid); + next(); + }, + ], callback); }; SocketNotifs.markUnread = function (socket, nid, callback) { - notifications.markUnread(nid, socket.uid, callback); + async.waterfall([ + function (next) { + notifications.markUnread(nid, socket.uid, next); + }, + function (next) { + user.notifications.pushCount(socket.uid); + next(); + }, + ], callback); }; SocketNotifs.markAllRead = function (socket, data, callback) { - notifications.markAllRead(socket.uid, callback); + async.waterfall([ + function (next) { + notifications.markAllRead(socket.uid, next); + }, + function (next) { + user.notifications.pushCount(socket.uid); + next(); + }, + ], callback); };