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` {el.model.setDomain(domain); api.modal.show('converse-muc-list-modal', { 'model': el.model }, ev)}}"
+ data-toggle="modal"
+ data-target="#muc-list-modal">
+
+ ${i18n_title_list_rooms}
+ `,
+ ];
return html`
-
el.toggleDomainList(ev, domain)}>
-
-
- ${domain}
-
+
${ rooms.map(room => tplRoomItem(el, room)) }
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) => {