From 80be9629bf23d4cefb2d58d4408d0868ca821d6c Mon Sep 17 00:00:00 2001 From: Sorunome Date: Tue, 21 Sep 2021 11:31:53 +0200 Subject: [PATCH] fix: Setting stuff in the database assumed event relationships were well-formatted --- lib/src/database/hive_database.dart | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/src/database/hive_database.dart b/lib/src/database/hive_database.dart index d3fc375e..a117255a 100644 --- a/lib/src/database/hive_database.dart +++ b/lib/src/database/hive_database.dart @@ -944,14 +944,22 @@ class FamedlySdkHiveDatabase extends DatabaseApi { final Map stateMap = await _roomStateBox.get(key) ?? {}; // store state events and new messages, that either are not an edit or an edit of the lastest message // An edit is an event, that has an edit relation to the latest event. In some cases for the second edit, we need to compare if both have an edit relation to the same event instead. - if (!eventUpdate.content['content'].containsKey('m.relates_to')) { + if (eventUpdate.content + .tryGetMap('content') + ?.tryGetMap('m.relates_to') == + null) { stateMap[eventUpdate.content['state_key']] = eventUpdate.content; await _roomStateBox.put(key, stateMap); } else { - final String editedEventRelationshipEventId = - eventUpdate.content['content']['m.relates_to']['event_id']; + final editedEventRelationshipEventId = eventUpdate.content + .tryGetMap('content') + ?.tryGetMap('m.relates_to') + ?.tryGet('event_id'); if (eventUpdate.content['type'] != EventTypes.Message || - eventUpdate.content['content']['m.relates_to']['rel_type'] != + eventUpdate.content + .tryGetMap('content') + ?.tryGetMap('m.relates_to') + ?.tryGet('rel_type') != RelationshipTypes.edit || editedEventRelationshipEventId == stateMap['']?.eventId || ((stateMap['']?.relationshipType == RelationshipTypes.edit &&