From 66e590073e35124386c6aa6d5dc35c96a95ca423 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Thu, 22 Oct 2020 12:21:20 +0200 Subject: [PATCH] refactor: Event Update Type --- lib/encryption/encryption.dart | 7 +-- lib/src/client.dart | 62 +++++++++++++--------- lib/src/database/database.dart | 31 ++++++----- lib/src/event.dart | 2 +- lib/src/room.dart | 2 +- lib/src/timeline.dart | 5 +- lib/src/utils/event_update.dart | 11 +++- test/client_test.dart | 26 ++++----- test/encryption/key_verification_test.dart | 4 +- test/matrix_database_test.dart | 14 ++--- test/timeline_test.dart | 44 +++++++-------- 11 files changed, 118 insertions(+), 90 deletions(-) diff --git a/lib/encryption/encryption.dart b/lib/encryption/encryption.dart index d487db5..be04610 100644 --- a/lib/encryption/encryption.dart +++ b/lib/encryption/encryption.dart @@ -105,7 +105,7 @@ class Encryption { } Future handleEventUpdate(EventUpdate update) async { - if (update.type == 'ephemeral') { + if (update.type == EventUpdateType.ephemeral) { return; } if (update.eventType.startsWith('m.key.verification.') || @@ -235,7 +235,8 @@ class Encryption { } Future decryptRoomEvent(String roomId, Event event, - {bool store = false, String updateType = 'timeline'}) async { + {bool store = false, + EventUpdateType updateType = EventUpdateType.timeline}) async { final doStore = () async { await client.database?.storeEventUpdate( client.id, @@ -247,7 +248,7 @@ class Encryption { sortOrder: event.sortOrder, ), ); - if (updateType != 'history') { + if (updateType != EventUpdateType.history) { event.room?.setState(event); } }; diff --git a/lib/src/client.dart b/lib/src/client.dart index b1b75b9..37baef5 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -887,14 +887,16 @@ class Client extends MatrixApi { if (room.state?.isNotEmpty ?? false) { // TODO: This method seems to be comperatively slow for some updates await _handleRoomEvents( - id, room.state.map((i) => i.toJson()).toList(), 'state'); + id, + room.state.map((i) => i.toJson()).toList(), + EventUpdateType.state); handledEvents = true; } if (room.timeline?.events?.isNotEmpty ?? false) { await _handleRoomEvents( id, room.timeline.events.map((i) => i.toJson()).toList(), - sortAtTheEnd ? 'history' : 'timeline', + sortAtTheEnd ? EventUpdateType.history : EventUpdateType.timeline, sortAtTheEnd: sortAtTheEnd); handledEvents = true; } @@ -904,30 +906,40 @@ class Client extends MatrixApi { id, room.ephemeral.map((i) => i.toJson()).toList()); } if (room.accountData?.isNotEmpty ?? false) { - await _handleRoomEvents(id, - room.accountData.map((i) => i.toJson()).toList(), 'account_data'); + await _handleRoomEvents( + id, + room.accountData.map((i) => i.toJson()).toList(), + EventUpdateType.accountData); } } if (room is LeftRoomUpdate) { if (room.timeline?.events?.isNotEmpty ?? false) { - await _handleRoomEvents(id, - room.timeline.events.map((i) => i.toJson()).toList(), 'timeline'); + await _handleRoomEvents( + id, + room.timeline.events.map((i) => i.toJson()).toList(), + EventUpdateType.timeline); handledEvents = true; } if (room.accountData?.isNotEmpty ?? false) { - await _handleRoomEvents(id, - room.accountData.map((i) => i.toJson()).toList(), 'account_data'); + await _handleRoomEvents( + id, + room.accountData.map((i) => i.toJson()).toList(), + EventUpdateType.accountData); } if (room.state?.isNotEmpty ?? false) { await _handleRoomEvents( - id, room.state.map((i) => i.toJson()).toList(), 'state'); + id, + room.state.map((i) => i.toJson()).toList(), + EventUpdateType.state); handledEvents = true; } } if (room is InvitedRoomUpdate && (room.inviteState?.isNotEmpty ?? false)) { - await _handleRoomEvents(id, - room.inviteState.map((i) => i.toJson()).toList(), 'invite_state'); + await _handleRoomEvents( + id, + room.inviteState.map((i) => i.toJson()).toList(), + EventUpdateType.inviteState); } if (handledEvents && database != null && roomObj != null) { await roomObj.updateSortOrder(); @@ -937,7 +949,7 @@ class Client extends MatrixApi { Future _handleEphemerals(String id, List events) async { for (num i = 0; i < events.length; i++) { - await _handleEvent(events[i], id, 'ephemeral'); + await _handleEvent(events[i], id, EventUpdateType.ephemeral); // Receipt events are deltas between two states. We will create a // fake room account data event for this and store the difference @@ -974,13 +986,13 @@ class Client extends MatrixApi { } } events[i]['content'] = receiptStateContent; - await _handleEvent(events[i], id, 'account_data'); + await _handleEvent(events[i], id, EventUpdateType.accountData); } } } Future _handleRoomEvents( - String chat_id, List events, String type, + String chat_id, List events, EventUpdateType type, {bool sortAtTheEnd = false}) async { for (num i = 0; i < events.length; i++) { await _handleEvent(events[i], chat_id, type, sortAtTheEnd: sortAtTheEnd); @@ -988,7 +1000,7 @@ class Client extends MatrixApi { } Future _handleEvent( - Map event, String roomID, String type, + Map event, String roomID, EventUpdateType type, {bool sortAtTheEnd = false}) async { if (event['type'] is String && event['content'] is Map) { // The client must ignore any new m.room.encryption event to prevent @@ -1004,7 +1016,7 @@ class Client extends MatrixApi { // ephemeral events aren't persisted and don't need a sort order - they are // expected to be processed as soon as they come in - final sortOrder = type != 'ephemeral' + final sortOrder = type != EventUpdateType.ephemeral ? (sortAtTheEnd ? room.oldSortOrder : room.newSortOrder) : 0.0; var update = EventUpdate( @@ -1027,7 +1039,7 @@ class Client extends MatrixApi { room.setState(user); } } - if (type != 'ephemeral' && database != null) { + if (type != EventUpdateType.ephemeral && database != null) { await database.storeEventUpdate(id, update); } _updateRoomsByEventUpdate(update); @@ -1038,7 +1050,7 @@ class Client extends MatrixApi { final rawUnencryptedEvent = update.content; - if (prevBatch != null && type == 'timeline') { + if (prevBatch != null && type == EventUpdateType.timeline) { if (rawUnencryptedEvent['type'] == EventTypes.CallInvite) { onCallInvite .add(Event.fromJson(rawUnencryptedEvent, room, sortOrder)); @@ -1117,15 +1129,15 @@ class Client extends MatrixApi { } void _updateRoomsByEventUpdate(EventUpdate eventUpdate) { - if (eventUpdate.type == 'history') return; + if (eventUpdate.type == EventUpdateType.history) return; final room = getRoomById(eventUpdate.roomID); if (room == null) return; switch (eventUpdate.type) { - case 'timeline': - case 'state': - case 'invite_state': + case EventUpdateType.timeline: + case EventUpdateType.state: + case EventUpdateType.inviteState: var stateEvent = Event.fromJson(eventUpdate.content, room, eventUpdate.sortOrder); var prevState = room.getState(stateEvent.type, stateEvent.stateKey); @@ -1151,14 +1163,16 @@ sort order of ${prevState.sortOrder}. This should never happen...'''); room.setState(stateEvent); } break; - case 'account_data': + case EventUpdateType.accountData: room.roomAccountData[eventUpdate.eventType] = BasicRoomEvent.fromJson(eventUpdate.content); break; - case 'ephemeral': + case EventUpdateType.ephemeral: room.ephemerals[eventUpdate.eventType] = BasicRoomEvent.fromJson(eventUpdate.content); break; + case EventUpdateType.history: + break; } room.onUpdate.add(room.id); } diff --git a/lib/src/database/database.dart b/lib/src/database/database.dart index 9de2ff3..e524305 100644 --- a/lib/src/database/database.dart +++ b/lib/src/database/database.dart @@ -6,7 +6,6 @@ import 'package:olm/olm.dart' as olm; import '../../famedlysdk.dart' as sdk; import '../../matrix_api.dart' as api; -import '../../matrix_api.dart'; import '../client.dart'; import '../room.dart'; import '../utils/logs.dart'; @@ -266,13 +265,13 @@ class Database extends _$Database { // let's see if we need any m.room.member events final membersToPostload = {}; // the lastEvent message preview might have an author we need to fetch, if it is a group chat - if (room.getState(EventTypes.Message) != null && !room.isDirectChat) { - membersToPostload.add(room.getState(EventTypes.Message).senderId); + if (room.getState(api.EventTypes.Message) != null && !room.isDirectChat) { + membersToPostload.add(room.getState(api.EventTypes.Message).senderId); } // if the room has no name and no canonical alias, its name is calculated // based on the heroes of the room - if (room.getState(EventTypes.RoomName) == null && - room.getState(EventTypes.RoomCanonicalAlias) == null && + if (room.getState(api.EventTypes.RoomName) == null && + room.getState(api.EventTypes.RoomCanonicalAlias) == null && room.mHeroes != null) { // we don't have a name and no canonical alias, so we'll need to // post-load the heroes @@ -430,7 +429,7 @@ class Database extends _$Database { /// [transaction]. Future storeEventUpdate( int clientId, sdk.EventUpdate eventUpdate) async { - if (eventUpdate.type == 'ephemeral') return; + if (eventUpdate.type == sdk.EventUpdateType.ephemeral) return; final eventContent = eventUpdate.content; final type = eventUpdate.type; final chatId = eventUpdate.roomID; @@ -441,11 +440,12 @@ class Database extends _$Database { stateKey = eventContent['state_key']; } - if (eventUpdate.eventType == EventTypes.Redaction) { + if (eventUpdate.eventType == api.EventTypes.Redaction) { await redactMessage(clientId, eventUpdate); } - if (type == 'timeline' || type == 'history') { + if (type == sdk.EventUpdateType.timeline || + type == sdk.EventUpdateType.history) { // calculate the status var status = 2; if (eventContent['unsigned'] is Map && @@ -493,7 +493,7 @@ class Database extends _$Database { } if (storeNewEvent) { DbEvent oldEvent; - if (type == 'history') { + if (type == sdk.EventUpdateType.history) { final allOldEvents = await getEvent(clientId, eventContent['event_id'], chatId).get(); if (allOldEvents.isNotEmpty) { @@ -527,12 +527,15 @@ class Database extends _$Database { } } - if (type == 'history') return; + if (type == sdk.EventUpdateType.history) return; - if (type != 'account_data' && + if (type != sdk.EventUpdateType.accountData && ((stateKey is String) || - [EventTypes.Message, EventTypes.Sticker, EventTypes.Encrypted] - .contains(eventUpdate.eventType))) { + [ + api.EventTypes.Message, + api.EventTypes.Sticker, + api.EventTypes.Encrypted + ].contains(eventUpdate.eventType))) { final now = DateTime.now(); await storeRoomState( clientId, @@ -547,7 +550,7 @@ class Database extends _$Database { json.encode(eventContent['prev_content'] ?? ''), stateKey ?? '', ); - } else if (type == 'account_data') { + } else if (type == sdk.EventUpdateType.accountData) { await storeRoomAccountData( clientId, eventContent['type'], diff --git a/lib/src/event.dart b/lib/src/event.dart index 6ec4df4..29202bd 100644 --- a/lib/src/event.dart +++ b/lib/src/event.dart @@ -316,7 +316,7 @@ class Event extends MatrixEvent { room.client.onEvent.add(EventUpdate( roomID: room.id, - type: 'timeline', + type: EventUpdateType.timeline, eventType: type, content: { 'event_id': eventId, diff --git a/lib/src/room.dart b/lib/src/room.dart index 80f34ba..1b64336 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -1190,7 +1190,7 @@ class Room { EventUpdate( content: content, roomID: id, - type: 'state', + type: EventUpdateType.state, eventType: EventTypes.RoomMember, sortOrder: 0.0), ); diff --git a/lib/src/timeline.dart b/lib/src/timeline.dart index 1ec96aa..649aaa9 100644 --- a/lib/src/timeline.dart +++ b/lib/src/timeline.dart @@ -211,7 +211,8 @@ class Timeline { try { if (eventUpdate.roomID != room.id) return; - if (eventUpdate.type == 'timeline' || eventUpdate.type == 'history') { + if (eventUpdate.type == EventUpdateType.timeline || + eventUpdate.type == EventUpdateType.history) { var status = eventUpdate.content['status'] ?? (eventUpdate.content['unsigned'] is Map ? eventUpdate.content['unsigned'][MessageSendingStatusKey] @@ -252,7 +253,7 @@ class Timeline { var newEvent = Event.fromJson( eventUpdate.content, room, eventUpdate.sortOrder); - if (eventUpdate.type == 'history' && + if (eventUpdate.type == EventUpdateType.history && events.indexWhere( (e) => e.eventId == eventUpdate.content['event_id']) != -1) return; diff --git a/lib/src/utils/event_update.dart b/lib/src/utils/event_update.dart index 514966b..de538b2 100644 --- a/lib/src/utils/event_update.dart +++ b/lib/src/utils/event_update.dart @@ -20,11 +20,20 @@ import '../../famedlysdk.dart'; import '../../matrix_api.dart'; import 'logs.dart'; +enum EventUpdateType { + timeline, + state, + history, + accountData, + ephemeral, + inviteState +} + /// Represents a new event (e.g. a message in a room) or an update for an /// already known event. class EventUpdate { /// Usually 'timeline', 'state' or whatever. - final String type; + final EventUpdateType type; /// Most events belong to a room. If not, this equals to eventType. final String roomID; diff --git a/test/client_test.dart b/test/client_test.dart index f1a13f4..266559b 100644 --- a/test/client_test.dart +++ b/test/client_test.dart @@ -240,55 +240,55 @@ void main() { expect(eventUpdateList[0].eventType, 'm.room.member'); expect(eventUpdateList[0].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[0].type, 'state'); + expect(eventUpdateList[0].type, EventUpdateType.state); expect(eventUpdateList[1].eventType, 'm.room.canonical_alias'); expect(eventUpdateList[1].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[1].type, 'state'); + expect(eventUpdateList[1].type, EventUpdateType.state); expect(eventUpdateList[2].eventType, 'm.room.encryption'); expect(eventUpdateList[2].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[2].type, 'state'); + expect(eventUpdateList[2].type, EventUpdateType.state); expect(eventUpdateList[3].eventType, 'm.room.pinned_events'); expect(eventUpdateList[3].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[3].type, 'state'); + expect(eventUpdateList[3].type, EventUpdateType.state); expect(eventUpdateList[4].eventType, 'm.room.member'); expect(eventUpdateList[4].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[4].type, 'timeline'); + expect(eventUpdateList[4].type, EventUpdateType.timeline); expect(eventUpdateList[5].eventType, 'm.room.message'); expect(eventUpdateList[5].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[5].type, 'timeline'); + expect(eventUpdateList[5].type, EventUpdateType.timeline); expect(eventUpdateList[6].eventType, 'm.typing'); expect(eventUpdateList[6].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[6].type, 'ephemeral'); + expect(eventUpdateList[6].type, EventUpdateType.ephemeral); expect(eventUpdateList[7].eventType, 'm.receipt'); expect(eventUpdateList[7].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[7].type, 'ephemeral'); + expect(eventUpdateList[7].type, EventUpdateType.ephemeral); expect(eventUpdateList[8].eventType, 'm.receipt'); expect(eventUpdateList[8].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[8].type, 'account_data'); + expect(eventUpdateList[8].type, EventUpdateType.accountData); expect(eventUpdateList[9].eventType, 'm.tag'); expect(eventUpdateList[9].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[9].type, 'account_data'); + expect(eventUpdateList[9].type, EventUpdateType.accountData); expect(eventUpdateList[10].eventType, 'org.example.custom.room.config'); expect(eventUpdateList[10].roomID, '!726s6s6q:example.com'); - expect(eventUpdateList[10].type, 'account_data'); + expect(eventUpdateList[10].type, EventUpdateType.accountData); expect(eventUpdateList[11].eventType, 'm.room.name'); expect(eventUpdateList[11].roomID, '!696r7674:example.com'); - expect(eventUpdateList[11].type, 'invite_state'); + expect(eventUpdateList[11].type, EventUpdateType.inviteState); expect(eventUpdateList[12].eventType, 'm.room.member'); expect(eventUpdateList[12].roomID, '!696r7674:example.com'); - expect(eventUpdateList[12].type, 'invite_state'); + expect(eventUpdateList[12].type, EventUpdateType.inviteState); }); test('To Device Update Test', () async { diff --git a/test/encryption/key_verification_test.dart b/test/encryption/key_verification_test.dart index 8d7c86b..698cb61 100644 --- a/test/encryption/key_verification_test.dart +++ b/test/encryption/key_verification_test.dart @@ -54,7 +54,7 @@ EventUpdate getLastSentEvent(KeyVerification req) { 'sender': req.client.userID, }, eventType: type, - type: 'timeline', + type: EventUpdateType.timeline, roomID: req.room.id, ); } @@ -446,7 +446,7 @@ void main() { 'sender': client2.userID, }, eventType: 'm.key.verification.ready', - type: 'timeline', + type: EventUpdateType.timeline, roomID: req2.room.id, )); expect(req2.state, KeyVerificationState.error); diff --git a/test/matrix_database_test.dart b/test/matrix_database_test.dart index 0f16b63..f41eebe 100644 --- a/test/matrix_database_test.dart +++ b/test/matrix_database_test.dart @@ -40,7 +40,7 @@ void main() { test('storeEventUpdate', () async { // store a simple update var update = EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: room.id, eventType: 'm.room.message', content: { @@ -58,7 +58,7 @@ void main() { // insert a transaction id update = EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: room.id, eventType: 'm.room.message', content: { @@ -75,7 +75,7 @@ void main() { event = await database.getEventById(clientId, 'transaction-1', room); expect(event.eventId, 'transaction-1'); update = EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: room.id, eventType: 'm.room.message', content: { @@ -98,7 +98,7 @@ void main() { // insert a transaction id if the event id for it already exists update = EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: room.id, eventType: 'm.room.message', content: { @@ -115,7 +115,7 @@ void main() { event = await database.getEventById(clientId, '\$event-3', room); expect(event.eventId, '\$event-3'); update = EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: room.id, eventType: 'm.room.message', content: { @@ -140,7 +140,7 @@ void main() { // insert transaction id and not update status update = EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: room.id, eventType: 'm.room.message', content: { @@ -157,7 +157,7 @@ void main() { event = await database.getEventById(clientId, '\$event-4', room); expect(event.eventId, '\$event-4'); update = EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: room.id, eventType: 'm.room.message', content: { diff --git a/test/timeline_test.dart b/test/timeline_test.dart index 8717e75..6e1ddfa 100644 --- a/test/timeline_test.dart +++ b/test/timeline_test.dart @@ -52,7 +52,7 @@ void main() { await client.checkServer('https://fakeServer.notExisting'); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -65,7 +65,7 @@ void main() { }, sortOrder: room.newSortOrder)); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -114,7 +114,7 @@ void main() { expect(timeline.events[0].receipts[0].user.id, '@alice:example.com'); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.redaction', content: { @@ -149,7 +149,7 @@ void main() { expect(timeline.events[0].status, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -174,7 +174,7 @@ void main() { test('Send message with error', () async { client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -221,7 +221,7 @@ void main() { test('Resend message', () async { timeline.events.clear(); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -278,7 +278,7 @@ void main() { test('sort errors on top', () async { timeline.events.clear(); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -291,7 +291,7 @@ void main() { }, sortOrder: room.newSortOrder)); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -311,7 +311,7 @@ void main() { test('sending event to failed update', () async { timeline.events.clear(); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -327,7 +327,7 @@ void main() { expect(timeline.events[0].status, 0); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -347,7 +347,7 @@ void main() { () async { timeline.events.clear(); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -363,7 +363,7 @@ void main() { expect(timeline.events[0].status, 0); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -380,7 +380,7 @@ void main() { expect(timeline.events[0].status, 1); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -401,7 +401,7 @@ void main() { () async { timeline.events.clear(); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -420,7 +420,7 @@ void main() { expect(timeline.events[0].status, 0); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -439,7 +439,7 @@ void main() { expect(timeline.events[0].status, 2); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -461,7 +461,7 @@ void main() { test('sending an event 0 -> -1 -> 2', () async { timeline.events.clear(); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -477,7 +477,7 @@ void main() { expect(timeline.events[0].status, 0); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -493,7 +493,7 @@ void main() { expect(timeline.events[0].status, -1); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -513,7 +513,7 @@ void main() { test('sending an event 0 -> 2 -> -1', () async { timeline.events.clear(); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -529,7 +529,7 @@ void main() { expect(timeline.events[0].status, 0); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: { @@ -546,7 +546,7 @@ void main() { expect(timeline.events[0].status, 2); expect(timeline.events.length, 1); client.onEvent.add(EventUpdate( - type: 'timeline', + type: EventUpdateType.timeline, roomID: roomID, eventType: 'm.room.message', content: {