Turn NeoChatConnection::isVerifiedSession into a notifiable property

This should allow the devices page to hide the "Verify this Device"
warning, once you actually complete verification. I also made sure to
update the other consumer - the menu item under the user menu.

Additionally, I also fixed the password field not being automatically
focused when trying to remove a device.
This commit is contained in:
Joshua Goins
2025-09-05 13:02:41 -04:00
parent fbcb2379fb
commit b3781e0db4
5 changed files with 24 additions and 3 deletions

View File

@@ -88,7 +88,7 @@ KirigamiComponents.ConvergentContextMenu {
Kirigami.Action {
text: i18nc("@action:inmenu", "Verify This Device")
icon.name: "security-low"
visible: !root.connection.isVerifiedSession()
visible: !root.connection.isVerifiedSession
onTriggered: {
root.connection.startSelfVerification();
const dialog = Qt.createComponent("org.kde.kirigami", "PromptDialog").createObject(QQC2.Overlay.overlay, {

View File

@@ -4,6 +4,7 @@
import QtQuick
import QtQuick.Controls as QQC2
import QtQuick.Layouts
import QtQuick.Window
import QtQml
import org.kde.kirigami as Kirigami
@@ -170,6 +171,7 @@ Kirigami.Page {
return "";
}
}
onDone: root.QQC2.Window.window.close()
}
}

View File

@@ -141,6 +141,12 @@ void NeoChatConnection::connectSignals()
});
},
Qt::SingleShotConnection);
connect(this, &Connection::sessionVerified, this, [this](const QString &userId, const QString &deviceId) {
if (userId == this->userId() && deviceId == this->deviceId()) {
Q_EMIT ownSessionVerified();
}
});
}
int NeoChatConnection::badgeNotificationCount() const

View File

@@ -90,6 +90,11 @@ class NeoChatConnection : public Quotient::Connection
*/
Q_PROPERTY(bool enablePushNotifications READ enablePushNotifications NOTIFY enablePushNotificationsChanged)
/**
* @brief True if this connection is a verified session.
*/
Q_PROPERTY(bool isVerifiedSession READ isVerifiedSession NOTIFY ownSessionVerified)
public:
/**
* @brief Defines the status after an attempt to change the password on an account.
@@ -209,7 +214,7 @@ public:
/**
* @return True if this connection is a verified session.
*/
Q_INVOKABLE bool isVerifiedSession() const;
bool isVerifiedSession() const;
Q_SIGNALS:
void globalUrlPreviewEnabledChanged();
@@ -242,6 +247,11 @@ Q_SIGNALS:
*/
void roomAboutToBeLeft(const QString &id);
/**
* @brief When the connection's own verification state changes.
*/
void ownSessionVerified();
private:
static bool m_globalUrlPreviewDefault;
static PushRuleAction::Action m_defaultAction;

View File

@@ -38,7 +38,7 @@ FormCard.FormCardPage {
icon.name: "security-low"
text: i18nc("@action:button", "Verify This Device")
description: i18nc("@info:description", "This device is marked as insecure until it's verified by another device. It's recommended to verify as soon as possible.")
visible: !root.connection.isVerifiedSession()
visible: !root.connection.isVerifiedSession
onClicked: {
root.connection.startSelfVerification();
const dialog = Qt.createComponent("org.kde.kirigami", "PromptDialog").createObject(QQC2.Overlay.overlay, {
@@ -94,6 +94,9 @@ FormCard.FormCardPage {
title: i18n("Remove device")
standardButtons: QQC2.Dialog.Cancel
Component.onCompleted: passwordField.forceActiveFocus()
FormCard.FormCard {
FormCard.FormTextFieldDelegate {
id: passwordField