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.ViewModelContext
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.rx.rx
import im.vector.riotredesign.core.platform.VectorViewModel
import org.koin.android.ext.android.get

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

companion object : MvRxViewModelFactory<HomeDetailViewModel, HomeDetailViewState> {

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

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

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

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

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

}

View File

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

copy(
joinedRoomsIds = joinedRoomIds,
// Remove (newly) joined room id from the joining room list
joiningRoomsIds = joiningRoomsIds.toMutableList().apply { removeAll(joinedRoomIds) },
// Remove (newly) joined room id from the joining room list in error
joiningErrorRoomsIds = joiningErrorRoomsIds.toMutableList().apply { removeAll(joinedRoomIds) }
)
setState {
copy(
joinedRoomsIds = joinedRoomIds,
// Remove (newly) joined room id from the joining room list
joiningRoomsIds = joiningRoomsIds.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) {

View File

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

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

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

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