From abb77d03f87b772735dbb344ed2197ec53110428 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Thu, 15 Mar 2018 15:37:39 -0300 Subject: [PATCH 1/5] Continuous sound notifications when new Livechat messages arrive. --- packages/rocketchat-i18n/i18n/en.i18n.json | 1 + packages/rocketchat-i18n/i18n/pt.i18n.json | 1 + .../client/startup/notifyUnreadRooms.js | 30 +++++++++++++++++++ packages/rocketchat-livechat/config.js | 7 +++++ packages/rocketchat-livechat/package.js | 3 ++ 5 files changed, 42 insertions(+) create mode 100644 packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 706fefe310ed..8068354e9dcd 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -431,6 +431,7 @@ "Conversation": "Conversation", "Conversation_closed": "Conversation closed: __comment__.", "Convert_Ascii_Emojis": "Convert ASCII to Emoji", + "Continuous_sound_notifications_for_new_livechat_message": "Continuous sound notifications for new livechat message", "Copied": "Copied", "Copy": "Copy", "Copy_to_clipboard": "Copy to clipboard", diff --git a/packages/rocketchat-i18n/i18n/pt.i18n.json b/packages/rocketchat-i18n/i18n/pt.i18n.json index 7e5d014c8bd1..158fc484c82f 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -300,6 +300,7 @@ "Conversation": "Conversa", "Conversation_closed": "Chat encerrado: __comment__.", "Convert_Ascii_Emojis": "Converter ASCII para Emoji", + "Continuous_sound_notifications_for_new_livechat_message": "Notificações contínuas de som para nova mensagem de livechat", "Copied": "Copiado", "Copy": "Cópia", "Copy_to_clipboard": "Copiar para área de transferência", diff --git a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js new file mode 100644 index 000000000000..64445400a49a --- /dev/null +++ b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js @@ -0,0 +1,30 @@ +Meteor.startup(function() { + Tracker.autorun(function() { + if (RocketChat.settings.get('Livechat_continuous_sound_notification_new_livechat_message')) { + const unreadAlertCount = ChatSubscription.find({ t: 'l', open: true, alert: true, disableNotifications: { $ne: true }, audioNotifications: { $ne: 'nothing'} }, { fields: { unread: 1, alert: 1, rid: 1, unreadAlert: 1 } }).count(); + const user = RocketChat.models.Users.findOne(Meteor.userId(), { + fields: { + 'settings.preferences.newRoomNotification': 1 + } + }); + + const newRoomNotification = RocketChat.getUserPreference(user, 'newRoomNotification'); + const [audio] = $(`audio#${ newRoomNotification }`); + if (audio && audio.play) { + if (unreadAlertCount > 0) { + Meteor.setTimeout(() => { + if (audio && audio.play) { + audio.loop = true; + return audio.play(); + } + }, 1000); + } else { + if (audio.pause) { + audio.pause(); + } + audio.loop = false; + } + } + } + }); +}); diff --git a/packages/rocketchat-livechat/config.js b/packages/rocketchat-livechat/config.js index 3a7815a4d6e8..52001b3927fe 100644 --- a/packages/rocketchat-livechat/config.js +++ b/packages/rocketchat-livechat/config.js @@ -193,6 +193,13 @@ Meteor.startup(function() { i18nLabel: 'Office_hours_enabled' }); + RocketChat.settings.add('Livechat_continuous_sound_notification_new_livechat_message', false, { + type: 'boolean', + group: 'Livechat', + public: true, + i18nLabel: 'Continuous_sound_notifications_for_new_livechat_message' + }); + RocketChat.settings.add('Livechat_videocall_enabled', false, { type: 'boolean', group: 'Livechat', diff --git a/packages/rocketchat-livechat/package.js b/packages/rocketchat-livechat/package.js index c0f0511a44d9..374874fd56e2 100644 --- a/packages/rocketchat-livechat/package.js +++ b/packages/rocketchat-livechat/package.js @@ -70,6 +70,9 @@ Package.onUse(function(api) { api.addFiles('client/methods/changeLivechatStatus.js', 'client'); + //client startup + api.addFiles('client/startup/notifyUnreadRooms.js', 'client'); + // client views api.addFiles('client/views/app/livechatAppearance.html', 'client'); api.addFiles('client/views/app/livechatAppearance.js', 'client'); From 9970245871989c70199b1068a7b9a8648d02f172 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Tue, 17 Apr 2018 17:52:26 -0300 Subject: [PATCH 2/5] Fix PR review. Now the sound notification will be played only in new livechat rooms. --- packages/rocketchat-i18n/i18n/en.i18n.json | 2 +- packages/rocketchat-i18n/i18n/pt.i18n.json | 2 +- .../rocketchat-livechat/client/startup/notifyUnreadRooms.js | 4 ++-- packages/rocketchat-livechat/config.js | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 8068354e9dcd..8d1f914fb12d 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -431,7 +431,7 @@ "Conversation": "Conversation", "Conversation_closed": "Conversation closed: __comment__.", "Convert_Ascii_Emojis": "Convert ASCII to Emoji", - "Continuous_sound_notifications_for_new_livechat_message": "Continuous sound notifications for new livechat message", + "Continuous_sound_notifications_for_new_livechat_room": "Continuous sound notifications for new livechat room", "Copied": "Copied", "Copy": "Copy", "Copy_to_clipboard": "Copy to clipboard", diff --git a/packages/rocketchat-i18n/i18n/pt.i18n.json b/packages/rocketchat-i18n/i18n/pt.i18n.json index 158fc484c82f..389d87ef46a7 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -300,7 +300,7 @@ "Conversation": "Conversa", "Conversation_closed": "Chat encerrado: __comment__.", "Convert_Ascii_Emojis": "Converter ASCII para Emoji", - "Continuous_sound_notifications_for_new_livechat_message": "Notificações contínuas de som para nova mensagem de livechat", + "Continuous_sound_notifications_for_new_livechat_room": "Notificações contínuas de som para nova sala de livechat", "Copied": "Copiado", "Copy": "Cópia", "Copy_to_clipboard": "Copiar para área de transferência", diff --git a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js index 64445400a49a..174bae55ddd7 100644 --- a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js +++ b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js @@ -1,7 +1,7 @@ Meteor.startup(function() { Tracker.autorun(function() { - if (RocketChat.settings.get('Livechat_continuous_sound_notification_new_livechat_message')) { - const unreadAlertCount = ChatSubscription.find({ t: 'l', open: true, alert: true, disableNotifications: { $ne: true }, audioNotifications: { $ne: 'nothing'} }, { fields: { unread: 1, alert: 1, rid: 1, unreadAlert: 1 } }).count(); + if (RocketChat.settings.get('Livechat_continuous_sound_notification_new_livechat_room')) { + const unreadAlertCount = ChatSubscription.find({ t: 'l', open: true, alert: true, unread: 1, disableNotifications: { $ne: true }, audioNotifications: { $ne: 'nothing'} }, { fields: { unread: 1, alert: 1, rid: 1, unreadAlert: 1 } }).count(); const user = RocketChat.models.Users.findOne(Meteor.userId(), { fields: { 'settings.preferences.newRoomNotification': 1 diff --git a/packages/rocketchat-livechat/config.js b/packages/rocketchat-livechat/config.js index 52001b3927fe..cbc46c96361c 100644 --- a/packages/rocketchat-livechat/config.js +++ b/packages/rocketchat-livechat/config.js @@ -193,11 +193,11 @@ Meteor.startup(function() { i18nLabel: 'Office_hours_enabled' }); - RocketChat.settings.add('Livechat_continuous_sound_notification_new_livechat_message', false, { + RocketChat.settings.add('Livechat_continuous_sound_notification_new_livechat_room', false, { type: 'boolean', group: 'Livechat', public: true, - i18nLabel: 'Continuous_sound_notifications_for_new_livechat_message' + i18nLabel: 'Continuous_sound_notifications_for_new_livechat_room' }); RocketChat.settings.add('Livechat_videocall_enabled', false, { From d5e4e1496992a5df63c14e20475143e74a551ce2 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Sat, 21 Apr 2018 01:27:28 -0300 Subject: [PATCH 3/5] fix review --- .../client/startup/notifyUnreadRooms.js | 69 ++++++++++++------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js index 174bae55ddd7..15cb76fa74d5 100644 --- a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js +++ b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js @@ -1,30 +1,51 @@ +let audio = null; + +const stop = audio => { + if (!audio) { + return; + } + audio.loop = false; + return audio.pause && audio.pause(); +}; +const play = audio => { + if (!audio) { + return; + } + audio.loop = true; + return audio.play && audio.play(); +}; + Meteor.startup(function() { Tracker.autorun(function() { - if (RocketChat.settings.get('Livechat_continuous_sound_notification_new_livechat_room')) { - const unreadAlertCount = ChatSubscription.find({ t: 'l', open: true, alert: true, unread: 1, disableNotifications: { $ne: true }, audioNotifications: { $ne: 'nothing'} }, { fields: { unread: 1, alert: 1, rid: 1, unreadAlert: 1 } }).count(); - const user = RocketChat.models.Users.findOne(Meteor.userId(), { - fields: { - 'settings.preferences.newRoomNotification': 1 - } - }); - - const newRoomNotification = RocketChat.getUserPreference(user, 'newRoomNotification'); - const [audio] = $(`audio#${ newRoomNotification }`); - if (audio && audio.play) { - if (unreadAlertCount > 0) { - Meteor.setTimeout(() => { - if (audio && audio.play) { - audio.loop = true; - return audio.play(); - } - }, 1000); - } else { - if (audio.pause) { - audio.pause(); - } - audio.loop = false; - } + + + const subs = RocketChat.models.Subscriptions.find({ t: 'l', ls : { $exists: 0 } }).count(); + + const user = RocketChat.models.Users.findOne(Meteor.userId(), { + fields: { + 'settings.preferences.newRoomNotification': 1 } + }); + + const newRoomNotification = RocketChat.getUserPreference(user, 'newRoomNotification'); + + stop(audio); + + if (!RocketChat.settings.get('Livechat_continuous_sound_notification_new_livechat_room')) { + return; } + + [audio] = $(`#${ newRoomNotification }`); + + if (!audio || !audio.play || !audio.pause) { + return; + } + + if (subs === 0) { + return; + } + + play(audio); + }); }); From aa3bc3aede1872645d1299900bd70b63ba5fd128 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Mon, 23 Apr 2018 13:30:30 -0300 Subject: [PATCH 4/5] Fixed new room sound notification being paused when a room gets focus. --- .../client/startup/notifyUnreadRooms.js | 24 +++++++------------ .../rocketchat-ui/client/lib/notification.js | 4 +++- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js index 15cb76fa74d5..a6673ed23b66 100644 --- a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js +++ b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js @@ -18,9 +18,18 @@ const play = audio => { Meteor.startup(function() { Tracker.autorun(function() { + if (!RocketChat.settings.get('Livechat_continuous_sound_notification_new_livechat_room')) { + stop(audio); + return; + } const subs = RocketChat.models.Subscriptions.find({ t: 'l', ls : { $exists: 0 } }).count(); + if (subs === 0) { + stop(audio); + return; + } + const user = RocketChat.models.Users.findOne(Meteor.userId(), { fields: { 'settings.preferences.newRoomNotification': 1 @@ -29,22 +38,7 @@ Meteor.startup(function() { const newRoomNotification = RocketChat.getUserPreference(user, 'newRoomNotification'); - stop(audio); - - if (!RocketChat.settings.get('Livechat_continuous_sound_notification_new_livechat_room')) { - return; - } - [audio] = $(`#${ newRoomNotification }`); - - if (!audio || !audio.play || !audio.pause) { - return; - } - - if (subs === 0) { - return; - } - play(audio); }); diff --git a/packages/rocketchat-ui/client/lib/notification.js b/packages/rocketchat-ui/client/lib/notification.js index 8371a53d61fb..7688ae79c28e 100644 --- a/packages/rocketchat-ui/client/lib/notification.js +++ b/packages/rocketchat-ui/client/lib/notification.js @@ -120,7 +120,9 @@ const KonchatNotification = { // $('.link-room-' + rid).addClass('new-room-highlight') removeRoomNotification(rid) { - Tracker.nonreactive(() => Session.set('newRoomSound', [])); + let newRoomSound = Session.get('newRoomSound'); + newRoomSound = _.without(newRoomSound, rid); + Tracker.nonreactive(() => Session.set('newRoomSound', newRoomSound)); return $(`.link-room-${ rid }`).removeClass('new-room-highlight'); } From 4fa2a262190b9fea2c8113077ce84275682ec2fd Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 30 May 2018 20:26:24 -0300 Subject: [PATCH 5/5] Check only opened subscriptions --- .../rocketchat-livechat/client/startup/notifyUnreadRooms.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js index a6673ed23b66..e4d70c16464d 100644 --- a/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js +++ b/packages/rocketchat-livechat/client/startup/notifyUnreadRooms.js @@ -23,8 +23,7 @@ Meteor.startup(function() { return; } - const subs = RocketChat.models.Subscriptions.find({ t: 'l', ls : { $exists: 0 } }).count(); - + const subs = RocketChat.models.Subscriptions.find({ t: 'l', ls : { $exists: 0 }, open: true }).count(); if (subs === 0) { stop(audio); return;