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