From 823c8dcb7246a10654fddfa2aa532b28bdac5cb7 Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Feb 2025 13:45:35 +0100 Subject: [PATCH 1/9] Make setDomain changes affect MUC list modal --- src/plugins/muc-views/modals/muc-list.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index 2dd37f560e..e277e52ff6 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/src/plugins/muc-views/modals/muc-list.js @@ -111,6 +111,7 @@ export default class MUCListModal extends BaseModal { } onDomainChange () { + this.getElementsByClassName('form-control')[0].value = this.model.get('muc_domain'); api.settings.get('auto_list_rooms') && this.updateRoomsList(); } From 1d747d4dff59e05b1b53e2e9ac3b75e76369bfbf Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:10:48 +0100 Subject: [PATCH 2/9] Make per-domaingroup dropdowns with channel search item --- src/plugins/roomslist/templates/roomslist.js | 35 ++++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/plugins/roomslist/templates/roomslist.js b/src/plugins/roomslist/templates/roomslist.js index 5647c5a5ab..a37ac56d1a 100644 --- a/src/plugins/roomslist/templates/roomslist.js +++ b/src/plugins/roomslist/templates/roomslist.js @@ -77,21 +77,34 @@ function tplRoomItem (el, room) { */ function tplRoomDomainGroup (el, domain, rooms) { const i18n_title = __('Click to hide these rooms'); + const i18n_title_list_rooms = __('Query server'); const collapsed = el.model.get('collapsed_domains'); const is_collapsed = collapsed.includes(domain); + const btns = [ + html` + + ${i18n_title_list_rooms} + `, + ]; return html`
- el.toggleDomainList(ev, domain)}> - - - ${domain} - +
+ el.toggleDomainList(ev, domain)}> + + + ${domain} + + +
From 85a45045208a34486e9ef16b829c262bf0497f1a Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:16:09 +0100 Subject: [PATCH 3/9] Empty muc disco list when changing domain --- src/plugins/muc-views/modals/muc-list.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index e277e52ff6..f75d8ae2df 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/src/plugins/muc-views/modals/muc-list.js @@ -112,6 +112,7 @@ export default class MUCListModal extends BaseModal { onDomainChange () { this.getElementsByClassName('form-control')[0].value = this.model.get('muc_domain'); + this.items = []; api.settings.get('auto_list_rooms') && this.updateRoomsList(); } From cf3e99b6bdc4101daf80534112231118a6bf625e Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:30:27 +0100 Subject: [PATCH 4/9] Also hide feedback text when clearing items --- src/plugins/muc-views/modals/muc-list.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index f75d8ae2df..80e7e7392e 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/src/plugins/muc-views/modals/muc-list.js @@ -113,6 +113,7 @@ export default class MUCListModal extends BaseModal { onDomainChange () { this.getElementsByClassName('form-control')[0].value = this.model.get('muc_domain'); this.items = []; + this.model.save('feedback_text', ''); api.settings.get('auto_list_rooms') && this.updateRoomsList(); } From f8e277b24fffa15b381982377aae6c8d5eba6fe0 Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Feb 2025 19:12:37 +0100 Subject: [PATCH 5/9] Use querySelector for consistency with rest of codebase --- src/plugins/muc-views/modals/muc-list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index 80e7e7392e..886808aca5 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/src/plugins/muc-views/modals/muc-list.js @@ -111,7 +111,7 @@ export default class MUCListModal extends BaseModal { } onDomainChange () { - this.getElementsByClassName('form-control')[0].value = this.model.get('muc_domain'); + this.querySelector('form-control').value = this.model.get('muc_domain'); this.items = []; this.model.save('feedback_text', ''); api.settings.get('auto_list_rooms') && this.updateRoomsList(); From 681831390eaf8cd252d886d5c3b81d6e259d7ad0 Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Feb 2025 19:32:49 +0100 Subject: [PATCH 6/9] Ignore non-existent MUC list query input domain element for tests to pass This is probably just a race condition. --- src/plugins/muc-views/modals/muc-list.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index 886808aca5..7bc423e0aa 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/src/plugins/muc-views/modals/muc-list.js @@ -111,7 +111,10 @@ export default class MUCListModal extends BaseModal { } onDomainChange () { - this.querySelector('form-control').value = this.model.get('muc_domain'); + const domain_input = this.querySelector('form-control'); + if (domain_input) { + /** @type {HTMLInputElement} */(domain_input).value = this.model.get('muc_domain'); + } this.items = []; this.model.save('feedback_text', ''); api.settings.get('auto_list_rooms') && this.updateRoomsList(); From b562c50162f5ced8803d2dd9ce88c26f964b349c Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Mar 2025 21:42:29 +0100 Subject: [PATCH 7/9] Revert "Ignore non-existent MUC list query input domain element for tests to pass" This reverts commit 4188b2601b87da4bd34582a8e32e381388bc8bbf. --- src/plugins/muc-views/modals/muc-list.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index 7bc423e0aa..886808aca5 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/src/plugins/muc-views/modals/muc-list.js @@ -111,10 +111,7 @@ export default class MUCListModal extends BaseModal { } onDomainChange () { - const domain_input = this.querySelector('form-control'); - if (domain_input) { - /** @type {HTMLInputElement} */(domain_input).value = this.model.get('muc_domain'); - } + this.querySelector('form-control').value = this.model.get('muc_domain'); this.items = []; this.model.save('feedback_text', ''); api.settings.get('auto_list_rooms') && this.updateRoomsList(); From b450861c834e260cea51f90af3e6b9ab5290db45 Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Mar 2025 21:48:21 +0100 Subject: [PATCH 8/9] Fix use of querySelector --- src/plugins/muc-views/modals/muc-list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index 886808aca5..dba1483680 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/src/plugins/muc-views/modals/muc-list.js @@ -111,7 +111,7 @@ export default class MUCListModal extends BaseModal { } onDomainChange () { - this.querySelector('form-control').value = this.model.get('muc_domain'); + this.querySelector('.form-control').value = this.model.get('muc_domain'); this.items = []; this.model.save('feedback_text', ''); api.settings.get('auto_list_rooms') && this.updateRoomsList(); From 8571b03148606d5bc48ef7e0accbd2bb80537fcd Mon Sep 17 00:00:00 2001 From: BetaRays <26482956+BetaRays@users.noreply.github.com> Date: Sun, 23 Mar 2025 21:52:31 +0100 Subject: [PATCH 9/9] Only open room if it was in a conference domain --- src/plugins/muc-views/modals/muc-list.js | 27 ++++++++++++++++++--- src/plugins/muc-views/templates/muc-list.js | 2 +- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/plugins/muc-views/modals/muc-list.js b/src/plugins/muc-views/modals/muc-list.js index dba1483680..cd9844eb03 100644 --- a/src/plugins/muc-views/modals/muc-list.js +++ b/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'), 'items': this.items, 'loading_items': this.loading_items, - 'openRoom': ev => this.openRoom(ev), + 'openItem': ev => this.openItem(ev), 'setDomainFromEvent': ev => this.setDomainFromEvent(ev), 'submitForm': ev => this.showRooms(ev), 'toggleRoomInfo': ev => this.toggleRoomInfo(ev) @@ -97,12 +97,31 @@ export default class MUCListModal extends BaseModal { 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(); const jid = ev.target.getAttribute('data-room-jid'); 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) { diff --git a/src/plugins/muc-views/templates/muc-list.js b/src/plugins/muc-views/templates/muc-list.js index b1231e1071..bfa6d2db02 100644 --- a/src/plugins/muc-views/templates/muc-list.js +++ b/src/plugins/muc-views/templates/muc-list.js @@ -34,7 +34,7 @@ const tplItem = (o, item) => {