Przeglądaj źródła

MUC: Don't set a default nick

We first want to check whether the user has registered a nick with the
MUC, and if so, that will be set as the nick.
JC Brand 5 lat temu
rodzic
commit
5f5de90f0c
3 zmienionych plików z 22 dodań i 35 usunięć
  1. 4 7
      spec/roomslist.js
  2. 15 24
      src/headless/converse-muc.js
  3. 3 4
      tests/utils.js

+ 4 - 7
spec/roomslist.js

@@ -160,16 +160,13 @@
             const room_jid = 'coven@chat.shakespeare.lit';
             test_utils.openControlBox();
             await _converse.api.rooms.open(room_jid, {'nick': 'some1'});
-            const last_stanza = await u.waitUntil(() => _.filter(
-                IQ_stanzas,
-                iq => iq.querySelector(
-                    `iq[to="${room_jid}"] query[xmlns="http://jabber.org/protocol/disco#info"]`
-                )).pop());
             const view = _converse.chatboxviews.get(room_jid);
-            const IQ_id = last_stanza.getAttribute('id');
+
+            const selector = `iq[to="${room_jid}"] query[xmlns="http://jabber.org/protocol/disco#info"]`;
+            const features_query = await u.waitUntil(() => IQ_stanzas.filter(iq => iq.querySelector(selector)).pop());
             const features_stanza = $iq({
                     'from': 'coven@chat.shakespeare.lit',
-                    'id': IQ_id,
+                    'id': features_query.getAttribute('id'),
                     'to': 'romeo@montague.lit/desktop',
                     'type': 'result'
                 })

+ 15 - 24
src/headless/converse-muc.js

@@ -385,7 +385,6 @@ converse.plugins.add('converse-muc', {
                     'hidden': ['mobile', 'fullscreen'].includes(_converse.view_mode),
                     'message_type': 'groupchat',
                     'name': '',
-                    'nick': _converse.getDefaultMUCNickname(),
                     'num_unread': 0,
                     'roomconfig': {},
                     'time_opened': this.get('time_opened') || (new Date()).getTime(),
@@ -1194,34 +1193,26 @@ converse.plugins.add('converse-muc', {
              * @returns { Promise<string> } A promise which resolves with the reserved nick or null
              */
             async getReservedNick () {
-                let iq;
-                try {
-                    iq = await _converse.api.sendIQ(
-                        $iq({
-                            'to': this.get('jid'),
-                            'from': _converse.connection.jid,
-                            'type': "get"
-                        }).c("query", {
-                            'xmlns': Strophe.NS.DISCO_INFO,
-                            'node': 'x-roomuser-item'
-                        })
-                    );
-                } catch (e) {
-                    if (_.isElement(e)) {
-                        // IQ stanza of type 'error'
-                        return;
-                    } else {
-                        throw e;
-                    }
-                }
-                const identity_el = iq.querySelector('query[node="x-roomuser-item"] identity');
+                const stanza = $iq({
+                    'to': this.get('jid'),
+                    'from': _converse.connection.jid,
+                    'type': "get"
+                }).c("query", {
+                    'xmlns': Strophe.NS.DISCO_INFO,
+                    'node': 'x-roomuser-item'
+                })
+                const result = await _converse.api.sendIQ(stanza, null, true);
+                if (u.isErrorObject(result)) {
+                    throw result;
+                }
+                const identity_el = result.querySelector('query[node="x-roomuser-item"] identity');
                 return identity_el ? identity_el.getAttribute('name') : null;
             },
 
             async registerNickname () {
                 // See https://xmpp.org/extensions/xep-0045.html#register
-                const nick = this.get('nick'),
-                      jid = this.get('jid');
+                const nick = this.get('nick');
+                const jid = this.get('jid');
                 let iq, err_msg;
                 try {
                     iq = await _converse.api.sendIQ(

+ 3 - 4
tests/utils.js

@@ -192,10 +192,9 @@
     utils.waitForReservedNick = async function (_converse, muc_jid, nick) {
         const view = _converse.chatboxviews.get(muc_jid);
         const stanzas = _converse.connection.IQ_stanzas;
-        const iq = await u.waitUntil(() => _.filter(
-            stanzas,
-            s => sizzle(`iq[to="${muc_jid.toLowerCase()}"] query[node="x-roomuser-item"]`, s).length
-        ).pop());
+        const selector = `iq[to="${muc_jid.toLowerCase()}"] query[node="x-roomuser-item"]`;
+        const iq = await u.waitUntil(() => stanzas.filter(s => sizzle(selector, s).length).pop());
+
         // We remove the stanza, otherwise we might get stale stanzas returned in our filter above.
         stanzas.splice(stanzas.indexOf(iq), 1)