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