From 0552bbb5028cea28e672400b28927b1c326b77e2 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Fri, 22 Dec 2023 14:53:17 +0200
Subject: [PATCH] Remove invites from group data source

---
 .../feature/groups/GroupsDataSource.kt        | 44 +++++++++++--------
 1 file changed, 25 insertions(+), 19 deletions(-)

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 3bad78275..9c2fd1fa5 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
@@ -1,36 +1,42 @@
 package org.futo.circles.feature.groups
 
-import org.futo.circles.core.feature.room.RoomListHelper
+import androidx.lifecycle.asFlow
+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.mapping.toInviteGroupListItem
+import org.futo.circles.core.provider.MatrixSessionProvider
 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(
-    private val roomListHelper: RoomListHelper
-) {
-    fun getGroupsFlow() = roomListHelper.getRoomsFlow(::filterGroups)
+class GroupsDataSource @Inject constructor() {
+    fun getGroupsFlow() = combine(
+        MatrixSessionProvider.getSessionOrThrow().roomService()
+            .getRoomSummariesLive(roomSummaryQueryParams { excludeType = listOf(RoomType.SPACE) })
+            .asFlow(),
+        MatrixSessionProvider.getSessionOrThrow().roomService().getChangeMembershipsLive().asFlow()
+    ) { roomSummaries, _ ->
+        withContext(Dispatchers.IO) { buildList(roomSummaries) }
+    }.distinctUntilChanged()
 
-    private fun filterGroups(
-        list: List<RoomSummary>,
-        knownUsersIds: Set<String>,
-        roomIdsToUnblur: Set<String>
-    ): List<GroupListItem> {
+
+    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 invites = groups.mapNotNull { it.takeIf { it.membership == Membership.INVITE } }
+        val invitesCount =
+            groups.mapNotNull { it.takeIf { it.membership == Membership.INVITE } }.size
         return mutableListOf<GroupListItem>().apply {
-            addAll(invites.map {
-                it.toInviteGroupListItem(
-                    roomListHelper.shouldBlurIconFor(it, knownUsersIds, roomIdsToUnblur)
-                )
-            })
+            if (invitesCount > 0)
+                add(GroupInvitesNotificationListItem(invitesCount))
+
             addAll(joinedGroups.map { it.toJoinedGroupListItem() })
         }
     }
-
-    fun unblurProfileImageFor(id: String) = roomListHelper.unblurProfileImageFor(id)
 }
\ No newline at end of file
-- 
GitLab