storeRoomUpdate method
Future<void>
storeRoomUpdate(
- String roomId,
- SyncRoomUpdate roomUpdate,
- Event? lastEvent,
- Client client,
override
Stores a RoomUpdate object in the database. Must be called inside of transaction.
Implementation
@override
Future<void> storeRoomUpdate(String roomId, SyncRoomUpdate roomUpdate,
Event? lastEvent, Client client) async {
// Leave room if membership is leave
if (roomUpdate is LeftRoomUpdate) {
await forgetRoom(roomId);
return;
}
final membership = roomUpdate is LeftRoomUpdate
? Membership.leave
: roomUpdate is InvitedRoomUpdate
? Membership.invite
: Membership.join;
// Make sure room exists
final currentRawRoom = await _roomsBox.get(roomId);
if (currentRawRoom == null) {
await _roomsBox.put(
roomId,
roomUpdate is JoinedRoomUpdate
? Room(
client: client,
id: roomId,
membership: membership,
highlightCount:
roomUpdate.unreadNotifications?.highlightCount?.toInt() ??
0,
notificationCount: roomUpdate
.unreadNotifications?.notificationCount
?.toInt() ??
0,
prev_batch: roomUpdate.timeline?.prevBatch,
summary: roomUpdate.summary,
lastEvent: lastEvent,
).toJson()
: Room(
client: client,
id: roomId,
membership: membership,
lastEvent: lastEvent,
).toJson());
} else if (roomUpdate is JoinedRoomUpdate) {
final currentRoom = Room.fromJson(copyMap(currentRawRoom), client);
await _roomsBox.put(
roomId,
Room(
client: client,
id: roomId,
membership: membership,
highlightCount:
roomUpdate.unreadNotifications?.highlightCount?.toInt() ??
currentRoom.highlightCount,
notificationCount:
roomUpdate.unreadNotifications?.notificationCount?.toInt() ??
currentRoom.notificationCount,
prev_batch:
roomUpdate.timeline?.prevBatch ?? currentRoom.prev_batch,
summary: RoomSummary.fromJson(currentRoom.summary.toJson()
..addAll(roomUpdate.summary?.toJson() ?? {})),
lastEvent: lastEvent,
).toJson());
}
}