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
|
2018-12-29 18:57:38 +00:00
|
|
|
import im.vector.riotredesign.core.platform.RiotViewModel
|
2018-12-29 16:54:03 +00:00
|
|
|
|
|
|
|
class RoomDetailViewModel(initialState: RoomDetailViewState,
|
|
|
|
session: Session
|
2018-12-29 18:57:38 +00:00
|
|
|
) : 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
|
|
|
|
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)
|
2018-12-29 18:57:38 +00:00
|
|
|
.execute { asyncTimeline ->
|
|
|
|
copy(asyncTimeline = asyncTimeline)
|
2018-12-29 16:54:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|