refactor: Update rooms by event not event update

This commit is contained in:
Krille 2024-12-31 14:18:06 +01:00
parent e7065afe31
commit 5ac6c940a9
No known key found for this signature in database
GPG Key ID: E067ECD60F1A0652
2 changed files with 22 additions and 13 deletions

View File

@ -2797,7 +2797,7 @@ class Client extends MatrixApi {
room.setState(user); room.setState(user);
} }
} }
_updateRoomsByEventUpdate(room, update); _updateRoomsByEventUpdate(room, event, type);
if (store) { if (store) {
await database?.storeEventUpdate(update, this); await database?.storeEventUpdate(update, this);
} }
@ -2812,11 +2812,9 @@ class Client extends MatrixApi {
if (prevBatch != null && if (prevBatch != null &&
(type == EventUpdateType.timeline || (type == EventUpdateType.timeline ||
type == EventUpdateType.decryptedTimelineQueue)) { type == EventUpdateType.decryptedTimelineQueue)) {
if ((update.content if (event is MatrixEvent &&
.tryGet<String>('type') (event.type.startsWith(CallConstants.callEventsRegxp))) {
?.startsWith(CallConstants.callEventsRegxp) ?? final callEvent = Event.fromMatrixEvent(event, room);
false)) {
final callEvent = Event.fromJson(update.content, room);
callEvents.add(callEvent); callEvents.add(callEvent);
} }
} }
@ -2916,23 +2914,34 @@ class Client extends MatrixApi {
return room; return room;
} }
void _updateRoomsByEventUpdate(Room room, EventUpdate eventUpdate) { void _updateRoomsByEventUpdate(
if (eventUpdate.type == EventUpdateType.history) return; Room room,
StrippedStateEvent eventUpdate,
EventUpdateType type,
) {
if (type == EventUpdateType.history) return;
switch (eventUpdate.type) { switch (type) {
case EventUpdateType.inviteState: case EventUpdateType.inviteState:
room.setState(StrippedStateEvent.fromJson(eventUpdate.content)); room.setState(eventUpdate);
break; break;
case EventUpdateType.state: case EventUpdateType.state:
case EventUpdateType.timeline: case EventUpdateType.timeline:
final event = Event.fromJson(eventUpdate.content, room); if (eventUpdate is! MatrixEvent) {
Logs().wtf(
'Passed in a ${eventUpdate.runtimeType} with $type to _updateRoomsByEventUpdate(). This should never happen!',
);
assert(true);
return;
}
final event = Event.fromMatrixEvent(eventUpdate, room);
// Update the room state: // Update the room state:
if (event.stateKey != null && if (event.stateKey != null &&
(!room.partial || importantStateEvents.contains(event.type))) { (!room.partial || importantStateEvents.contains(event.type))) {
room.setState(event); room.setState(event);
} }
if (eventUpdate.type != EventUpdateType.timeline) break; if (type != EventUpdateType.timeline) break;
// If last event is null or not a valid room preview event anyway, // If last event is null or not a valid room preview event anyway,
// just use this: // just use this:

View File

@ -171,7 +171,7 @@ class Event extends MatrixEvent {
status: status ?? status: status ??
eventStatusFromInt( eventStatusFromInt(
matrixEvent.unsigned matrixEvent.unsigned
?.tryGet<int>('messageSendingStatusKey') ?? ?.tryGet<int>(messageSendingStatusKey) ??
defaultStatus.intValue, defaultStatus.intValue,
), ),
content: matrixEvent.content, content: matrixEvent.content,