diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml
index 4e93df06..64f10b35 100644
--- a/resources/qml/device-verification/DeviceVerification.qml
+++ b/resources/qml/device-verification/DeviceVerification.qml
@@ -6,7 +6,6 @@ import im.nheko 1.0
ApplicationWindow {
property var flow
- property var tran_id
title: stack.currentItem.title
id: dialog
diff --git a/resources/qml/device-verification/Failed.qml b/resources/qml/device-verification/Failed.qml
index 6b5d57ef..fcff7893 100644
--- a/resources/qml/device-verification/Failed.qml
+++ b/resources/qml/device-verification/Failed.qml
@@ -2,23 +2,29 @@ import QtQuick 2.3
import QtQuick.Controls 2.10
import QtQuick.Layouts 1.10
+import im.nheko 1.0
+
Pane {
- property string title: qsTr("Verification timed out")
+ property string title: qsTr("Verification failed")
ColumnLayout {
spacing: 16
Text {
+ id: content
+
Layout.maximumWidth: 400
Layout.fillHeight: true
Layout.fillWidth: true
+
wrapMode: Text.Wrap
- id: content
text: switch (flow.error) {
- case VerificationStatus.UnknownMethod: return qsTr("Device verification timed out.")
- case VerificationStatus.MismatchedCommitment: return qsTr("Device verification timed out.")
- case VerificationStatus.MismatchedSAS: return qsTr("Device verification timed out.")
- case VerificationStatus.KeyMismatch: return qsTr("Device verification timed out.")
- case VerificationStatus.Timeout: return qsTr("Device verification timed out.")
- case VerificationStatus.OutOfOrder: return qsTr("Device verification timed out.")
+ case DeviceVerificationFlow.UnknownMethod: return qsTr("Other client does not support our verification protocol.")
+ case DeviceVerificationFlow.MismatchedCommitment:
+ case DeviceVerificationFlow.MismatchedSAS:
+ case DeviceVerificationFlow.KeyMismatch: return qsTr("Key mismatch detected!")
+ case DeviceVerificationFlow.Timeout: return qsTr("Device verification timed out.")
+ case DeviceVerificationFlow.User: return qsTr("Other party canceled the verification.")
+ case DeviceVerificationFlow.OutOfOrder: return qsTr("Device verification timed out.")
+ default: return "Unknown verification error.";
}
color:colors.text
verticalAlignment: Text.AlignVCenter
@@ -31,11 +37,7 @@ Pane {
Layout.alignment: Qt.AlignRight
text: qsTr("Close")
- onClicked: {
- deviceVerificationList.remove(tran_id);
- flow.deleteFlow();
- dialog.close()
- }
+ onClicked: dialog.close()
}
}
}
diff --git a/resources/qml/device-verification/Waiting.qml b/resources/qml/device-verification/Waiting.qml
index f36910e7..38abf767 100644
--- a/resources/qml/device-verification/Waiting.qml
+++ b/resources/qml/device-verification/Waiting.qml
@@ -20,12 +20,12 @@ Pane {
case "WaitingForMac": return qsTr("Waiting for other side to complete the verification request.")
}
- color:colors.text
+ color: colors.text
verticalAlignment: Text.AlignVCenter
}
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
- palette: color
+ palette: colors
}
RowLayout {
Button {
diff --git a/src/DeviceVerificationFlow.cpp b/src/DeviceVerificationFlow.cpp
index 99fd7bed..79f1de84 100644
--- a/src/DeviceVerificationFlow.cpp
+++ b/src/DeviceVerificationFlow.cpp
@@ -64,7 +64,8 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *,
}
connect(timeout, &QTimer::timeout, this, [this]() {
- this->cancelVerification(DeviceVerificationFlow::Error::Timeout);
+ if (state_ != Success && state_ != Failed)
+ this->cancelVerification(DeviceVerificationFlow::Error::Timeout);
});
connect(ChatPage::instance(),
@@ -114,7 +115,7 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *,
return;
}
error_ = User;
- emit errorChanged();
+ Emit errorChanged();
setState(Failed);
});
diff --git a/src/DeviceVerificationFlow.h b/src/DeviceVerificationFlow.h
index 1fe3919b..a1ceaf80 100644
--- a/src/DeviceVerificationFlow.h
+++ b/src/DeviceVerificationFlow.h
@@ -58,7 +58,7 @@ class DeviceVerificationFlow : public QObject
Q_OBJECT
// Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
Q_PROPERTY(QString state READ state NOTIFY stateChanged)
- Q_PROPERTY(Error error READ error CONSTANT)
+ Q_PROPERTY(Error error READ error NOTIFY errorChanged)
Q_PROPERTY(QString userId READ getUserId CONSTANT)
Q_PROPERTY(QString deviceId READ getDeviceId CONSTANT)
Q_PROPERTY(bool sender READ getSender CONSTANT)
@@ -203,7 +203,7 @@ private:
mtx::common::RelatesTo relation;
State state_ = PromptStartVerification;
- Error error_;
+ Error error_ = UnknownMethod;
bool isMacVerified = false;
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 250cd5f0..ed720056 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -396,6 +396,18 @@ TimelineViewManager::verifyUser(QString userid)
tr("No share room with this user found. Create an "
"encrypted room with this user and try again."));
}
+
+void
+TimelineViewManager::removeVerificationFlow(DeviceVerificationFlow *flow)
+{
+ for (auto it = dvList.keyValueBegin(); it != dvList.keyValueEnd(); ++it) {
+ if (it->second == flow) {
+ dvList.remove(it->first);
+ return;
+ }
+ }
+}
+
void
TimelineViewManager::verifyDevice(QString userid, QString deviceid)
{
diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index 12e49080..a8bd2e06 100644
--- a/src/timeline/TimelineViewManager.h
+++ b/src/timeline/TimelineViewManager.h
@@ -62,6 +62,7 @@ public:
Q_INVOKABLE void openMemberListDialog() const;
Q_INVOKABLE void openLeaveRoomDialog() const;
Q_INVOKABLE void openRoomSettings() const;
+ Q_INVOKABLE void removeVerificationFlow(DeviceVerificationFlow *flow);
void verifyUser(QString userid);
void verifyDevice(QString userid, QString deviceid);
|