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:
commit
e568002b75
|
|
@ -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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue