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 c563754a068a311f3ecd035c53e81ee166d6c58c..2f5555fbc4b2d76510c73c11973d4d21aaa22e57 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 @@ -42,7 +42,10 @@ class CirclesDataSource @Inject constructor( private fun buildCirclesList(list: List<RoomSummary>): List<CircleListItem> { val invites = list.filter { isInviteToCircleTimeline(it) }.map { it.toInviteCircleListItem() } - val joinedCircles = list.filter { isJoinedCircle(it) } + + val joinedCirclesSpaceIds = getJoinedCirclesIds() + val joinedCircles = list.filter { isJoinedCircle(it, joinedCirclesSpaceIds) } + val sharedCircles = joinedCircles.filter { joinedCircle -> sharedCircleDataSource.isCircleShared(joinedCircle.roomId) @@ -63,13 +66,18 @@ class CirclesDataSource @Inject constructor( return displayList } - fun isJoinedCircle(summary: RoomSummary): Boolean { - if (summary.roomId == sharedCircleDataSource.getSharedCirclesSpaceId()) return false + fun isJoinedCircle(summary: RoomSummary, joinedCirclesIds: List<String>): Boolean = + joinedCirclesIds.contains(summary.roomId) + + fun getJoinedCirclesIds(): List<String> { val circlesSpaceId = spacesTreeAccountDataSource.getRoomIdByKey( CIRCLES_SPACE_ACCOUNT_DATA_KEY - ) ?: return false - return getJoinedRoomById(circlesSpaceId)?.roomSummary()?.spaceChildren?.map { it.childRoomId } - ?.contains(summary.roomId) == true + ) ?: return emptyList() + val sharedCircleSpaceId = sharedCircleDataSource.getSharedCirclesSpaceId() + val ids = getJoinedRoomById(circlesSpaceId)?.roomSummary()?.spaceChildren + ?.map { it.childRoomId } + ?.filter { it != sharedCircleSpaceId } + return ids ?: emptyList() } private fun isInviteToCircleTimeline(summary: RoomSummary) = diff --git a/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt b/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt index 8b625ae69546a8056bef67f5e56cf241814c892b..c6d1c96e2f0c4d0b80d0a117bb425b8bdcbb7a1e 100644 --- a/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt +++ b/app/src/main/java/org/futo/circles/feature/room/select/SelectRoomsDataSource.kt @@ -18,7 +18,6 @@ import org.futo.circles.core.model.GALLERY_TYPE import org.futo.circles.core.model.GROUP_TYPE import org.futo.circles.core.model.SelectableRoomListItem import org.futo.circles.core.provider.MatrixSessionProvider -import org.futo.circles.core.workspace.SharedCircleDataSource import org.futo.circles.feature.circles.CirclesDataSource import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomSummary @@ -31,7 +30,7 @@ class SelectRoomsDataSource @Inject constructor( private val circleDataSource: CirclesDataSource ) { - val ordinal = savedStateHandle.getOrThrow<Int>(SelectRoomsFragment.TYPE_ORDINAL) + private val ordinal = savedStateHandle.getOrThrow<Int>(SelectRoomsFragment.TYPE_ORDINAL) private val roomType: CircleRoomTypeArg = CircleRoomTypeArg.values().firstOrNull { it.ordinal == ordinal } ?: CircleRoomTypeArg.Circle @@ -47,7 +46,11 @@ class SelectRoomsDataSource @Inject constructor( }.flowOn(Dispatchers.IO).distinctUntilChanged() private fun getRoomsFlowWithType(): Flow<List<RoomSummary>> = when (roomType) { - CircleRoomTypeArg.Circle -> getFilteredRoomsFlow { circleDataSource.isJoinedCircle(it) } + CircleRoomTypeArg.Circle -> { + val joinedCirclesIds = circleDataSource.getJoinedCirclesIds() + getFilteredRoomsFlow { circleDataSource.isJoinedCircle(it, joinedCirclesIds) } + } + CircleRoomTypeArg.Group -> getFilteredRoomsFlow { (it.roomType == GROUP_TYPE && it.membership == Membership.JOIN) } CircleRoomTypeArg.Photo -> getFilteredRoomsFlow { (it.roomType == GALLERY_TYPE && it.membership == Membership.JOIN) } }