From 7f1f9ab4eebf91e06c9ae69fa3376b1648edade5 Mon Sep 17 00:00:00 2001
From: ubermanu <e.vodor@gmail.com>
Date: Fri, 19 Mar 2021 14:53:23 +0100
Subject: [PATCH 1/2] bugfix: await for subscriptions when connected

---
 src/plugins/converse-rai.js         | 15 ++++++++-------
 src/plugins/sib-subscribe-to-rai.js |  4 ++--
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/plugins/converse-rai.js b/src/plugins/converse-rai.js
index 7ad059d..3b5fb22 100644
--- a/src/plugins/converse-rai.js
+++ b/src/plugins/converse-rai.js
@@ -108,7 +108,7 @@ converse.plugins.add('converse-rai', {
        * @param {string|Array} jids
        * @returns {void}
        */
-      subscribe(jids) {
+      async subscribe(jids) {
         if (!api.settings.get('muc_subscribe_to_rai')) {
           log.error(`You must enable the 'muc_subscribe_to_rai' option before subscribing to a MUC.`);
           return;
@@ -118,15 +118,16 @@ converse.plugins.add('converse-rai', {
           jids = [jids];
         }
 
-        const muc_domains = jids.map(jid => Strophe.getDomainFromJid(jid));
+        const muc_domains = _.uniq(jids.map(jid => Strophe.getDomainFromJid(jid)));
 
-        _.uniq(muc_domains).forEach(muc_domain => {
-          const rai = $pres({ to: muc_domain, id: u.getUniqueId() }).c('rai', {
+        for (let domain of muc_domains) {
+          const rai = $pres({ to: domain, id: u.getUniqueId() }).c('rai', {
             'xmlns': Strophe.NS.RAI,
           });
-          api.send(rai);
-          log.debug(`Sent RAI stanza for domain "${muc_domain}"`);
-        });
+
+          await _converse.connection.send(rai);
+          log.debug(`Sent RAI stanza for domain "${domain}"`);
+        }
       },
     });
 
diff --git a/src/plugins/sib-subscribe-to-rai.js b/src/plugins/sib-subscribe-to-rai.js
index 100673b..404109f 100644
--- a/src/plugins/sib-subscribe-to-rai.js
+++ b/src/plugins/sib-subscribe-to-rai.js
@@ -57,8 +57,8 @@ converse.plugins.add('sib-subscribe-to-rai', {
       getProjects,
     ])).flat();
 
-    api.listen.on('connected', () => {
-      api.rooms.subscribe(userRooms);
+    api.listen.on('connected', async () => {
+      await api.rooms.subscribe(userRooms);
     });
 
     api.listen.on('chatRoomHasActivity', jid => {
-- 
GitLab


From afbaae04bf3f28b8f832b220e679458b1c9adef6 Mon Sep 17 00:00:00 2001
From: ubermanu <e.vodor@gmail.com>
Date: Fri, 19 Mar 2021 15:00:36 +0100
Subject: [PATCH 2/2] move the userRooms promise resolution after we are
 connected

---
 src/plugins/sib-subscribe-to-rai.js | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/plugins/sib-subscribe-to-rai.js b/src/plugins/sib-subscribe-to-rai.js
index 404109f..cc421d5 100644
--- a/src/plugins/sib-subscribe-to-rai.js
+++ b/src/plugins/sib-subscribe-to-rai.js
@@ -7,7 +7,8 @@ converse.plugins.add('sib-subscribe-to-rai', {
   dependencies: [
     'converse-rai',
   ],
-  async initialize() {
+  initialize() {
+    const { log } = converse.env;
     const _converse = this._converse;
     const { api } = _converse;
 
@@ -51,13 +52,15 @@ converse.plugins.add('sib-subscribe-to-rai', {
       }, 250);
     });
 
-    // @MattJ Here userRooms is an array of each jabberID the user is on.
-    let userRooms = (await Promise.all([
-      getCircles,
-      getProjects,
-    ])).flat();
-
     api.listen.on('connected', async () => {
+
+      // @MattJ Here userRooms is an array of each jabberID the user is on.
+      let userRooms = (await Promise.all([
+        getCircles,
+        getProjects,
+      ])).flat();
+
+      log.info(`User rooms: ${userRooms.join(', ')}`);
       await api.rooms.subscribe(userRooms);
     });
 
-- 
GitLab