Page MenuHomePhorge

D349.1786787593.diff
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

D349.1786787593.diff

diff --git a/src/contents/ui/event-types/Fallback.qml b/src/contents/ui/event-types/Fallback.qml
--- a/src/contents/ui/event-types/Fallback.qml
+++ b/src/contents/ui/event-types/Fallback.qml
@@ -16,6 +16,17 @@
id: upper
text: getText()
+ property var requestKeyAction: Kirigami.Action {
+ text: l10n.get('event-request-key-action')
+ onTriggered: matrixSession.requestShareRoomSessionKey(event)
+ }
+
+ property bool isUndecryptable: (
+ event.content.msgtype === 'moe.kazv.mxc.cannot.decrypt'
+ || event.content.msgtype === 'xyz.tusooa.kazv.not.yet.decrypted'
+ )
+ innerBubble.menuContent: isUndecryptable ? [requestKeyAction] : []
+
Kirigami.Icon {
objectName: 'fallbackIcon'
source: /* iconName: */ 'emblem-question'
@@ -25,8 +36,7 @@
function getText() {
if (event.type === 'm.room.message') {
- if (event.content.msgtype === 'moe.kazv.mxc.cannot.decrypt' ||
- event.content.msgtype === 'xyz.tusooa.kazv.not.yet.decrypted') {
+ if (isUndecryptable) {
return l10n.get('event-cannot-decrypt-text');
} else {
return l10n.get('event-msgtype-fallback-text', {
diff --git a/src/contents/ui/event-types/TextTemplate.qml b/src/contents/ui/event-types/TextTemplate.qml
--- a/src/contents/ui/event-types/TextTemplate.qml
+++ b/src/contents/ui/event-types/TextTemplate.qml
@@ -20,6 +20,7 @@
property var text
default property var children
property alias textFormat: label.textFormat
+ property alias innerBubble: bubble
property var linkToActivate
property var selectedUserId
diff --git a/src/l10n/cmn-Hans/100-ui.ftl b/src/l10n/cmn-Hans/100-ui.ftl
--- a/src/l10n/cmn-Hans/100-ui.ftl
+++ b/src/l10n/cmn-Hans/100-ui.ftl
@@ -270,6 +270,7 @@
event-unpin-cancel-action = 不取消置顶
event-unpin-success-prompt = 消息从房间取消置顶了。
event-unpin-failed-prompt = 无法取消置顶消息。错误代码:{ $errorCode }。错误讯息:{ $errorMsg }。
+event-request-key-action = 请求加密密钥
media-file-menu-option-view = 查看
media-file-menu-option-save-as = 保存为
diff --git a/src/l10n/en/100-ui.ftl b/src/l10n/en/100-ui.ftl
--- a/src/l10n/en/100-ui.ftl
+++ b/src/l10n/en/100-ui.ftl
@@ -292,6 +292,7 @@
event-unpin-cancel-action = Do not unpin
event-unpin-success-prompt = Message unpinned from room.
event-unpin-failed-prompt = Unable to unpin message. Error code: { $errorCode }. Error message: { $errorMsg }.
+event-request-key-action = Request encryption key
media-file-menu-option-view = View
media-file-menu-option-save-as = Save as
diff --git a/src/matrix-session.hpp b/src/matrix-session.hpp
--- a/src/matrix-session.hpp
+++ b/src/matrix-session.hpp
@@ -326,6 +326,16 @@
*/
MatrixPromise *requestVerifyDevice(QString userId, QString deviceId);
+ /**
+ * Request other sessions to send this a shared room key that can
+ * decrypt `event`.
+ *
+ * @param event An undecryptable event.
+ * @return A Promise that resolves when the request is sent, or when
+ * there is an error.
+ */
+ MatrixPromise *requestShareRoomSessionKey(MatrixEvent *event);
+
private:
MatrixPromise *sendAccountDataImpl(Kazv::Event event);
};
diff --git a/src/matrix-session.cpp b/src/matrix-session.cpp
--- a/src/matrix-session.cpp
+++ b/src/matrix-session.cpp
@@ -678,3 +678,18 @@
std::move(deviceId).toStdString()
));
}
+
+MatrixPromise *MatrixSession::requestShareRoomSessionKey(MatrixEvent *event)
+{
+ auto e = event->underlyingEvent();
+ if (!(e.originalJson().get().contains("room_id")
+ && e.originalJson().get().at("room_id").is_string())) {
+ return nullptr;
+ }
+ auto roomId = e.originalJson().get().at("room_id").template get<std::string>();
+
+ return new MatrixPromise(m_clientOnSecondaryRoot.requestShareRoomSessionKey(
+ roomId,
+ e
+ ));
+}

File Metadata

Mime Type
text/plain
Expires
Sat, Aug 15, 2:53 AM (22 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1729576
Default Alt Text
D349.1786787593.diff (3 KB)

Event Timeline