diff --git a/.github/workflows/app.yml b/.github/workflows/app.yml index d3044fd5..50c4f4ba 100644 --- a/.github/workflows/app.yml +++ b/.github/workflows/app.yml @@ -22,7 +22,7 @@ jobs: export HOMESERVER_IMPLEMENTATION=${{matrix.homeserver}} export HOMESERVER="localhost:80" scripts/integration-server-${{matrix.homeserver}}.sh 2>&1 > /dev/null & - sudo apt-get update && sudo apt-get install --no-install-recommends --no-install-suggests -y libolm3 libssl3 + sudo apt-get update && sudo apt-get install --no-install-recommends --no-install-suggests -y libolm3 libssl3 sqlite3 libsqlite3-dev source scripts/integration-create-environment-variables.sh scripts/integration-prepare-homeserver.sh scripts/prepare.sh diff --git a/lib/fake_matrix_api.dart b/lib/fake_matrix_api.dart index 37f3e91e..34bf8e37 100644 --- a/lib/fake_matrix_api.dart +++ b/lib/fake_matrix_api.dart @@ -245,10 +245,9 @@ class FakeMatrixApi extends BaseClient { join: { roomId: JoinedRoomUpdate( accountData: [ - sdk.BasicRoomEvent( + sdk.BasicEvent( content: decodeJson(data), type: type, - roomId: roomId, ), ], ), diff --git a/lib/matrix_api_lite.dart b/lib/matrix_api_lite.dart index 2fa9eab5..e75d3836 100644 --- a/lib/matrix_api_lite.dart +++ b/lib/matrix_api_lite.dart @@ -39,7 +39,6 @@ export 'matrix_api_lite/model/auth/authentication_types.dart'; export 'matrix_api_lite/model/auth/authentication_user_identifier.dart'; export 'matrix_api_lite/model/basic_event.dart'; export 'matrix_api_lite/model/basic_event_with_sender.dart'; -export 'matrix_api_lite/model/basic_room_event.dart'; export 'matrix_api_lite/model/event_types.dart'; export 'matrix_api_lite/model/events/forwarded_room_key_content.dart'; export 'matrix_api_lite/model/events/image_pack_content.dart'; diff --git a/lib/matrix_api_lite/model/basic_room_event.dart b/lib/matrix_api_lite/model/basic_room_event.dart deleted file mode 100644 index 7cfad8d6..00000000 --- a/lib/matrix_api_lite/model/basic_room_event.dart +++ /dev/null @@ -1,45 +0,0 @@ -/* MIT License -* -* Copyright (C) 2019, 2020, 2021 Famedly GmbH -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all -* copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -*/ - -import 'package:matrix/matrix_api_lite/model/basic_event.dart'; - -class BasicRoomEvent extends BasicEvent { - String? roomId; - - BasicRoomEvent({ - this.roomId, - required super.content, - required super.type, - }); - - BasicRoomEvent.fromJson(super.json) - : roomId = json['room_id'] as String?, - super.fromJson(); - - @override - Map toJson() { - final data = super.toJson(); - if (roomId != null) data['room_id'] = roomId; - return data; - } -} diff --git a/lib/matrix_api_lite/model/sync_update.dart b/lib/matrix_api_lite/model/sync_update.dart index 99cecdc5..fd8a68b2 100644 --- a/lib/matrix_api_lite/model/sync_update.dart +++ b/lib/matrix_api_lite/model/sync_update.dart @@ -170,8 +170,8 @@ class JoinedRoomUpdate extends SyncRoomUpdate { RoomSummary? summary; List? state; TimelineUpdate? timeline; - List? ephemeral; - List? accountData; + List? ephemeral; + List? accountData; UnreadNotificationCounts? unreadNotifications; JoinedRoomUpdate({ @@ -192,11 +192,11 @@ class JoinedRoomUpdate extends SyncRoomUpdate { timeline = json.tryGetFromJson('timeline', TimelineUpdate.fromJson), ephemeral = json .tryGetMap>('ephemeral')?['events'] - ?.map((i) => BasicRoomEvent.fromJson(i as Map)) + ?.map((i) => BasicEvent.fromJson(i as Map)) .toList(), accountData = json .tryGetMap>('account_data')?['events'] - ?.map((i) => BasicRoomEvent.fromJson(i as Map)) + ?.map((i) => BasicEvent.fromJson(i as Map)) .toList(), unreadNotifications = json.tryGetFromJson( 'unread_notifications', @@ -280,7 +280,7 @@ class KnockRoomUpdate extends SyncRoomUpdate { class LeftRoomUpdate extends SyncRoomUpdate { List? state; TimelineUpdate? timeline; - List? accountData; + List? accountData; LeftRoomUpdate({ this.state, @@ -296,7 +296,7 @@ class LeftRoomUpdate extends SyncRoomUpdate { timeline = json.tryGetFromJson('timeline', TimelineUpdate.fromJson), accountData = json .tryGetMap>('account_data')?['events'] - ?.map((i) => BasicRoomEvent.fromJson(i as Map)) + ?.map((i) => BasicEvent.fromJson(i as Map)) .toList(); Map toJson() { diff --git a/lib/src/client.dart b/lib/src/client.dart index 8164177f..c9ed118a 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1200,7 +1200,7 @@ class Client extends MatrixApi { roomAccountData: roomUpdate.accountData ?.asMap() .map((k, v) => MapEntry(v.type, v)) ?? - {}, + {}, ); // Set membership of room to leave, in the case we got a left room passed, otherwise // the left room would have still membership join, which would be wrong for the setState later @@ -2713,7 +2713,7 @@ class Client extends MatrixApi { } } - Future _handleEphemerals(Room room, List events) async { + Future _handleEphemerals(Room room, List events) async { final List receipts = []; for (final event in events) { @@ -2734,9 +2734,8 @@ class Client extends MatrixApi { await receiptStateContent.update(e, room); } - final event = BasicRoomEvent( + final event = BasicEvent( type: LatestReceiptState.eventType, - roomId: room.id, content: receiptStateContent.toJson(), ); await database?.storeRoomAccountData(room.id, event); diff --git a/lib/src/database/database_api.dart b/lib/src/database/database_api.dart index 39991243..644ecfff 100644 --- a/lib/src/database/database_api.dart +++ b/lib/src/database/database_api.dart @@ -134,7 +134,7 @@ abstract class DatabaseApi { Future storeAccountData(String type, Map content); - Future storeRoomAccountData(String roomId, BasicRoomEvent event); + Future storeRoomAccountData(String roomId, BasicEvent event); Future> getUserDeviceKeys(Client client); diff --git a/lib/src/database/hive_collections_database.dart b/lib/src/database/hive_collections_database.dart index 8487f5c2..cdc57c4e 100644 --- a/lib/src/database/hive_collections_database.dart +++ b/lib/src/database/hive_collections_database.dart @@ -580,7 +580,7 @@ class HiveCollectionsDatabase extends DatabaseApi { for (final data in roomAccountDataList) { if (data == null) continue; - final event = BasicRoomEvent.fromJson(copyMap(data)); + final event = BasicEvent.fromJson(copyMap(data)); room.roomAccountData[event.type] = event; } @@ -696,7 +696,7 @@ class HiveCollectionsDatabase extends DatabaseApi { final roomAccountDataRaws = await _roomAccountDataBox.getAllValues(); for (final entry in roomAccountDataRaws.entries) { final keys = TupleKey.fromString(entry.key); - final basicRoomEvent = BasicRoomEvent.fromJson( + final basicRoomEvent = BasicEvent.fromJson( copyMap(entry.value), ); final roomId = keys.parts.first; @@ -1096,7 +1096,7 @@ class HiveCollectionsDatabase extends DatabaseApi { } @override - Future storeRoomAccountData(String roomId, BasicRoomEvent event) async { + Future storeRoomAccountData(String roomId, BasicEvent event) async { await _roomAccountDataBox.put( TupleKey(roomId, event.type).toString(), copyMap(event.toJson()), diff --git a/lib/src/database/matrix_sdk_database.dart b/lib/src/database/matrix_sdk_database.dart index 06493ff9..43965987 100644 --- a/lib/src/database/matrix_sdk_database.dart +++ b/lib/src/database/matrix_sdk_database.dart @@ -626,7 +626,7 @@ class MatrixSdkDatabase extends DatabaseApi with DatabaseFileStorage { for (final data in roomAccountDataList) { if (data == null) continue; - final event = BasicRoomEvent.fromJson(copyMap(data)); + final event = BasicEvent.fromJson(copyMap(data)); room.roomAccountData[event.type] = event; } @@ -683,7 +683,7 @@ class MatrixSdkDatabase extends DatabaseApi with DatabaseFileStorage { final roomAccountDataRaws = await _roomAccountDataBox.getAllValues(); for (final entry in roomAccountDataRaws.entries) { final keys = TupleKey.fromString(entry.key); - final basicRoomEvent = BasicRoomEvent.fromJson( + final basicRoomEvent = BasicEvent.fromJson( copyMap(entry.value), ); final roomId = keys.parts.first; @@ -1084,7 +1084,7 @@ class MatrixSdkDatabase extends DatabaseApi with DatabaseFileStorage { } @override - Future storeRoomAccountData(String roomId, BasicRoomEvent event) async { + Future storeRoomAccountData(String roomId, BasicEvent event) async { await _roomAccountDataBox.put( TupleKey(roomId, event.type).toString(), event.toJson(), diff --git a/lib/src/room.dart b/lib/src/room.dart index 29a411f9..ef504c87 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -67,10 +67,10 @@ class Room { Map> states = {}; /// Key-Value store for ephemerals. - Map ephemerals = {}; + Map ephemerals = {}; /// Key-Value store for private account data only visible for this user. - Map roomAccountData = {}; + Map roomAccountData = {}; final _sendingQueue = []; @@ -372,7 +372,7 @@ class Room { Event? lastEvent; - void setEphemeral(BasicRoomEvent ephemeral) { + void setEphemeral(BasicEvent ephemeral) { ephemerals[ephemeral.type] = ephemeral; if (ephemeral.type == 'm.typing') { _clearTypingIndicatorTimer?.cancel(); @@ -403,10 +403,10 @@ class Room { this.highlightCount = 0, this.prev_batch, required this.client, - Map? roomAccountData, + Map? roomAccountData, RoomSummary? summary, this.lastEvent, - }) : roomAccountData = roomAccountData ?? {}, + }) : roomAccountData = roomAccountData ?? {}, summary = summary ?? RoomSummary.fromJson({ 'm.joined_member_count': 0, @@ -572,9 +572,8 @@ class Room { join: { id: JoinedRoomUpdate( accountData: [ - BasicRoomEvent( + BasicEvent( content: content, - roomId: id, type: EventType.markedUnread, ), ], diff --git a/test/database_api_test.dart b/test/database_api_test.dart index cee598bb..85d1e3ec 100644 --- a/test/database_api_test.dart +++ b/test/database_api_test.dart @@ -257,10 +257,9 @@ void main() { await database.storeRoomAccountData( roomid, - BasicRoomEvent( + BasicEvent( content: {'foo': 'bar'}, type: 'm.test', - roomId: roomid, ), ); diff --git a/test/room_test.dart b/test/room_test.dart index f5983e48..c13d692e 100644 --- a/test/room_test.dart +++ b/test/room_test.dart @@ -82,11 +82,11 @@ void main() { 'm.heroes': heroes, }), roomAccountData: { - 'com.test.foo': BasicRoomEvent( + 'com.test.foo': BasicEvent( type: 'com.test.foo', content: {'foo': 'bar'}, ), - 'm.fully_read': BasicRoomEvent( + 'm.fully_read': BasicEvent( type: 'm.fully_read', content: {'event_id': '\$event_id:example.com'}, ), @@ -1292,7 +1292,7 @@ void main() { await room.addTag(TagType.favourite, order: 0.1); await room.removeTag(TagType.favourite); expect(room.isFavourite, false); - room.roomAccountData['m.tag'] = BasicRoomEvent.fromJson({ + room.roomAccountData['m.tag'] = BasicEvent.fromJson({ 'content': { 'tags': { 'm.favourite': {'order': 0.1}, @@ -1311,7 +1311,7 @@ void main() { await room.markUnread(true); await room.markUnread(false); expect(room.markedUnread, false); - room.roomAccountData['m.marked_unread'] = BasicRoomEvent.fromJson({ + room.roomAccountData['m.marked_unread'] = BasicEvent.fromJson({ 'content': {'unread': true}, 'type': 'm.marked_unread', }); diff --git a/test/timeline_test.dart b/test/timeline_test.dart index a31b2068..32e0eceb 100644 --- a/test/timeline_test.dart +++ b/test/timeline_test.dart @@ -177,7 +177,7 @@ void main() { join: { timeline.room.id: JoinedRoomUpdate( ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { timeline.events.first.eventId: { @@ -294,7 +294,7 @@ void main() { join: { timeline.room.id: JoinedRoomUpdate( ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { '\$2': { @@ -328,7 +328,7 @@ void main() { join: { timeline.room.id: JoinedRoomUpdate( ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { '\$2': { @@ -371,7 +371,7 @@ void main() { join: { timeline.room.id: JoinedRoomUpdate( ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { '\$2': { @@ -421,7 +421,7 @@ void main() { join: { timeline.room.id: JoinedRoomUpdate( ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { '\$1': { @@ -467,7 +467,7 @@ void main() { join: { timeline.room.id: JoinedRoomUpdate( ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { '\$2': { @@ -511,7 +511,7 @@ void main() { join: { timeline.room.id: JoinedRoomUpdate( ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { '\$2': { @@ -559,7 +559,7 @@ void main() { ], ), ephemeral: [ - BasicRoomEvent.fromJson({ + BasicEvent.fromJson({ 'type': 'm.receipt', 'content': { '\$2': {