BayernMessenger/app/src/main/java/im/vector/riotredesign/features/home/room/detail/RoomDetailViewModel.kt

67 lines
2.4 KiB
Kotlin
Raw Normal View History

2018-12-29 16:54:03 +00:00
package im.vector.riotredesign.features.home.room.detail
import android.support.v4.app.FragmentActivity
import com.airbnb.mvrx.MvRxViewModelFactory
import im.vector.matrix.android.api.Matrix
import im.vector.matrix.android.api.MatrixCallback
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.events.model.Event
import im.vector.matrix.rx.rx
import im.vector.riotredesign.core.platform.RiotViewModel
import im.vector.riotredesign.features.home.room.VisibleRoomHolder
import org.koin.android.ext.android.get
2018-12-29 16:54:03 +00:00
class RoomDetailViewModel(initialState: RoomDetailViewState,
private val session: Session,
private val visibleRoomHolder: VisibleRoomHolder
) : RiotViewModel<RoomDetailViewState>(initialState) {
2018-12-29 16:54:03 +00:00
private val room = session.getRoom(initialState.roomId)!!
private val roomId = initialState.roomId
private val eventId = initialState.eventId
companion object : MvRxViewModelFactory<RoomDetailViewState> {
@JvmStatic
override fun create(activity: FragmentActivity, state: RoomDetailViewState): RoomDetailViewModel {
val currentSession = Matrix.getInstance().currentSession
val visibleRoomHolder = activity.get<VisibleRoomHolder>()
return RoomDetailViewModel(state, currentSession, visibleRoomHolder)
2018-12-29 16:54:03 +00:00
}
}
init {
observeRoomSummary()
observeTimeline()
room.loadRoomMembersIfNeeded()
}
fun accept(action: RoomDetailActions) {
when (action) {
is RoomDetailActions.SendMessage -> handleSendMessage(action)
is RoomDetailActions.IsDisplayed -> visibleRoomHolder.setVisibleRoom(roomId)
2018-12-29 16:54:03 +00:00
}
}
// PRIVATE METHODS *****************************************************************************
private fun handleSendMessage(action: RoomDetailActions.SendMessage) {
room.sendTextMessage(action.text, callback = object : MatrixCallback<Event> {})
}
private fun observeRoomSummary() {
room.rx().liveRoomSummary()
.execute { async ->
copy(asyncRoomSummary = async)
}
}
private fun observeTimeline() {
room.rx().timeline(eventId)
.execute { timelineData ->
copy(asyncTimelineData = timelineData)
2018-12-29 16:54:03 +00:00
}
}
2018-12-29 16:54:03 +00:00
}