Skip to content
Snippets Groups Projects
Commit 0552bbb5 authored by Taras's avatar Taras
Browse files

Remove invites from group data source

parent bc0eee5c
No related branches found
No related tags found
No related merge requests found
package org.futo.circles.feature.groups 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.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.mapping.toJoinedGroupListItem
import org.futo.circles.model.GroupInvitesNotificationListItem
import org.futo.circles.model.GroupListItem 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.Membership
import org.matrix.android.sdk.api.session.room.model.RoomSummary 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 import javax.inject.Inject
class GroupsDataSource @Inject constructor( class GroupsDataSource @Inject constructor() {
private val roomListHelper: RoomListHelper fun getGroupsFlow() = combine(
) { MatrixSessionProvider.getSessionOrThrow().roomService()
fun getGroupsFlow() = roomListHelper.getRoomsFlow(::filterGroups) .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>, private fun buildList(list: List<RoomSummary>): List<GroupListItem> {
knownUsersIds: Set<String>,
roomIdsToUnblur: Set<String>
): List<GroupListItem> {
val groups = list.filter { it.roomType == GROUP_TYPE } val groups = list.filter { it.roomType == GROUP_TYPE }
val joinedGroups = groups.mapNotNull { it.takeIf { it.membership == Membership.JOIN } } 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 { return mutableListOf<GroupListItem>().apply {
addAll(invites.map { if (invitesCount > 0)
it.toInviteGroupListItem( add(GroupInvitesNotificationListItem(invitesCount))
roomListHelper.shouldBlurIconFor(it, knownUsersIds, roomIdsToUnblur)
)
})
addAll(joinedGroups.map { it.toJoinedGroupListItem() }) addAll(joinedGroups.map { it.toJoinedGroupListItem() })
} }
} }
fun unblurProfileImageFor(id: String) = roomListHelper.unblurProfileImageFor(id)
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment