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

Remove invites from photos data source

parent 0552bbb5
No related branches found
No related tags found
No related merge requests found
...@@ -2,29 +2,22 @@ package org.futo.circles.model ...@@ -2,29 +2,22 @@ package org.futo.circles.model
import org.futo.circles.core.base.list.IdEntity import org.futo.circles.core.base.list.IdEntity
import org.futo.circles.core.model.RoomInfo import org.futo.circles.core.model.RoomInfo
import org.matrix.android.sdk.api.session.room.model.Membership
sealed class GroupListItem( sealed class GroupListItem(
override val id: String, override val id: String
open val info: RoomInfo,
open val membership: Membership
) : IdEntity<String> ) : IdEntity<String>
data class JoinedGroupListItem( data class JoinedGroupListItem(
override val id: String, override val id: String,
override val info: RoomInfo, val info: RoomInfo,
val topic: String, val topic: String,
val membersCount: Int, val membersCount: Int,
val knockRequestsCount: Int, val knockRequestsCount: Int,
val isEncrypted: Boolean, val isEncrypted: Boolean,
val timestamp: Long, val timestamp: Long,
val unreadCount: Int val unreadCount: Int
) : GroupListItem(id, info, Membership.JOIN) ) : GroupListItem(id)
data class InvitedGroupListItem( data class GroupInvitesNotificationListItem(
override val id: String, val invitesCount: Int
override val info: RoomInfo, ) : GroupListItem("GroupInvitesNotificationListItem")
val isEncrypted: Boolean, \ No newline at end of file
val inviterName: String,
val shouldBlurIcon: Boolean
) : GroupListItem(id, info, Membership.INVITE)
\ No newline at end of file
package org.futo.circles.core.model package org.futo.circles.core.model
import org.futo.circles.core.base.list.IdEntity import org.futo.circles.core.base.list.IdEntity
import org.matrix.android.sdk.api.session.room.model.Membership
sealed class GalleryListItem( sealed class GalleryListItem(
override val id: String, override val id: String
open val info: RoomInfo,
open val membership: Membership
) : IdEntity<String> ) : IdEntity<String>
data class JoinedGalleryListItem( data class JoinedGalleryListItem(
override val id: String, override val id: String,
override val info: RoomInfo val info: RoomInfo
) : GalleryListItem(id, info, Membership.JOIN) ) : GalleryListItem(id)
data class InvitedGalleryListItem( data class GalleryInvitesNotificationListItem(
override val id: String, val invitesCount: Int
override val info: RoomInfo, ) : GalleryListItem("GroupInvitesNotificationListItem")
val inviterName: String, \ No newline at end of file
val shouldBlurIcon: Boolean
) : GalleryListItem(id, info, Membership.INVITE)
\ No newline at end of file
package org.futo.circles.gallery.feature package org.futo.circles.gallery.feature
import org.futo.circles.core.feature.room.RoomListHelper import androidx.lifecycle.asFlow
import org.futo.circles.core.mapping.toInvitedGalleryListItem import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.withContext
import org.futo.circles.core.mapping.toJoinedGalleryListItem import org.futo.circles.core.mapping.toJoinedGalleryListItem
import org.futo.circles.core.model.GALLERY_TYPE import org.futo.circles.core.model.GALLERY_TYPE
import org.futo.circles.core.model.GalleryInvitesNotificationListItem
import org.futo.circles.core.model.GalleryListItem import org.futo.circles.core.model.GalleryListItem
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.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 PhotosDataSource @Inject constructor( class PhotosDataSource @Inject constructor() {
private val roomListHelper: RoomListHelper
) {
fun getGalleriesFlow() = roomListHelper.getRoomsFlow(::filterGalleries) fun getGalleriesFlow() = 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 filterGalleries(
list: List<RoomSummary>, private fun buildList(list: List<RoomSummary>): List<GalleryListItem> {
knownUsersIds: Set<String>,
roomIdsToUnblur: Set<String>
): List<GalleryListItem> {
val galleries = list.filter { it.roomType == GALLERY_TYPE } val galleries = list.filter { it.roomType == GALLERY_TYPE }
val joined = galleries.mapNotNull { it.takeIf { it.membership == Membership.JOIN } } val joined = galleries.mapNotNull { it.takeIf { it.membership == Membership.JOIN } }
val invites = galleries.mapNotNull { it.takeIf { it.membership == Membership.INVITE } } val invitesCount =
galleries.mapNotNull { it.takeIf { it.membership == Membership.INVITE } }.size
return mutableListOf<GalleryListItem>().apply { return mutableListOf<GalleryListItem>().apply {
addAll(invites.map { if (invitesCount > 0)
it.toInvitedGalleryListItem( add(GalleryInvitesNotificationListItem(invitesCount))
roomListHelper.shouldBlurIconFor(it, knownUsersIds, roomIdsToUnblur)
)
})
addAll(joined.map { it.toJoinedGalleryListItem() }) addAll(joined.map { it.toJoinedGalleryListItem() })
} }
} }
private fun shouldBlurIconFor(
roomId: String,
inviterId: String?,
knownUserIds: Set<String>,
roomIdsToUnblur: Set<String>
): Boolean {
val isKnownUser = knownUserIds.contains(inviterId)
val isRoomUnbluredByUser = roomIdsToUnblur.contains(roomId)
return !isKnownUser && !isRoomUnbluredByUser
}
fun unblurProfileImageFor(id: String) = roomListHelper.unblurProfileImageFor(id)
} }
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