Skip to content
Snippets Groups Projects
Commit 5c9e7770 authored by Taras's avatar Taras
Browse files

improve filter for select rooms

parent 172acc86
No related branches found
No related tags found
No related merge requests found
...@@ -9,19 +9,17 @@ import kotlinx.coroutines.flow.Flow ...@@ -9,19 +9,17 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.flowOn
import org.futo.circles.core.extensions.getOrThrow import org.futo.circles.core.extensions.getOrThrow
import org.futo.circles.core.mapping.toSelectableRoomListItem import org.futo.circles.core.mapping.toSelectableRoomListItem
import org.futo.circles.core.model.CircleRoomTypeArg import org.futo.circles.core.model.CircleRoomTypeArg
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.model.SelectableRoomListItem
import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.core.utils.getGalleriesLiveData
import org.futo.circles.core.utils.getGroupsLiveData
import org.futo.circles.core.utils.getSpacesLiveData
import org.futo.circles.feature.circles.CirclesDataSource 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.Membership
import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.model.RoomSummary
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
import javax.inject.Inject import javax.inject.Inject
@ViewModelScoped @ViewModelScoped
...@@ -35,8 +33,6 @@ class SelectRoomsDataSource @Inject constructor( ...@@ -35,8 +33,6 @@ class SelectRoomsDataSource @Inject constructor(
CircleRoomTypeArg.entries.firstOrNull { it.ordinal == ordinal } CircleRoomTypeArg.entries.firstOrNull { it.ordinal == ordinal }
?: CircleRoomTypeArg.Circle ?: CircleRoomTypeArg.Circle
private val session by lazy { MatrixSessionProvider.currentSession }
private val selectedRoomsFlow = MutableStateFlow<List<SelectableRoomListItem>>(emptyList()) private val selectedRoomsFlow = MutableStateFlow<List<SelectableRoomListItem>>(emptyList())
val roomsFlow = getMergedRoomsListFlow() val roomsFlow = getMergedRoomsListFlow()
...@@ -48,11 +44,16 @@ class SelectRoomsDataSource @Inject constructor( ...@@ -48,11 +44,16 @@ class SelectRoomsDataSource @Inject constructor(
private fun getRoomsFlowWithType(): Flow<List<RoomSummary>> = when (roomType) { private fun getRoomsFlowWithType(): Flow<List<RoomSummary>> = when (roomType) {
CircleRoomTypeArg.Circle -> { CircleRoomTypeArg.Circle -> {
val joinedCirclesIds = circleDataSource.getJoinedCirclesIds() val joinedCirclesIds = circleDataSource.getJoinedCirclesIds()
getFilteredRoomsFlow { circleDataSource.isJoinedCircle(it, joinedCirclesIds) } getSpacesLiveData(listOf(Membership.JOIN)).map { summaries ->
summaries.mapNotNull { summary ->
if (joinedCirclesIds.contains(summary.roomId)) summary
else null
}
}.asFlow()
} }
CircleRoomTypeArg.Group -> getFilteredRoomsFlow { (it.roomType == GROUP_TYPE && it.membership == Membership.JOIN) } CircleRoomTypeArg.Group -> getGroupsLiveData(listOf(Membership.JOIN)).asFlow()
CircleRoomTypeArg.Photo -> getFilteredRoomsFlow { (it.roomType == GALLERY_TYPE && it.membership == Membership.JOIN) } CircleRoomTypeArg.Photo -> getGalleriesLiveData(listOf(Membership.JOIN)).asFlow()
} }
fun getSelectedRooms() = selectedRoomsFlow.value.filter { it.isSelected } fun getSelectedRooms() = selectedRoomsFlow.value.filter { it.isSelected }
...@@ -64,13 +65,6 @@ class SelectRoomsDataSource @Inject constructor( ...@@ -64,13 +65,6 @@ class SelectRoomsDataSource @Inject constructor(
selectedRoomsFlow.value = list selectedRoomsFlow.value = list
} }
private fun getFilteredRoomsFlow(filter: (summary: RoomSummary) -> Boolean) =
session?.roomService()?.getRoomSummariesLive(roomSummaryQueryParams {
excludeType = null
})?.map { summaries ->
summaries.mapNotNull { summary -> if (filter(summary)) summary else null }
}?.asFlow() ?: emptyFlow()
private fun List<SelectableRoomListItem>.containsWithId(id: String) = private fun List<SelectableRoomListItem>.containsWithId(id: String) =
firstOrNull { it.id == id } != null firstOrNull { it.id == id } != null
} }
\ No newline at end of file
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