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,6 +64,7 @@ class HomeDetailViewModel(initialState: HomeDetailViewState,
.filter { !it.isDirect } .filter { !it.isDirect }
.any { it.highlightCount > 0 } .any { it.highlightCount > 0 }


setState {
copy( copy(
notificationCountCatchup = peopleNotifications + roomsNotifications, notificationCountCatchup = peopleNotifications + roomsNotifications,
notificationHighlightCatchup = peopleHasHighlight || roomsHasHighlight, notificationHighlightCatchup = peopleHasHighlight || roomsHasHighlight,
@ -73,11 +73,10 @@ class HomeDetailViewModel(initialState: HomeDetailViewState,
notificationCountRooms = roomsNotifications, notificationCountRooms = roomsNotifications,
notificationHighlightRooms = roomsHasHighlight notificationHighlightRooms = roomsHasHighlight
) )
} ?: run {
// No change
copy()
} }
} }
} }
.disposeOnClear()
}


} }

View File

@ -82,14 +82,15 @@ 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()


setState {
copy( copy(
joinedRoomsIds = joinedRoomIds, joinedRoomsIds = joinedRoomIds,
// Remove (newly) joined room id from the joining room list // Remove (newly) joined room id from the joining room list
@ -99,6 +100,8 @@ class RoomDirectoryViewModel(initialState: PublicRoomsViewState,
) )
} }
} }
.disposeOnClear()
}


fun setRoomDirectoryData(roomDirectoryData: RoomDirectoryData) { fun setRoomDirectoryData(roomDirectoryData: RoomDirectoryData) {
if (this.roomDirectoryData == roomDirectoryData) { if (this.roomDirectoryData == roomDirectoryData) {

View File

@ -49,24 +49,26 @@ class RoomPreviewViewModel(initialState: RoomPreviewViewState,
session session
.rx() .rx()
.liveRoomSummaries() .liveRoomSummaries()
.execute { async -> .subscribe { list ->
val isRoomJoined = async.invoke() withState { state ->
val isRoomJoined = 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()
?.contains(roomId) == true ?.contains(state.roomId) == true


if (isRoomJoined) { if (isRoomJoined) {
setState {
copy( copy(
roomJoinState = JoinState.JOINED 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
fun init(roomId: String) = withState { fun init(roomId: String) = withState {