matrixion/resources/qml/EncryptionIndicator.qml
Nicolas Werner ff82452816
Upgrade trust of megolm sessions when receiving RoomKey
Before we only did that, when we basically didn't have the key yet. But
since we usually get sent a RoomKey when a new message is sent after we
sign in, we were discarding, that those messages should usually now be
trusted.
2023-11-19 20:11:21 +01:00

71 lines
2.3 KiB
QML

// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
import QtQuick
import QtQuick.Controls
import QtQuick.Window
import im.nheko
Image {
id: stateImg
property bool encrypted: false
property bool hovered: ma.hovered
property string sourceUrl: {
if (!encrypted)
return "image://colorimage/" + unencryptedIcon + "?";
switch (trust) {
case Crypto.Verified:
return "image://colorimage/:/icons/icons/ui/shield-filled-checkmark.svg?";
case Crypto.TOFU:
return "image://colorimage/:/icons/icons/ui/shield-filled.svg?";
case Crypto.Unverified:
case Crypto.MessageUnverified:
return "image://colorimage/:/icons/icons/ui/shield-filled-exclamation-mark.svg?";
default:
return "image://colorimage/:/icons/icons/ui/shield-filled-cross.svg?";
}
}
property int trust: Crypto.Unverified
property color unencryptedColor: Nheko.theme.error
property color unencryptedHoverColor: unencryptedColor
property string unencryptedIcon: ":/icons/icons/ui/shield-filled-cross.svg"
ToolTip.text: {
if (!encrypted)
return qsTr("This message is not encrypted!");
switch (trust) {
case Crypto.Verified:
return qsTr("Encrypted by a verified device");
case Crypto.TOFU:
return qsTr("Encrypted by an unverified device, but you have trusted that user so far.");
case Crypto.MessageUnverified:
return qsTr("Key is from an untrusted source like forwarded from another user or the online key backup. For this reason we can't verify who sent the message.");
default:
return qsTr("Encrypted by an unverified device.");
}
}
ToolTip.visible: stateImg.hovered
height: 16
source: {
if (encrypted) {
switch (trust) {
case Crypto.Verified:
return sourceUrl + Nheko.theme.green;
case Crypto.TOFU:
return sourceUrl + palette.buttonText;
default:
return sourceUrl + Nheko.theme.error;
}
} else {
return sourceUrl + (stateImg.hovered ? unencryptedHoverColor : unencryptedColor);
}
}
width: 16
HoverHandler {
id: ma
}
}