From e8ab2b69425c878d9a580d5cb45c8d60c4a1b95f Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Fri, 12 Jan 2024 17:43:55 +0200
Subject: [PATCH] Improve invites filter

---
 .../extensions/MatrixSessionExtensions.kt     |  4 ++--
 .../feature/room/invites/InvitesDataSource.kt | 23 +++++++------------
 .../futo/circles/core/utils/MatrixUtils.kt    | 12 +++++-----
 3 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt b/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt
index c6758083f..6f57401d6 100644
--- a/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt
+++ b/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt
@@ -6,7 +6,7 @@ import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.SupervisorJob
 import kotlinx.coroutines.flow.mapLatest
-import org.futo.circles.core.utils.getAllJoinedCirclesRoomsLiveData
+import org.futo.circles.core.utils.getAllCirclesRoomsLiveData
 import org.matrix.android.sdk.api.session.Session
 import org.matrix.android.sdk.api.session.content.ContentUrlResolver
 import org.matrix.android.sdk.api.session.getRoom
@@ -52,7 +52,7 @@ fun Session.getServerDomain() = myUserId.substringAfter(":")
 
 
 fun Session.getKnownUsersFlow() =
-    getAllJoinedCirclesRoomsLiveData().asFlow().mapLatest { roomSummaries ->
+    getAllCirclesRoomsLiveData(listOf(Membership.JOIN)).asFlow().mapLatest { roomSummaries ->
         val knowUsers = mutableSetOf<User>()
         roomSummaries.forEach { summary ->
             val joinedMembersIds = getRoom(summary.roomId)?.membershipService()
diff --git a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt
index bfb75278c..0f03f224f 100644
--- a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt
+++ b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt
@@ -28,6 +28,8 @@ import org.futo.circles.core.model.convertToCircleRoomType
 import org.futo.circles.core.model.toCircleUser
 import org.futo.circles.core.model.toRoomInviteListItem
 import org.futo.circles.core.provider.MatrixSessionProvider
+import org.futo.circles.core.utils.getAllCirclesRoomsLiveData
+import org.futo.circles.core.utils.getSpacesLiveData
 import org.matrix.android.sdk.api.session.getRoom
 import org.matrix.android.sdk.api.session.getUserOrDefault
 import org.matrix.android.sdk.api.session.room.model.Membership
@@ -72,28 +74,19 @@ class InvitesDataSource @Inject constructor(
         }?.asFlow() ?: flowOf()
 
     private fun getProfileSpaceInvitesFlow(): Flow<List<ConnectionInviteListItem>> =
-        session?.roomService()?.getRoomSummariesLive(
-            roomSummaryQueryParams {
-                excludeType = null
-                memberships = listOf(Membership.INVITE)
-            })?.map {
-            it.filter { it.roomType == RoomType.SPACE }.map {
+        getSpacesLiveData(listOf(Membership.INVITE)).map {
+            it.filter { it.roomType == RoomType.SPACE }.map { summary ->
                 ConnectionInviteListItem(
-                    it.roomId,
-                    session.getUserOrDefault(it.inviterId ?: "").toCirclesUserSummary()
+                    summary.roomId,
+                    session.getUserOrDefault(summary.inviterId ?: "").toCirclesUserSummary()
                 )
             }
-        }?.asFlow() ?: flowOf()
+        }.asFlow()
 
     private fun getRoomInvitesFlow(
         inviteType: InviteTypeArg
     ): Flow<List<RoomInviteListItem>> = combine(
-        MatrixSessionProvider.getSessionOrThrow().roomService()
-            .getRoomSummariesLive(roomSummaryQueryParams {
-                excludeType = listOf(RoomType.SPACE)
-                memberships = listOf(Membership.INVITE)
-            })
-            .asFlow(),
+        getAllCirclesRoomsLiveData(listOf(Membership.INVITE)).asFlow(),
         MatrixSessionProvider.getSessionOrThrow().getKnownUsersFlow(),
         roomIdsToUnblurProfile
     ) { roomSummaries, knownUsers, roomIdsToUnblur ->
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 650d59134..ed01a8875 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,6 +1,5 @@
 package org.futo.circles.core.utils
 
-import androidx.lifecycle.asFlow
 import org.futo.circles.core.model.GALLERY_TYPE
 import org.futo.circles.core.model.GROUP_TYPE
 import org.futo.circles.core.model.TIMELINE_TYPE
@@ -70,10 +69,11 @@ fun getAllJoinedCirclesRoomsAndSpacesLiveData(session: Session = MatrixSessionPr
         memberships = listOf(Membership.JOIN)
     })
 
-fun getAllJoinedCirclesRoomsLiveData() = MatrixSessionProvider.getSessionOrThrow().roomService()
-    .getRoomSummariesLive(roomSummaryQueryParams {
-        excludeType = listOf(roomType, spaceType, null)
-        memberships = listOf(Membership.JOIN)
-    })
+fun getAllCirclesRoomsLiveData(membershipFilter: List<Membership> = Membership.activeMemberships()) =
+    MatrixSessionProvider.getSessionOrThrow().roomService()
+        .getRoomSummariesLive(roomSummaryQueryParams {
+            excludeType = listOf(roomType, spaceType, null)
+            memberships = membershipFilter
+        })
 
 
-- 
GitLab