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