Merge branch 'krille/store-original-event' into 'main'

feat: Store original event

Closes #333

See merge request famedly/company/frontend/famedlysdk!1138
This commit is contained in:
The one with the braid 2022-09-19 07:55:12 +00:00
commit e568002b75
3 changed files with 29 additions and 16 deletions

View File

@ -287,6 +287,7 @@ class Encryption {
stateKey: event.stateKey, stateKey: event.stateKey,
prevContent: event.prevContent, prevContent: event.prevContent,
status: event.status, status: event.status,
originalSource: event,
); );
} }

View File

@ -72,6 +72,8 @@ class Event extends MatrixEvent {
? room.unsafeGetUserFromMemoryOrFallback(stateKey!) ? room.unsafeGetUserFromMemoryOrFallback(stateKey!)
: null; : null;
final MatrixEvent? originalSource;
Event({ Event({
this.status = defaultStatus, this.status = defaultStatus,
required Map<String, dynamic> content, required Map<String, dynamic> content,
@ -83,6 +85,7 @@ class Event extends MatrixEvent {
Map<String, dynamic>? prevContent, Map<String, dynamic>? prevContent,
String? stateKey, String? stateKey,
required this.room, required this.room,
this.originalSource,
}) : super( }) : super(
content: content, content: content,
type: type, type: type,
@ -154,7 +157,7 @@ class Event extends MatrixEvent {
} }
} }
static Map<String, dynamic> getMapFromPayload(dynamic payload) { static Map<String, dynamic> getMapFromPayload(Object? payload) {
if (payload is String) { if (payload is String) {
try { try {
return json.decode(payload); return json.decode(payload);
@ -192,22 +195,27 @@ class Event extends MatrixEvent {
final content = Event.getMapFromPayload(jsonPayload['content']); final content = Event.getMapFromPayload(jsonPayload['content']);
final unsigned = Event.getMapFromPayload(jsonPayload['unsigned']); final unsigned = Event.getMapFromPayload(jsonPayload['unsigned']);
final prevContent = Event.getMapFromPayload(jsonPayload['prev_content']); final prevContent = Event.getMapFromPayload(jsonPayload['prev_content']);
final originalSource =
Event.getMapFromPayload(jsonPayload['original_source']);
return Event( return Event(
status: eventStatusFromInt(jsonPayload['status'] ?? status: eventStatusFromInt(jsonPayload['status'] ??
unsigned[messageSendingStatusKey] ?? unsigned[messageSendingStatusKey] ??
defaultStatus.intValue), defaultStatus.intValue),
stateKey: jsonPayload['state_key'], stateKey: jsonPayload['state_key'],
prevContent: prevContent, prevContent: prevContent,
content: content, content: content,
type: jsonPayload['type'], type: jsonPayload['type'],
eventId: jsonPayload['event_id'] ?? '', eventId: jsonPayload['event_id'] ?? '',
senderId: jsonPayload['sender'], senderId: jsonPayload['sender'],
originServerTs: jsonPayload.containsKey('origin_server_ts') originServerTs: jsonPayload.containsKey('origin_server_ts')
? DateTime.fromMillisecondsSinceEpoch(jsonPayload['origin_server_ts']) ? DateTime.fromMillisecondsSinceEpoch(
: DateTime.now(), jsonPayload['origin_server_ts'])
unsigned: unsigned, : DateTime.now(),
room: room, unsigned: unsigned,
); room: room,
originalSource: originalSource.isEmpty
? null
: MatrixEvent.fromJson(originalSource));
} }
@override @override
@ -226,6 +234,9 @@ class Event extends MatrixEvent {
if (unsigned?.isNotEmpty == true) { if (unsigned?.isNotEmpty == true) {
data['unsigned'] = unsigned; data['unsigned'] = unsigned;
} }
if (originalSource != null) {
data['original_source'] = originalSource?.toJson();
}
return data; return data;
} }

View File

@ -76,6 +76,7 @@ void main() {
expect(decryptedEvent.type, 'm.room.message'); expect(decryptedEvent.type, 'm.room.message');
expect(decryptedEvent.content['msgtype'], 'm.text'); expect(decryptedEvent.content['msgtype'], 'm.text');
expect(decryptedEvent.content['text'], 'Hello foxies!'); expect(decryptedEvent.content['text'], 'Hello foxies!');
expect(decryptedEvent.originalSource?.toJson(), encryptedEvent.toJson());
}); });
test('decrypt payload nocache', () async { test('decrypt payload nocache', () async {