Skip to content
Snippets Groups Projects
Commit 7ae9d65d authored by Taras's avatar Taras
Browse files

Improve isJoinedCircle check

parent 11c86a8b
No related branches found
No related tags found
No related merge requests found
......@@ -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) =
......
......@@ -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) }
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment