From 403824b2617a95689118109fcaec059efaac18a7 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Mon, 19 Sep 2022 09:11:38 +0200 Subject: [PATCH] feat: Store original event --- lib/encryption/encryption.dart | 1 + lib/src/event.dart | 43 ++++++++++++------- .../encrypt_decrypt_room_message_test.dart | 1 + 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/lib/encryption/encryption.dart b/lib/encryption/encryption.dart index 23743ab3..68b0e8a6 100644 --- a/lib/encryption/encryption.dart +++ b/lib/encryption/encryption.dart @@ -287,6 +287,7 @@ class Encryption { stateKey: event.stateKey, prevContent: event.prevContent, status: event.status, + originalSource: event, ); } diff --git a/lib/src/event.dart b/lib/src/event.dart index 5e2ace74..d29baf72 100644 --- a/lib/src/event.dart +++ b/lib/src/event.dart @@ -72,6 +72,8 @@ class Event extends MatrixEvent { ? room.unsafeGetUserFromMemoryOrFallback(stateKey!) : null; + final MatrixEvent? originalSource; + Event({ this.status = defaultStatus, required Map content, @@ -83,6 +85,7 @@ class Event extends MatrixEvent { Map? prevContent, String? stateKey, required this.room, + this.originalSource, }) : super( content: content, type: type, @@ -154,7 +157,7 @@ class Event extends MatrixEvent { } } - static Map getMapFromPayload(dynamic payload) { + static Map getMapFromPayload(Object? payload) { if (payload is String) { try { return json.decode(payload); @@ -192,22 +195,27 @@ class Event extends MatrixEvent { final content = Event.getMapFromPayload(jsonPayload['content']); final unsigned = Event.getMapFromPayload(jsonPayload['unsigned']); final prevContent = Event.getMapFromPayload(jsonPayload['prev_content']); + final originalSource = + Event.getMapFromPayload(jsonPayload['original_source']); return Event( - status: eventStatusFromInt(jsonPayload['status'] ?? - unsigned[messageSendingStatusKey] ?? - defaultStatus.intValue), - stateKey: jsonPayload['state_key'], - prevContent: prevContent, - content: content, - type: jsonPayload['type'], - eventId: jsonPayload['event_id'] ?? '', - senderId: jsonPayload['sender'], - originServerTs: jsonPayload.containsKey('origin_server_ts') - ? DateTime.fromMillisecondsSinceEpoch(jsonPayload['origin_server_ts']) - : DateTime.now(), - unsigned: unsigned, - room: room, - ); + status: eventStatusFromInt(jsonPayload['status'] ?? + unsigned[messageSendingStatusKey] ?? + defaultStatus.intValue), + stateKey: jsonPayload['state_key'], + prevContent: prevContent, + content: content, + type: jsonPayload['type'], + eventId: jsonPayload['event_id'] ?? '', + senderId: jsonPayload['sender'], + originServerTs: jsonPayload.containsKey('origin_server_ts') + ? DateTime.fromMillisecondsSinceEpoch( + jsonPayload['origin_server_ts']) + : DateTime.now(), + unsigned: unsigned, + room: room, + originalSource: originalSource.isEmpty + ? null + : MatrixEvent.fromJson(originalSource)); } @override @@ -226,6 +234,9 @@ class Event extends MatrixEvent { if (unsigned?.isNotEmpty == true) { data['unsigned'] = unsigned; } + if (originalSource != null) { + data['original_source'] = originalSource?.toJson(); + } return data; } diff --git a/test/encryption/encrypt_decrypt_room_message_test.dart b/test/encryption/encrypt_decrypt_room_message_test.dart index d150e3fc..9f9884c7 100644 --- a/test/encryption/encrypt_decrypt_room_message_test.dart +++ b/test/encryption/encrypt_decrypt_room_message_test.dart @@ -76,6 +76,7 @@ void main() { expect(decryptedEvent.type, 'm.room.message'); expect(decryptedEvent.content['msgtype'], 'm.text'); expect(decryptedEvent.content['text'], 'Hello foxies!'); + expect(decryptedEvent.originalSource?.toJson(), encryptedEvent.toJson()); }); test('decrypt payload nocache', () async {