@@ -32,6 +32,7 @@ import im.vector.app.core.extensions.exhaustive
32
32
import im.vector.app.core.mvrx.runCatchingToAsync
33
33
import im.vector.app.core.platform.VectorViewModel
34
34
import im.vector.app.core.resources.StringProvider
35
+ import im.vector.app.features.createdirect.DirectRoomHelper
35
36
import im.vector.app.features.displayname.getBestName
36
37
import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider
37
38
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
@@ -66,6 +67,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
66
67
@Assisted private val initialState : RoomMemberProfileViewState ,
67
68
private val stringProvider : StringProvider ,
68
69
private val matrixItemColorProvider : MatrixItemColorProvider ,
70
+ private val directRoomHelper : DirectRoomHelper ,
69
71
private val session : Session
70
72
) : VectorViewModel<RoomMemberProfileViewState, RoomMemberProfileAction, RoomMemberProfileViewEvents>(initialState) {
71
73
@@ -167,9 +169,25 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
167
169
is RoomMemberProfileAction .KickUser -> handleKickAction(action)
168
170
RoomMemberProfileAction .InviteUser -> handleInviteAction()
169
171
is RoomMemberProfileAction .SetUserColorOverride -> handleSetUserColorOverride(action)
172
+ is RoomMemberProfileAction .OpenOrCreateDm -> handleOpenOrCreateDm(action)
170
173
}.exhaustive
171
174
}
172
175
176
+ private fun handleOpenOrCreateDm (action : RoomMemberProfileAction .OpenOrCreateDm ) {
177
+ viewModelScope.launch {
178
+ _viewEvents .post(RoomMemberProfileViewEvents .Loading ())
179
+ val roomId = try {
180
+ directRoomHelper.ensureDMExists(action.userId)
181
+ } catch (failure: Throwable ) {
182
+ _viewEvents .post(RoomMemberProfileViewEvents .Failure (failure))
183
+ return @launch
184
+ }
185
+ if (roomId != initialState.roomId) {
186
+ _viewEvents .post(RoomMemberProfileViewEvents .OpenRoom (roomId = roomId))
187
+ }
188
+ }
189
+ }
190
+
173
191
private fun handleSetUserColorOverride (action : RoomMemberProfileAction .SetUserColorOverride ) {
174
192
val newOverrideColorSpecs = session.accountDataService()
175
193
.getUserAccountDataEvent(UserAccountDataTypes .TYPE_OVERRIDE_COLORS )
0 commit comments