From 3d7730bc32f65f3fa70dc3d69814dd832ddb8259 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Mon, 19 Sep 2022 22:00:31 +0100 Subject: [PATCH] filtering out spaces from the room overviews --- .../sync/internal/request/ApiTimelineEvent.kt | 8 +++- .../internal/sync/RoomOverviewProcessor.kt | 47 ++++++++++--------- .../sync/internal/sync/RoomProcessor.kt | 16 ++++--- 3 files changed, 42 insertions(+), 29 deletions(-) diff --git a/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/request/ApiTimelineEvent.kt b/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/request/ApiTimelineEvent.kt index 81fe26c..6a26b02 100644 --- a/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/request/ApiTimelineEvent.kt +++ b/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/request/ApiTimelineEvent.kt @@ -21,7 +21,13 @@ internal sealed class ApiTimelineEvent { @Serializable internal data class Content( @SerialName("type") val type: String? = null - ) + ) { + + object Type { + const val SPACE = "m.space" + } + + } } @Serializable diff --git a/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomOverviewProcessor.kt b/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomOverviewProcessor.kt index f5ac3b4..d4d4ebf 100644 --- a/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomOverviewProcessor.kt +++ b/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomOverviewProcessor.kt @@ -12,33 +12,38 @@ internal class RoomOverviewProcessor( private val roomMembersService: RoomMembersService, ) { - suspend fun process(roomToProcess: RoomToProcess, previousState: RoomOverview?, lastMessage: LastMessage?): RoomOverview { + suspend fun process(roomToProcess: RoomToProcess, previousState: RoomOverview?, lastMessage: LastMessage?): RoomOverview? { val combinedEvents = roomToProcess.apiSyncRoom.state.stateEvents + roomToProcess.apiSyncRoom.timeline.apiTimelineEvents val isEncrypted = combinedEvents.any { it is ApiTimelineEvent.Encryption } val readMarker = roomToProcess.apiSyncRoom.accountData?.events?.filterIsInstance()?.firstOrNull()?.content?.eventId return when (previousState) { null -> combinedEvents.filterIsInstance().first().let { roomCreate -> - val roomName = roomDisplayName(roomToProcess, combinedEvents) - val isGroup = roomToProcess.directMessage == null - val processedName = roomName ?: roomToProcess.directMessage?.let { - roomMembersService.find(roomToProcess.roomId, it)?.let { it.displayName ?: it.id.value } + when (roomCreate.content.type) { + ApiTimelineEvent.RoomCreate.Content.Type.SPACE -> null + else -> { + val roomName = roomDisplayName(roomToProcess, combinedEvents) + val isGroup = roomToProcess.directMessage == null + val processedName = roomName ?: roomToProcess.directMessage?.let { + roomMembersService.find(roomToProcess.roomId, it)?.let { it.displayName ?: it.id.value } + } + RoomOverview( + roomName = processedName, + roomCreationUtc = roomCreate.utcTimestamp, + lastMessage = lastMessage, + roomId = roomToProcess.roomId, + isGroup = isGroup, + roomAvatarUrl = roomAvatar( + roomToProcess.roomId, + roomMembersService, + roomToProcess.directMessage, + combinedEvents, + roomToProcess.userCredentials.homeServer + ), + readMarker = readMarker, + isEncrypted = isEncrypted, + ) + } } - RoomOverview( - roomName = processedName, - roomCreationUtc = roomCreate.utcTimestamp, - lastMessage = lastMessage, - roomId = roomToProcess.roomId, - isGroup = isGroup, - roomAvatarUrl = roomAvatar( - roomToProcess.roomId, - roomMembersService, - roomToProcess.directMessage, - combinedEvents, - roomToProcess.userCredentials.homeServer - ), - readMarker = readMarker, - isEncrypted = isEncrypted, - ) } else -> { diff --git a/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomProcessor.kt b/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomProcessor.kt index f851f46..5eb0353 100644 --- a/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomProcessor.kt +++ b/matrix/services/sync/src/main/kotlin/app/dapk/st/matrix/sync/internal/sync/RoomProcessor.kt @@ -17,7 +17,7 @@ internal class RoomProcessor( private val ephemeralEventsUseCase: EphemeralEventsUseCase, ) { - suspend fun processRoom(roomToProcess: RoomToProcess, isInitialSync: Boolean): RoomState { + suspend fun processRoom(roomToProcess: RoomToProcess, isInitialSync: Boolean): RoomState? { val members = roomToProcess.apiSyncRoom.collectMembers(roomToProcess.userCredentials) roomMembersService.insert(roomToProcess.roomId, members) @@ -28,16 +28,17 @@ internal class RoomProcessor( previousState?.events ?: emptyList(), ) - val overview = createRoomOverview(distinctEvents, roomToProcess, previousState) - unreadEventsProcessor.processUnreadState(overview, previousState?.roomOverview, newEvents, roomToProcess.userCredentials.userId, isInitialSync) + return createRoomOverview(distinctEvents, roomToProcess, previousState)?.let { + unreadEventsProcessor.processUnreadState(it, previousState?.roomOverview, newEvents, roomToProcess.userCredentials.userId, isInitialSync) - return RoomState(overview, distinctEvents).also { - roomDataSource.persist(roomToProcess.roomId, previousState, it) - ephemeralEventsUseCase.processEvents(roomToProcess) + RoomState(it, distinctEvents).also { + roomDataSource.persist(roomToProcess.roomId, previousState, it) + ephemeralEventsUseCase.processEvents(roomToProcess) + } } } - private suspend fun createRoomOverview(distinctEvents: List, roomToProcess: RoomToProcess, previousState: RoomState?): RoomOverview { + private suspend fun createRoomOverview(distinctEvents: List, roomToProcess: RoomToProcess, previousState: RoomState?): RoomOverview? { val lastMessage = distinctEvents.sortedByDescending { it.utcTimestamp }.findLastMessage() return roomOverviewProcessor.process(roomToProcess, previousState?.roomOverview, lastMessage) } @@ -56,6 +57,7 @@ private fun ApiSyncRoom.collectMembers(userCredentials: UserCredentials): List null } }