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 89af025d6e0a3f210d2e74d6a2f8530bb5d46b84..5914db03956e625b7a6b33d01a7bfe69dcdbdd59 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 eb044e1bda325fbad5ee1706324f17996e731799..1f5f9386510aae033c642b17b9dc332e76c0544c 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))