Compare commits

...

3 Commits

Author SHA1 Message Date
Tobias Fella
8e906bb043 Import libQuotient QML module where necessary 2026-02-09 21:08:08 -05:00
Joshua Goins
15019d79fc 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.
2026-02-09 21:08:08 -05:00
Joshua Goins
806e24c370 Bump libQuotient requirement to 0.10.0
Needed for the new QML module.
2026-02-09 21:08:08 -05:00
7 changed files with 20 additions and 19 deletions

View File

@@ -106,7 +106,7 @@ if (NOT ANDROID AND NOT WIN32 AND NOT APPLE AND NOT HAIKU)
find_package(KF6DBusAddons ${KF_MIN_VERSION} REQUIRED) find_package(KF6DBusAddons ${KF_MIN_VERSION} REQUIRED)
endif() endif()
find_package(QuotientQt6 0.9.3) find_package(QuotientQt6 0.10.0)
set_package_properties(QuotientQt6 PROPERTIES set_package_properties(QuotientQt6 PROPERTIES
TYPE REQUIRED TYPE REQUIRED
DESCRIPTION "Qt wrapper around Matrix API" DESCRIPTION "Qt wrapper around Matrix API"

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

@@ -11,6 +11,7 @@ import QtQml
import org.kde.kirigami as Kirigami import org.kde.kirigami as Kirigami
import org.kde.neochat import org.kde.neochat
import io.github.quotient_im.libquotient
Kirigami.Page { Kirigami.Page {
id: root id: root

View File

@@ -5,6 +5,7 @@ import QtQuick
import QtQml import QtQml
import org.kde.neochat import org.kde.neochat
import io.github.quotient_im.libquotient
VerificationMessage { VerificationMessage {
id: root id: root

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 {