Przeglądaj źródła

Some fixes to get it to work (somewhat) locally

JC Brand 5 lat temu
rodzic
commit
9c5362333a

+ 25 - 19
src/converse-service-administration.js

@@ -42,7 +42,7 @@ converse.plugins.add('converse-service-administration', {
 
         _converse.ServiceAdministration = Backbone.Model.extend({
             async discoverSupport () {
-                const supported = await _converse.api.disco.supports(Strophe.NS.COMMANDS, _converse.bare_jid);
+                const supported = await _converse.api.disco.supports(Strophe.NS.COMMANDS, _converse.domain);
                 if (supported) {
                     const stanza = $iq({
                         'from': _converse.connection.jid,
@@ -51,28 +51,34 @@ converse.plugins.add('converse-service-administration', {
                         'type': 'get'
                     }).c('query', {
                         xmlns: Strophe.NS.DISCO_ITEMS,
-                        node: 'announce'
-                    }).up();
-
-                    _converse.connection.sendIQ(stanza, result => {
-                        const commands = sizzle('item[node^="http://jabber.org/protocol/admin"]', result);
-                        _converse.serviceAdminCommands = new _converse.ServiceAdminCommandCollection();
-                        commands.forEach(command => {
-                            const command_description = command.getAttribute('name');
-                            const command_node = command.getAttribute('node');
-                            const command_name = command_node.split('#').pop();
-
-                            _converse.serviceAdminCommands.add(new _converse.ServiceAdminCommandItem({
-                                command_node: command_node,
-                                description: command_description,
-                                command_name: command_name
-                            }));
-                        });
-                        this.renderControlboxElement();
+                        node: Strophe.NS.COMMANDS
                     });
+                    try {
+                        const result = await _converse.api.sendIQ(stanza);
+                        this.onCommandsList(result);
+                    } catch (e) {
+                        return log.error(e);
+                    }
                 }
             },
 
+            onCommandsList (iq_result) {
+                const commands = sizzle('item[node^="http://jabber.org/protocol/admin"]', iq_result);
+                _converse.serviceAdminCommands = new _converse.ServiceAdminCommandCollection();
+                commands.forEach(command => {
+                    const command_description = command.getAttribute('name');
+                    const command_node = command.getAttribute('node');
+                    const command_name = command_node.split('#').pop();
+
+                    _converse.serviceAdminCommands.add(new _converse.ServiceAdminCommandItem({
+                        command_node: command_node,
+                        description: command_description,
+                        command_name: command_name
+                    }));
+                });
+                this.renderControlboxElement();
+            },
+
             renderControlboxElement () {
                 _converse.serviceAdministrationCommandView = new _converse.ServiceAdminCommandView({collection: _converse.serviceAdminCommands});
                 const groupchat_element = _converse.chatboxviews.get('controlbox').el.querySelector('#chatrooms');

+ 11 - 6
src/headless/converse-disco.js

@@ -392,16 +392,21 @@ converse.plugins.add('converse-disco', {
             }
         });
 
+        function clearDiscoCache () {
+            Array.from(_converse.disco_entities.models).forEach(e => e.features.clearSession());
+            Array.from(_converse.disco_entities.models).forEach(e => e.identities.clearSession());
+            Array.from(_converse.disco_entities.models).forEach(e => e.dataforms.clearSession());
+            Array.from(_converse.disco_entities.models).forEach(e => e.fields.clearSession());
+            _converse.disco_entities.clearSession();
+            delete _converse.disco_entities;
+        }
+
         _converse.api.listen.on('clearSession', () => {
             if (_converse.shouldClearCache() && _converse.disco_entities) {
-                Array.from(_converse.disco_entities.models).forEach(e => e.features.clearSession());
-                Array.from(_converse.disco_entities.models).forEach(e => e.identities.clearSession());
-                Array.from(_converse.disco_entities.models).forEach(e => e.dataforms.clearSession());
-                Array.from(_converse.disco_entities.models).forEach(e => e.fields.clearSession());
-                _converse.disco_entities.clearSession();
-                delete _converse.disco_entities;
+                clearDiscoCache();
             }
         });
+        _converse.api.listen.on('logout', clearDiscoCache);
 
 
         /************************ API ************************/