Do not use execute{ }

This commit is contained in:
Benoit Marty 2019-06-03 14:06:01 +02:00
parent ae38917a33
commit c91a409258
3 changed files with 50 additions and 46 deletions

View File

@ -18,21 +18,22 @@ package im.vector.riotredesign.features.home


import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.MvRxViewModelFactory
import com.airbnb.mvrx.ViewModelContext import com.airbnb.mvrx.ViewModelContext
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.rx.rx
import im.vector.riotredesign.core.platform.VectorViewModel import im.vector.riotredesign.core.platform.VectorViewModel
import org.koin.android.ext.android.get import org.koin.android.ext.android.get


/**
* View model used to update the home bottom bar notification counts
*/
class HomeDetailViewModel(initialState: HomeDetailViewState, class HomeDetailViewModel(initialState: HomeDetailViewState,
private val session: Session) private val homeRoomListStore: HomeRoomListObservableStore)
: VectorViewModel<HomeDetailViewState>(initialState) { : VectorViewModel<HomeDetailViewState>(initialState) {


companion object : MvRxViewModelFactory<HomeDetailViewModel, HomeDetailViewState> { companion object : MvRxViewModelFactory<HomeDetailViewModel, HomeDetailViewState> {


@JvmStatic @JvmStatic
override fun create(viewModelContext: ViewModelContext, state: HomeDetailViewState): HomeDetailViewModel? { override fun create(viewModelContext: ViewModelContext, state: HomeDetailViewState): HomeDetailViewModel? {
val currentSession = viewModelContext.activity.get<Session>() val homeRoomListStore = viewModelContext.activity.get<HomeRoomListObservableStore>()
return HomeDetailViewModel(state, currentSession) return HomeDetailViewModel(state, homeRoomListStore)
} }
} }


@ -42,13 +43,11 @@ class HomeDetailViewModel(initialState: HomeDetailViewState,


// PRIVATE METHODS ***************************************************************************** // PRIVATE METHODS *****************************************************************************


// TODO Filter with selected group
private fun observeRoomSummaries() { private fun observeRoomSummaries() {
session homeRoomListStore
.rx() .observe()
.liveRoomSummaries() .subscribe { list ->
.execute { state -> list.let { summaries ->
state.invoke()?.let { summaries ->
val peopleNotifications = summaries val peopleNotifications = summaries
.filter { it.isDirect } .filter { it.isDirect }
.map { it.notificationCount } .map { it.notificationCount }
@ -65,19 +64,19 @@ class HomeDetailViewModel(initialState: HomeDetailViewState,
.filter { !it.isDirect } .filter { !it.isDirect }
.any { it.highlightCount > 0 } .any { it.highlightCount > 0 }


copy( setState {
notificationCountCatchup = peopleNotifications + roomsNotifications, copy(
notificationHighlightCatchup = peopleHasHighlight || roomsHasHighlight, notificationCountCatchup = peopleNotifications + roomsNotifications,
notificationCountPeople = peopleNotifications, notificationHighlightCatchup = peopleHasHighlight || roomsHasHighlight,
notificationHighlightPeople = peopleHasHighlight, notificationCountPeople = peopleNotifications,
notificationCountRooms = roomsNotifications, notificationHighlightPeople = peopleHasHighlight,
notificationHighlightRooms = roomsHasHighlight notificationCountRooms = roomsNotifications,
) notificationHighlightRooms = roomsHasHighlight
} ?: run { )
// No change }
copy()
} }
} }
.disposeOnClear()
} }


} }

View File

@ -82,22 +82,25 @@ class RoomDirectoryViewModel(initialState: PublicRoomsViewState,
session session
.rx() .rx()
.liveRoomSummaries() .liveRoomSummaries()
.execute { async -> .subscribe { list ->
val joinedRoomIds = async.invoke() val joinedRoomIds = list
// Keep only joined room // Keep only joined room
?.filter { it.membership == Membership.JOIN } ?.filter { it.membership == Membership.JOIN }
?.map { it.roomId } ?.map { it.roomId }
?.toList() ?.toList()
?: emptyList() ?: emptyList()


copy( setState {
joinedRoomsIds = joinedRoomIds, copy(
// Remove (newly) joined room id from the joining room list joinedRoomsIds = joinedRoomIds,
joiningRoomsIds = joiningRoomsIds.toMutableList().apply { removeAll(joinedRoomIds) }, // Remove (newly) joined room id from the joining room list
// Remove (newly) joined room id from the joining room list in error joiningRoomsIds = joiningRoomsIds.toMutableList().apply { removeAll(joinedRoomIds) },
joiningErrorRoomsIds = joiningErrorRoomsIds.toMutableList().apply { removeAll(joinedRoomIds) } // Remove (newly) joined room id from the joining room list in error
) joiningErrorRoomsIds = joiningErrorRoomsIds.toMutableList().apply { removeAll(joinedRoomIds) }
)
}
} }
.disposeOnClear()
} }


fun setRoomDirectoryData(roomDirectoryData: RoomDirectoryData) { fun setRoomDirectoryData(roomDirectoryData: RoomDirectoryData) {

View File

@ -49,23 +49,25 @@ class RoomPreviewViewModel(initialState: RoomPreviewViewState,
session session
.rx() .rx()
.liveRoomSummaries() .liveRoomSummaries()
.execute { async -> .subscribe { list ->
val isRoomJoined = async.invoke() withState { state ->
// Keep only joined room val isRoomJoined = list
?.filter { it.membership == Membership.JOIN } // Keep only joined room
?.map { it.roomId } ?.filter { it.membership == Membership.JOIN }
?.toList() ?.map { it.roomId }
?.contains(roomId) == true ?.toList()
?.contains(state.roomId) == true


if (isRoomJoined) { if (isRoomJoined) {
copy( setState {
roomJoinState = JoinState.JOINED copy(
) roomJoinState = JoinState.JOINED
} else { )
// TODO No change... }
copy() }
} }
} }
.disposeOnClear()
} }


// TODO I should not have to do that // TODO I should not have to do that
@ -88,7 +90,7 @@ class RoomPreviewViewModel(initialState: RoomPreviewViewState,
copy( copy(
roomJoinState = JoinState.JOINING, roomJoinState = JoinState.JOINING,
lastError = null lastError = null
) )
} }


session.joinRoom(state.roomId, object : MatrixCallback<Unit> { session.joinRoom(state.roomId, object : MatrixCallback<Unit> {