From 3f04532ffee73cdd4d37fdda503415b0612347af Mon Sep 17 00:00:00 2001 From: Krille Date: Thu, 9 Jan 2025 08:40:12 +0100 Subject: [PATCH 1/2] refactor: Remove BasicRoomEvent type We actually never use the roomId of this type and the matrix spec has changed in a way that the roomId is never sent there actually. So it was super easy to just replace all BasicRoomEvent with BasicEvent. The roomId became nullable anyway. --- lib/fake_matrix_api.dart | 3 +- lib/matrix_api_lite.dart | 1 - .../model/basic_room_event.dart | 45 ------------------- lib/matrix_api_lite/model/sync_update.dart | 12 ++--- lib/src/client.dart | 7 ++- lib/src/database/database_api.dart | 2 +- .../database/hive_collections_database.dart | 6 +-- lib/src/database/matrix_sdk_database.dart | 6 +-- lib/src/room.dart | 13 +++--- test/database_api_test.dart | 3 +- test/room_test.dart | 8 ++-- test/timeline_test.dart | 16 +++---- 12 files changed, 36 insertions(+), 86 deletions(-) delete mode 100644 lib/matrix_api_lite/model/basic_room_event.dart diff --git a/lib/fake_matrix_api.dart b/lib/fake_matrix_api.dart index 37f3e91e4..34bf8e376 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 2fa9eab5a..e75d38363 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 7cfad8d64..000000000 --- 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 99cecdc57..fd8a68b2c 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 8164177fe..c9ed118a1 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 399912436..644ecfff5 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 8487f5c21..cdc57c4e3 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 06493ff9e..43965987e 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 29a411f96..ef504c875 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 cee598bb1..85d1e3ecd 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 f5983e48d..c13d692ed 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 a31b2068a..32e0ecebf 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': { From 3642ff60a8b3834dddf9c5b367fe3932e99b067a Mon Sep 17 00:00:00 2001 From: Krille Date: Thu, 9 Jan 2025 12:10:48 +0100 Subject: [PATCH 2/2] chore: Add missing sqlite dependencies --- .github/workflows/app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/app.yml b/.github/workflows/app.yml index d3044fd5d..50c4f4ba8 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