From 705c32d121e5515e21ffe1a03f4fe5e15ac2667d Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Fri, 22 Dec 2023 15:03:43 +0200 Subject: [PATCH] Remove invites from circle data source --- .../feature/circles/CirclesDataSource.kt | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt b/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt index 36a4ff2d4..f59a347c0 100644 --- a/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt +++ b/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt @@ -1,37 +1,41 @@ package org.futo.circles.feature.circles -import org.futo.circles.core.feature.room.RoomListHelper +import androidx.lifecycle.asFlow +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.withContext import org.futo.circles.core.feature.workspace.SharedCircleDataSource import org.futo.circles.core.feature.workspace.SpacesTreeAccountDataSource import org.futo.circles.core.model.CIRCLES_SPACE_ACCOUNT_DATA_KEY import org.futo.circles.core.model.TIMELINE_TYPE +import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.core.utils.getJoinedRoomById -import org.futo.circles.mapping.toInviteCircleListItem import org.futo.circles.mapping.toJoinedCircleListItem +import org.futo.circles.model.CircleInvitesNotificationListItem import org.futo.circles.model.CircleListItem import org.futo.circles.model.CirclesHeaderItem import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomSummary +import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import javax.inject.Inject class CirclesDataSource @Inject constructor( private val spacesTreeAccountDataSource: SpacesTreeAccountDataSource, - private val sharedCircleDataSource: SharedCircleDataSource, - private val roomListHelper: RoomListHelper + private val sharedCircleDataSource: SharedCircleDataSource ) { - fun getCirclesFlow() = roomListHelper.getRoomsFlow(::buildCirclesList, null) + fun getCirclesFlow() = combine( + MatrixSessionProvider.getSessionOrThrow().roomService() + .getRoomSummariesLive(roomSummaryQueryParams { excludeType = null }) + .asFlow(), + MatrixSessionProvider.getSessionOrThrow().roomService().getChangeMembershipsLive().asFlow() + ) { roomSummaries, _ -> + withContext(Dispatchers.IO) { buildCirclesList(roomSummaries) } + }.distinctUntilChanged() - private fun buildCirclesList( - list: List<RoomSummary>, - knownUsersIds: Set<String>, - roomIdsToUnblur: Set<String> - ): List<CircleListItem> { - val invites = list.filter { isInviteToCircleTimeline(it) }.map { - it.toInviteCircleListItem( - roomListHelper.shouldBlurIconFor(it, knownUsersIds, roomIdsToUnblur) - ) - } + private fun buildCirclesList(list: List<RoomSummary>): List<CircleListItem> { + val invitesCount = list.filter { isInviteToCircleTimeline(it) }.size val joinedCirclesSpaceIds = getJoinedCirclesIds() val joinedCircles = list.filter { isJoinedCircle(it, joinedCirclesSpaceIds) } @@ -46,7 +50,9 @@ class CirclesDataSource @Inject constructor( val privateCircles = joinedCircles - sharedCircles.toSet() val displayList = mutableListOf<CircleListItem>().apply { - addSection(CirclesHeaderItem.invitesCirclesHeader, invites) + if (invitesCount > 0) + add(CircleInvitesNotificationListItem(invitesCount)) + addSection( CirclesHeaderItem.sharedCirclesHeader, sharedCircles.map { it.toJoinedCircleListItem(true) }) @@ -82,7 +88,4 @@ class CirclesDataSource @Inject constructor( addAll(items) } } - - fun unblurProfileImageFor(id: String) = roomListHelper.unblurProfileImageFor(id) - } \ No newline at end of file -- GitLab