forked from GitHub-Mirror/riotX-android
62 lines
2.0 KiB
Kotlin
62 lines
2.0 KiB
Kotlin
|
package im.vector.riotredesign.features.home.room.detail
|
||
|
|
||
|
import android.support.v4.app.FragmentActivity
|
||
|
import com.airbnb.mvrx.BaseMvRxViewModel
|
||
|
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
|
||
|
|
||
|
class RoomDetailViewModel(initialState: RoomDetailViewState,
|
||
|
session: Session
|
||
|
) : BaseMvRxViewModel<RoomDetailViewState>(initialState) {
|
||
|
|
||
|
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
|
||
|
return RoomDetailViewModel(state, currentSession)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
init {
|
||
|
observeRoomSummary()
|
||
|
observeTimeline()
|
||
|
room.loadRoomMembersIfNeeded()
|
||
|
}
|
||
|
|
||
|
fun accept(action: RoomDetailActions) {
|
||
|
when (action) {
|
||
|
is RoomDetailActions.SendMessage -> handleSendMessage(action)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 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 { async ->
|
||
|
copy(asyncTimeline = async)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|