Pārlūkot izejas kodu

Option to ignore certain JIDs' chat state notifications

JC Brand 9 gadi atpakaļ
vecāks
revīzija
ae6a7f4b02
3 mainītis faili ar 24 papildinājumiem un 0 dzēšanām
  1. 1 0
      docs/CHANGES.md
  2. 17 0
      docs/source/configuration.rst
  3. 6 0
      src/converse-notification.js

+ 1 - 0
docs/CHANGES.md

@@ -6,6 +6,7 @@
   As a result `converse.listen.on('message');` has been deprecated, use `converse.stanza.on('message');` instead. [jcbrand]
   As a result `converse.listen.on('message');` has been deprecated, use `converse.stanza.on('message');` instead. [jcbrand]
 - Emit an event `chatBoxInitialized` once a chat box's initialize method has been called. [jcbrand]
 - Emit an event `chatBoxInitialized` once a chat box's initialize method has been called. [jcbrand]
 - Emit an event `statusInitialized` once the user's own status has been initialized upon startup. [jcbrand]
 - Emit an event `statusInitialized` once the user's own status has been initialized upon startup. [jcbrand]
+- New config option [chatstate_notification_blacklist](https://conversejs.org/docs/html/configuration.html#chatstate_notification_blacklist) [jcbrand]
 - Split converse.js up into different plugin modules. [jcbrand]
 - Split converse.js up into different plugin modules. [jcbrand]
 - Don't play sound notifications for OTR messages which are setting up an
 - Don't play sound notifications for OTR messages which are setting up an
   encrypted session. [jcbrand]
   encrypted session. [jcbrand]

+ 17 - 0
docs/source/configuration.rst

@@ -298,6 +298,23 @@ This setting can only be used together with ``allow_otr = true``.
     to retrieve your private key and read your all the chat messages in your
     to retrieve your private key and read your all the chat messages in your
     current session. Previous sessions however cannot be decrypted.
     current session. Previous sessions however cannot be decrypted.
 
 
+ chatstate_notification_blacklist
+---------------------------------
+
+* Default: ``[]``
+
+A list of JIDs to be ignored when showing desktop notifications of changed chat states.
+
+Some user's clients routinely connect and disconnect (likely on mobile) and
+each time a chat state notificaion is received (``online`` when connecting and
+then ``offline`` when disconnecting).
+
+When desktop notifications are turned on (see `show-desktop-notifications`_),
+then you'll receive notification messages each time this happens.
+
+Receiving constant notifications that a user's client is connecting and disconnecting
+is annoying, so this option allows you to ignore those JIDs.
+
 csi_waiting_time
 csi_waiting_time
 ----------------
 ----------------
 
 

+ 6 - 0
src/converse-notification.js

@@ -31,6 +31,8 @@
 
 
             this.updateSettings({
             this.updateSettings({
                 show_desktop_notifications: true,
                 show_desktop_notifications: true,
+                chatstate_notification_blacklist: [],
+                // ^ a list of JIDs to ignore concerning chat state notifications
                 play_sounds: false,
                 play_sounds: false,
                 sounds_path: '/sounds/',
                 sounds_path: '/sounds/',
                 notification_icon: '/logo/conversejs.png'
                 notification_icon: '/logo/conversejs.png'
@@ -127,6 +129,10 @@
                 /* Creates an HTML5 Notification to inform of a change in a
                 /* Creates an HTML5 Notification to inform of a change in a
                  * contact's chat state.
                  * contact's chat state.
                  */
                  */
+                if (_.contains(converse.chatstate_notification_blacklist, contact.get('jid'))) {
+                    // Don't notify if the user is being ignored.
+                    return;
+                }
                 var chat_state = contact.chat_status,
                 var chat_state = contact.chat_status,
                     message = null;
                     message = null;
                 if (chat_state === 'offline') {
                 if (chat_state === 'offline') {