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

Create CircleFilterAccountDataManager

parent 26887f20
No related branches found
No related tags found
No related merge requests found
......@@ -7,8 +7,8 @@ import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import org.futo.circles.core.base.SingleEventLiveData
import org.futo.circles.core.extensions.Response
import org.futo.circles.core.extensions.getOrThrow
import org.futo.circles.core.extensions.launchBg
import org.futo.circles.core.feature.circles.filter.CircleFilterAccountDataManager
import org.futo.circles.core.feature.room.RoomNotificationsDataSource
import org.futo.circles.core.feature.room.knoks.KnockRequestsDataSource
import org.futo.circles.core.feature.timeline.BaseTimelineViewModel
......@@ -39,11 +39,13 @@ class TimelineViewModel @Inject constructor(
private val sendMessageDataSource: SendMessageDataSource,
private val postOptionsDataSource: PostOptionsDataSource,
private val userOptionsDataSource: UserOptionsDataSource,
private val readMessageDataSource: ReadMessageDataSource
) : BaseTimelineViewModel(timelineDataSourceFactory.create(savedStateHandle.get<String>("timelineId") != null)) {
private val roomId: String = savedStateHandle.getOrThrow("roomId")
private val timelineId: String? = savedStateHandle["timelineId"]
private val readMessageDataSource: ReadMessageDataSource,
circleFilterAccountDataManager: CircleFilterAccountDataManager
) : BaseTimelineViewModel(
savedStateHandle,
timelineDataSourceFactory.create(savedStateHandle.get<String>("timelineId") != null),
circleFilterAccountDataManager
) {
val session = MatrixSessionProvider.currentSession
val profileLiveData = session?.userService()?.getUserLive(session.myUserId)
......
package org.futo.circles.core.feature.circles.filter
import org.futo.circles.core.extensions.createResult
import org.futo.circles.core.provider.MatrixSessionProvider
import org.matrix.android.sdk.api.session.getRoom
import org.matrix.android.sdk.api.util.JsonDict
import javax.inject.Inject
class CircleFilterAccountDataManager @Inject constructor() {
private val session = MatrixSessionProvider.getSessionOrThrow()
fun getCircleFilterLive(circleId: String) = session.getRoom(circleId)?.roomAccountDataService()
?.getLiveAccountDataEvent(CIRCLE_FILTER_EVENT_TYPE)
fun getCircleFilter(circleId: String): Set<String> {
val content = session.getRoom(circleId)?.roomAccountDataService()
?.getAccountDataEvent(CIRCLE_FILTER_EVENT_TYPE)?.content ?: return getAllTimelinesIds(
circleId
)
return getEventContentAsSet(content, circleId)
}
fun getEventContentAsSet(content: JsonDict?, circleId: String): Set<String> {
content ?: return getAllTimelinesIds(circleId)
return (content[TIMELINES_KEY] as? List<*>)?.map { it.toString() }?.toSet()
?: getAllTimelinesIds(circleId)
}
fun getAllTimelinesIds(circleId: String): Set<String> {
val children = session.getRoom(circleId)?.roomSummary()?.spaceChildren ?: emptyList()
return children.mapNotNull {
val timelineSummary =
session.getRoom(it.childRoomId)?.roomSummary()?.takeIf { summary ->
summary.membership.isActive()
}
timelineSummary?.roomId
}.toSet()
}
suspend fun updateFilter(circleId: String, timelineIds: Set<String>) = createResult {
session.getRoom(circleId)?.roomAccountDataService()
?.updateAccountData(
CIRCLE_FILTER_EVENT_TYPE,
mapOf(TIMELINES_KEY to timelineIds)
)
}
companion object {
private const val CIRCLE_FILTER_EVENT_TYPE = "m.circle.filter"
private const val TIMELINES_KEY = "timelines"
}
}
\ No newline at end of file
package org.futo.circles.core.feature.picker.gallery.media
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.asFlow
import androidx.lifecycle.asLiveData
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import org.futo.circles.core.model.GalleryContentListItem
import org.futo.circles.core.model.MediaContent
import org.futo.circles.core.model.PostContentType
import org.futo.circles.core.feature.circles.filter.CircleFilterAccountDataManager
import org.futo.circles.core.feature.picker.gallery.PickGalleryMediaDialogFragment.Companion.IS_VIDEO_AVAILABLE
import org.futo.circles.core.feature.timeline.BaseTimelineViewModel
import org.futo.circles.core.feature.timeline.data_source.SingleTimelineDataSource
import org.futo.circles.core.model.GalleryContentListItem
import org.futo.circles.core.model.MediaContent
import org.futo.circles.core.model.PostContentType
import javax.inject.Inject
@HiltViewModel
class PickMediaItemViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
timelineDataSource: SingleTimelineDataSource
) : BaseTimelineViewModel(timelineDataSource) {
timelineDataSource: SingleTimelineDataSource,
circleFilterAccountDataManager: CircleFilterAccountDataManager
) : BaseTimelineViewModel(savedStateHandle, timelineDataSource, circleFilterAccountDataManager) {
private val isVideoAvailable: Boolean = savedStateHandle[IS_VIDEO_AVAILABLE] ?: true
......
......@@ -6,8 +6,8 @@ import androidx.lifecycle.asLiveData
import androidx.lifecycle.map
import dagger.hilt.android.lifecycle.HiltViewModel
import org.futo.circles.core.base.SingleEventLiveData
import org.futo.circles.core.extensions.getOrThrow
import org.futo.circles.core.extensions.launchBg
import org.futo.circles.core.feature.circles.filter.CircleFilterAccountDataManager
import org.futo.circles.core.feature.timeline.BaseTimelineViewModel
import org.futo.circles.core.feature.timeline.data_source.AccessLevelDataSource
import org.futo.circles.core.feature.timeline.data_source.SingleTimelineDataSource
......@@ -27,10 +27,9 @@ class GalleryViewModel @Inject constructor(
private val sendMessageDataSource: SendMessageDataSource,
private val mediaDataSource: PostContentDataSource,
private val postOptionsDataSource: PostOptionsDataSource,
private val accessLevelDataSource: AccessLevelDataSource
) : BaseTimelineViewModel(timelineDataSource) {
private val roomId: String = savedStateHandle.getOrThrow("roomId")
accessLevelDataSource: AccessLevelDataSource,
circleFilterAccountDataManager: CircleFilterAccountDataManager
) : BaseTimelineViewModel(savedStateHandle, timelineDataSource, circleFilterAccountDataManager) {
val accessLevelLiveData = accessLevelDataSource.accessLevelFlow.asLiveData()
......
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