From 24494dfbbed7931f6b70a637a8f14a4d2c0acc36 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Fri, 12 Jan 2024 14:13:07 +0200 Subject: [PATCH] Improve filter on Photos page --- .../futo/circles/core/utils/MatrixUtils.kt | 21 +++++++++++++------ .../gallery/feature/PhotosDataSource.kt | 16 +++++--------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/futo/circles/core/utils/MatrixUtils.kt b/core/src/main/java/org/futo/circles/core/utils/MatrixUtils.kt index 89af025d6..5914db039 100644 --- a/core/src/main/java/org/futo/circles/core/utils/MatrixUtils.kt +++ b/core/src/main/java/org/futo/circles/core/utils/MatrixUtils.kt @@ -1,5 +1,6 @@ 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) diff --git a/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt b/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt index eb044e1bd..1f5f93865 100644 --- a/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt +++ b/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt @@ -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)) -- GitLab