From f6dc4c5e5ebe58d4a7273a5db8760251670d057d Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Fri, 12 Jan 2024 13:23:52 +0200
Subject: [PATCH] Improve filter on Groups page

---
 .../feature/groups/GroupsDataSource.kt        | 19 +++++++----------
 .../futo/circles/core/utils/MatrixUtils.kt    | 21 +++++++++++++++++++
 2 files changed, 28 insertions(+), 12 deletions(-)
 create mode 100644 core/src/main/java/org/futo/circles/core/utils/MatrixUtils.kt

diff --git a/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt b/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt
index 9c2fd1fa5..d5aad31f2 100644
--- a/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt
@@ -5,33 +5,28 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.distinctUntilChanged
 import kotlinx.coroutines.withContext
-import org.futo.circles.core.model.GROUP_TYPE
 import org.futo.circles.core.provider.MatrixSessionProvider
+import org.futo.circles.core.utils.getGroupsLiveData
 import org.futo.circles.mapping.toJoinedGroupListItem
 import org.futo.circles.model.GroupInvitesNotificationListItem
 import org.futo.circles.model.GroupListItem
 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 GroupsDataSource @Inject constructor() {
     fun getGroupsFlow() = combine(
-        MatrixSessionProvider.getSessionOrThrow().roomService()
-            .getRoomSummariesLive(roomSummaryQueryParams { excludeType = listOf(RoomType.SPACE) })
-            .asFlow(),
-        MatrixSessionProvider.getSessionOrThrow().roomService().getChangeMembershipsLive().asFlow()
+        getGroupsLiveData().asFlow(),
+        MatrixSessionProvider.getSessionOrThrow().roomService().getChangeMembershipsLive()
+            .asFlow() //for knocks count
     ) { roomSummaries, _ ->
         withContext(Dispatchers.IO) { buildList(roomSummaries) }
     }.distinctUntilChanged()
 
 
-    private fun buildList(list: List<RoomSummary>): List<GroupListItem> {
-        val groups = list.filter { it.roomType == GROUP_TYPE }
-        val joinedGroups = groups.mapNotNull { it.takeIf { it.membership == Membership.JOIN } }
-        val invitesCount =
-            groups.mapNotNull { it.takeIf { it.membership == Membership.INVITE } }.size
+    private fun buildList(groups: List<RoomSummary>): List<GroupListItem> {
+        val joinedGroups = groups.filter { it.membership == Membership.JOIN }
+        val invitesCount = groups.filter { it.membership == Membership.INVITE }.size
         return mutableListOf<GroupListItem>().apply {
             if (invitesCount > 0)
                 add(GroupInvitesNotificationListItem(invitesCount))
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
new file mode 100644
index 000000000..89af025d6
--- /dev/null
+++ b/core/src/main/java/org/futo/circles/core/utils/MatrixUtils.kt
@@ -0,0 +1,21 @@
+package org.futo.circles.core.utils
+
+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
+import org.matrix.android.sdk.api.session.room.model.RoomType
+import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
+
+const val roomType = "m.room"
+const val spaceType = RoomType.SPACE
+
+fun getGroupsLiveData(membershipFilter: List<Membership> = Membership.activeMemberships()) =
+    MatrixSessionProvider.getSessionOrThrow().roomService()
+        .getRoomSummariesLive(roomSummaryQueryParams {
+            memberships = membershipFilter
+            includeType = listOf(GROUP_TYPE)
+            excludeType = listOf(roomType, spaceType)
+        })
+
+
+
-- 
GitLab