Port to the new libquotient QML module

This removes our weird hacky QML thing for accessing JoinRule, and
switches to the much more elaborate QML module in libQuotient.
This commit is contained in:
Joshua Goins
2026-02-03 18:46:38 -05:00
parent 806e24c370
commit 15019d79fc
4 changed files with 17 additions and 18 deletions

View File

@@ -227,7 +227,6 @@ int main(int argc, char *argv[])
Registration::instance().setAccountManager(accountManager.get()); Registration::instance().setAccountManager(accountManager.get());
qml_register_types_org_kde_neochat(); qml_register_types_org_kde_neochat();
qmlRegisterUncreatableMetaObject(Quotient::staticMetaObject, "Quotient", 1, 0, "JoinRule", u"Access to JoinRule enum only"_s);
QQmlApplicationEngine engine; QQmlApplicationEngine engine;

View File

@@ -9,7 +9,7 @@ import QtQuick.Layouts
import org.kde.kirigami as Kirigami import org.kde.kirigami as Kirigami
import org.kde.kirigamiaddons.components as KirigamiComponents import org.kde.kirigamiaddons.components as KirigamiComponents
import Quotient import io.github.quotient_im.libquotient
import org.kde.neochat import org.kde.neochat
import org.kde.neochat.settings import org.kde.neochat.settings
@@ -126,7 +126,7 @@ KirigamiComponents.ConvergentContextMenu {
Kirigami.Action { Kirigami.Action {
text: i18nc("@action:inmenu", "Copy Room Link") text: i18nc("@action:inmenu", "Copy Room Link")
icon.name: "edit-copy" icon.name: "edit-copy"
visible: !root.room.isDirectChat() && root.room.joinRule !== JoinRule.Invite visible: !root.room.isDirectChat() && root.room.joinRule !== Quotient.JoinRule.Invite
onTriggered: { onTriggered: {
// The canonical alias (if it exists) otherwise the first available alias // The canonical alias (if it exists) otherwise the first available alias
const firstAlias = root.room.aliases[0]; const firstAlias = root.room.aliases[0];

View File

@@ -13,7 +13,7 @@ import org.kde.kirigamiaddons.formcard as FormCard
import org.kde.neochat import org.kde.neochat
import Quotient import io.github.quotient_im.libquotient
FormCard.FormCardPage { FormCard.FormCardPage {
id: root id: root
@@ -65,23 +65,23 @@ FormCard.FormCardPage {
FormCard.FormRadioDelegate { FormCard.FormRadioDelegate {
text: i18nc("@option:check", "Private (invite only)") text: i18nc("@option:check", "Private (invite only)")
description: i18nc("@info", "Only invited people can join.") description: i18nc("@info", "Only invited people can join.")
checked: root.room.joinRule === JoinRule.Invite checked: root.room.joinRule === Quotient.JoinRule.Invite
enabled: root.room.canSendState("m.room.join_rules") enabled: root.room.canSendState("m.room.join_rules")
onCheckedChanged: if (checked && root.room.joinRule != JoinRule.Invite) { onCheckedChanged: if (checked && root.room.joinRule != Quotient.JoinRule.Invite) {
root.room.joinRule = JoinRule.Invite; root.room.joinRule = Quotient.JoinRule.Invite;
} }
} }
FormCard.FormRadioDelegate { FormCard.FormRadioDelegate {
text: i18nc("@option:check", "Space members") text: i18nc("@option:check", "Space members")
description: i18nc("@info", "Anyone in the selected spaces can find and join.") + (!["8", "9", "10", "11", "12"].includes(root.room.version) ? `\n${root.needUpgradeRoom}` : "") description: i18nc("@info", "Anyone in the selected spaces can find and join.") + (!["8", "9", "10", "11", "12"].includes(root.room.version) ? `\n${root.needUpgradeRoom}` : "")
checked: root.room.joinRule === JoinRule.Restricted checked: root.room.joinRule === Quotient.JoinRule.Restricted
enabled: root.room.canSendState("m.room.join_rules") && ["8", "9", "10", "11", "12"].includes(root.room.version) enabled: root.room.canSendState("m.room.join_rules") && ["8", "9", "10", "11", "12"].includes(root.room.version)
onCheckedChanged: if (checked && root.room.joinRule != JoinRule.Restricted) { onCheckedChanged: if (checked && root.room.joinRule != Quotient.JoinRule.Restricted) {
(selectSpacesDialog.createObject(QQC2.Overlay.overlay) as SelectSpacesDialog).open(); (selectSpacesDialog.createObject(QQC2.Overlay.overlay) as SelectSpacesDialog).open();
} }
contentItem.children: QQC2.Button { contentItem.children: QQC2.Button {
visible: root.room.joinRule === JoinRule.Restricted visible: root.room.joinRule === Quotient.JoinRule.Restricted
text: i18nc("@action:button", "Select spaces") text: i18nc("@action:button", "Select spaces")
icon.name: "list-add" icon.name: "list-add"
@@ -102,20 +102,20 @@ FormCard.FormCardPage {
FormCard.FormRadioDelegate { FormCard.FormRadioDelegate {
text: i18nc("@option:check", "Knock") text: i18nc("@option:check", "Knock")
description: i18nc("@info", "People not in the room need to request an invite to join the room.") + (!["7", "8", "9", "10", "11", "12"].includes(root.room.version) ? `\n${root.needUpgradeRoom}` : "") description: i18nc("@info", "People not in the room need to request an invite to join the room.") + (!["7", "8", "9", "10", "11", "12"].includes(root.room.version) ? `\n${root.needUpgradeRoom}` : "")
checked: root.room.joinRule === JoinRule.Knock checked: root.room.joinRule === Quotient.JoinRule.Knock
// https://spec.matrix.org/v1.4/rooms/#feature-matrix // https://spec.matrix.org/v1.4/rooms/#feature-matrix
enabled: root.room.canSendState("m.room.join_rules") && ["7", "8", "9", "10", "11", "12"].includes(root.room.version) enabled: root.room.canSendState("m.room.join_rules") && ["7", "8", "9", "10", "11", "12"].includes(root.room.version)
onCheckedChanged: if (checked && root.room.joinRule != JoinRule.Knock) { onCheckedChanged: if (checked && root.room.joinRule != Quotient.JoinRule.Knock) {
root.room.joinRule = JoinRule.Knock; root.room.joinRule = Quotient.JoinRule.Knock;
} }
} }
FormCard.FormRadioDelegate { FormCard.FormRadioDelegate {
text: i18nc("@option:check", "Public") text: i18nc("@option:check", "Public")
description: i18nc("@option:check", "Anyone can find and join.") description: i18nc("@option:check", "Anyone can find and join.")
checked: root.room.joinRule === JoinRule.Public checked: root.room.joinRule === Quotient.JoinRule.Public
enabled: root.room.canSendState("m.room.join_rules") enabled: root.room.canSendState("m.room.join_rules")
onCheckedChanged: if (checked && root.room.joinRule != JoinRule.Public) { onCheckedChanged: if (checked && root.room.joinRule != Quotient.JoinRule.Public) {
root.room.joinRule = JoinRule.Public; root.room.joinRule = Quotient.JoinRule.Public;
} }
} }
} }

View File

@@ -11,7 +11,7 @@ import org.kde.kirigami as Kirigami
import org.kde.kirigamiaddons.formcard as FormCard import org.kde.kirigamiaddons.formcard as FormCard
import org.kde.kirigamiaddons.labs.components as Components import org.kde.kirigamiaddons.labs.components as Components
import Quotient import io.github.quotient_im.libquotient
import org.kde.neochat import org.kde.neochat
@@ -44,7 +44,7 @@ Kirigami.Dialog {
ids.push(spaceGroup.buttons[i].modelData.id); ids.push(spaceGroup.buttons[i].modelData.id);
} }
} }
root.room.setJoinRule(JoinRule.Restricted, ids); root.room.setJoinRule(Quotient.JoinRule.Restricted, ids);
} }
QQC2.ButtonGroup { QQC2.ButtonGroup {