Skip to content
Snippets Groups Projects
Commit 24494dfb authored by Taras's avatar Taras
Browse files

Improve filter on Photos page

parent f6dc4c5e
No related branches found
No related tags found
No related merge requests found
package org.futo.circles.core.utils
import org.futo.circles.core.model.GALLERY_TYPE
import org.futo.circles.core.model.GROUP_TYPE
import org.futo.circles.core.provider.MatrixSessionProvider
import org.matrix.android.sdk.api.session.room.model.Membership
......@@ -9,13 +10,21 @@ import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
const val roomType = "m.room"
const val spaceType = RoomType.SPACE
private fun getRoomsLiveDataWithType(
type: String,
membershipFilter: List<Membership> = Membership.activeMemberships()
) = MatrixSessionProvider.getSessionOrThrow().roomService()
.getRoomSummariesLive(roomSummaryQueryParams {
memberships = membershipFilter
includeType = listOf(type)
excludeType = listOf(roomType, spaceType)
})
fun getGroupsLiveData(membershipFilter: List<Membership> = Membership.activeMemberships()) =
MatrixSessionProvider.getSessionOrThrow().roomService()
.getRoomSummariesLive(roomSummaryQueryParams {
memberships = membershipFilter
includeType = listOf(GROUP_TYPE)
excludeType = listOf(roomType, spaceType)
})
getRoomsLiveDataWithType(GROUP_TYPE, membershipFilter)
fun getGalleriesLiveData(membershipFilter: List<Membership> = Membership.activeMemberships()) =
getRoomsLiveDataWithType(GALLERY_TYPE, membershipFilter)
......@@ -6,33 +6,27 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.withContext
import org.futo.circles.core.mapping.toJoinedGalleryListItem
import org.futo.circles.core.model.GALLERY_TYPE
import org.futo.circles.core.model.GalleryInvitesNotificationListItem
import org.futo.circles.core.model.GalleryListItem
import org.futo.circles.core.provider.MatrixSessionProvider
import org.futo.circles.core.utils.getGalleriesLiveData
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.RoomType
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
import javax.inject.Inject
class PhotosDataSource @Inject constructor() {
fun getGalleriesFlow() = combine(
MatrixSessionProvider.getSessionOrThrow().roomService()
.getRoomSummariesLive(roomSummaryQueryParams { excludeType = listOf(RoomType.SPACE) })
.asFlow(),
getGalleriesLiveData().asFlow(),
MatrixSessionProvider.getSessionOrThrow().roomService().getChangeMembershipsLive().asFlow()
) { roomSummaries, _ ->
withContext(Dispatchers.IO) { buildList(roomSummaries) }
}.distinctUntilChanged()
private fun buildList(list: List<RoomSummary>): List<GalleryListItem> {
val galleries = list.filter { it.roomType == GALLERY_TYPE }
val joined = galleries.mapNotNull { it.takeIf { it.membership == Membership.JOIN } }
val invitesCount =
galleries.mapNotNull { it.takeIf { it.membership == Membership.INVITE } }.size
private fun buildList(galleries: List<RoomSummary>): List<GalleryListItem> {
val joined = galleries.filter { it.membership == Membership.JOIN }
val invitesCount = galleries.filter { it.membership == Membership.INVITE }.size
return mutableListOf<GalleryListItem>().apply {
if (invitesCount > 0)
add(GalleryInvitesNotificationListItem(invitesCount))
......
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