diff --git a/lib/src/client.dart b/lib/src/client.dart index 45ae727d..7a9783b0 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1536,7 +1536,12 @@ sort order of ${prevState.sortOrder}. This should never happen...'''); ), ); } else { - room.setState(stateEvent); + stateEvent.relationshipType != RelationshipTypes.edit + ? room.setState(stateEvent) + : {room.lastEvent.eventId, room.lastEvent.relationshipEventId} + .contains(stateEvent.relationshipEventId) + ? room.setState(stateEvent) + : null; } break; case EventUpdateType.accountData: diff --git a/lib/src/database/hive_database.dart b/lib/src/database/hive_database.dart index 92c2f030..d0bbb32c 100644 --- a/lib/src/database/hive_database.dart +++ b/lib/src/database/hive_database.dart @@ -852,7 +852,27 @@ class FamedlySdkHiveDatabase extends DatabaseApi { ).toString(); final Map stateMap = await _roomStateBox.get(key) ?? {}; stateMap[eventUpdate.content['state_key']] = eventUpdate.content; - await _roomStateBox.put(key, stateMap); + final room = Room( + id: eventUpdate.roomID, + ); + final Map states = await _roomStateBox + .get(MultiKey(eventUpdate.roomID, EventTypes.Message).toString()); + final eventsInRoomStateBox = states.values + .map((raw) => Event.fromJson(convertToJson(raw), room)) + .toList(); + + for (final event in eventsInRoomStateBox) { + if (event.type == 'm.room.message') { + stateMap.values.first['content']['m.relates_to'] == null + ? await _roomStateBox.put(key, stateMap) + : {event.eventId, event.relationshipEventId}.contains(stateMap + .values.first['content']['m.relates_to']['event_id']) + ? await _roomStateBox.put(key, stateMap) + : null; + } else { + await _roomStateBox.put(key, stateMap); + } + } } }