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

Create shared circles data source

parent 6db18234
No related branches found
No related tags found
No related merge requests found
package org.futo.circles.core.workspace
import org.futo.circles.core.extensions.getRoomOwners
import org.futo.circles.core.model.PROFILE_SPACE_ACCOUNT_DATA_KEY
import org.futo.circles.core.provider.MatrixSessionProvider
import org.futo.circles.core.room.RoomRelationsBuilder
import org.futo.circles.core.utils.getTimelineRoomFor
import org.matrix.android.sdk.api.session.getRoomSummary
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
import javax.inject.Inject
class SharedCircleDataSource @Inject constructor(
private val spacesTreeAccountDataSource: SpacesTreeAccountDataSource,
private val roomRelationsBuilder: RoomRelationsBuilder
) {
fun getSharedCirclesSpaceId() =
spacesTreeAccountDataSource.getRoomIdByKey(PROFILE_SPACE_ACCOUNT_DATA_KEY)
suspend fun addToSharedCircles(timelineId: String) {
getSharedCirclesSpaceId()?.let { roomRelationsBuilder.setRelations(timelineId, it) }
}
suspend fun removeFromSharedCircles(timelineId: String) {
getSharedCirclesSpaceId()?.let { roomRelationsBuilder.removeRelations(timelineId, it) }
}
fun getSharedCircleFor(userId: String) = MatrixSessionProvider.currentSession?.roomService()
?.getRoomSummaries(roomSummaryQueryParams { excludeType = null })?.firstOrNull { summary ->
summary.roomType == RoomType.SPACE && summary.membership == Membership.JOIN &&
getRoomOwners(summary.roomId).map { it.userId }.contains(userId)
}
fun isCircleShared(circleId: String): Boolean {
val timelineId = getTimelineRoomFor(circleId)?.roomId
val sharedCirclesTimelinesIds = getSharedCirclesSpaceId()?.let {
MatrixSessionProvider.currentSession?.getRoomSummary(it)?.spaceChildren?.map { it.childRoomId }
} ?: emptyList()
return sharedCirclesTimelinesIds.contains(timelineId)
}
}
\ 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