Quellcode durchsuchen

Only open room if it was in a conference domain

BetaRays vor 6 Monaten
Ursprung
Commit
8571b03148

+ 23 - 4
src/plugins/muc-views/modals/muc-list.js

@@ -86,7 +86,7 @@ export default class MUCListModal extends BaseModal {
                 'server_placeholder': this.model.get('muc_domain') || __('conference.example.org'),
                 'server_placeholder': this.model.get('muc_domain') || __('conference.example.org'),
                 'items': this.items,
                 'items': this.items,
                 'loading_items': this.loading_items,
                 'loading_items': this.loading_items,
-                'openRoom': ev => this.openRoom(ev),
+                'openItem': ev => this.openItem(ev),
                 'setDomainFromEvent': ev => this.setDomainFromEvent(ev),
                 'setDomainFromEvent': ev => this.setDomainFromEvent(ev),
                 'submitForm': ev => this.showRooms(ev),
                 'submitForm': ev => this.showRooms(ev),
                 'toggleRoomInfo': ev => this.toggleRoomInfo(ev)
                 'toggleRoomInfo': ev => this.toggleRoomInfo(ev)
@@ -97,12 +97,31 @@ export default class MUCListModal extends BaseModal {
         return __('Query for Groupchats');
         return __('Query for Groupchats');
     }
     }
 
 
-    openRoom (ev) {
+    openRoom (jid, name) {
+        this.modal.hide();
+        api.rooms.open(jid, {'name': name}, true);
+    }
+
+    onInfoReceived (iq, jid, name) {
+        const identity = sizzle('query identity', iq).pop();
+        if (identity.getAttribute('category') === 'conference') {
+            this.openRoom(jid, name);
+        } else {
+            this.model.setDomain(jid);
+        }
+    }
+
+    openItem (ev) {
         ev.preventDefault();
         ev.preventDefault();
         const jid = ev.target.getAttribute('data-room-jid');
         const jid = ev.target.getAttribute('data-room-jid');
         const name = ev.target.getAttribute('data-room-name');
         const name = ev.target.getAttribute('data-room-name');
-        this.modal.hide();
-        api.rooms.open(jid, {'name': name}, true);
+        const iq = $iq({
+            'to': this.model.get('muc_domain'),
+            'from': api.connection.get().jid,
+            'type': "get"
+        }).c("query", {xmlns: Strophe.NS.DISCO_INFO});
+        api.sendIQ(iq)
+            .then(iq => this.onInfoReceived(iq, jid, name))
     }
     }
 
 
     toggleRoomInfo (ev) {
     toggleRoomInfo (ev) {

+ 1 - 1
src/plugins/muc-views/templates/muc-list.js

@@ -34,7 +34,7 @@ const tplItem = (o, item) => {
         <li class="room-item list-group-item">
         <li class="room-item list-group-item">
             <div class="available-chatroom d-flex flex-row">
             <div class="available-chatroom d-flex flex-row">
                 <a class="open-room available-room w-100"
                 <a class="open-room available-room w-100"
-                    @click=${o.openRoom}
+                    @click=${o.openItem}
                     data-room-jid="${item.jid}"
                     data-room-jid="${item.jid}"
                     data-room-name="${item.name}"
                     data-room-name="${item.name}"
                     title="${i18n_open_title}"
                     title="${i18n_open_title}"