Create a MatrixItemHelper to avoid duplicated code.
This commit is contained in:
parent
50216fb296
commit
2d9a5b5a2a
5 changed files with 103 additions and 61 deletions
|
|
@ -25,16 +25,14 @@ import dagger.assisted.AssistedInject
|
|||
import io.element.android.x.anvilannotations.ContributesViewModel
|
||||
import io.element.android.x.core.coroutine.parallelMap
|
||||
import io.element.android.x.core.di.daggerMavericksViewModelFactory
|
||||
import io.element.android.x.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.x.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.x.di.SessionScope
|
||||
import io.element.android.x.features.roomlist.model.RoomListRoomSummary
|
||||
import io.element.android.x.features.roomlist.model.RoomListRoomSummaryPlaceholders
|
||||
import io.element.android.x.features.roomlist.model.RoomListViewState
|
||||
import io.element.android.x.matrix.MatrixClient
|
||||
import io.element.android.x.matrix.media.MediaResolver
|
||||
import io.element.android.x.matrix.room.RoomSummary
|
||||
import io.element.android.x.matrix.ui.model.MatrixUser
|
||||
import io.element.android.x.matrix.ui.MatrixItemHelper
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
|
@ -53,6 +51,7 @@ class RoomListViewModel @AssistedInject constructor(
|
|||
companion object : MavericksViewModelFactory<RoomListViewModel, RoomListViewState> by daggerMavericksViewModelFactory()
|
||||
|
||||
private val lastMessageFormatter = LastMessageFormatter()
|
||||
private val matrixUserHelper = MatrixItemHelper(client)
|
||||
|
||||
init {
|
||||
handleInit()
|
||||
|
|
@ -79,22 +78,7 @@ class RoomListViewModel @AssistedInject constructor(
|
|||
}
|
||||
|
||||
private fun handleInit() {
|
||||
suspend {
|
||||
val userAvatarUrl = client.loadUserAvatarURLString().getOrNull()
|
||||
val userDisplayName = client.loadUserDisplayName().getOrNull()
|
||||
val avatarData =
|
||||
loadAvatarData(
|
||||
userDisplayName ?: client.userId().value,
|
||||
userAvatarUrl,
|
||||
AvatarSize.SMALL
|
||||
)
|
||||
MatrixUser(
|
||||
id = client.userId(),
|
||||
username = userDisplayName,
|
||||
avatarUrl = userAvatarUrl,
|
||||
avatarData = avatarData,
|
||||
)
|
||||
}.execute {
|
||||
matrixUserHelper.getCurrentUserData(avatarSize = AvatarSize.SMALL).execute {
|
||||
copy(user = it)
|
||||
}
|
||||
|
||||
|
|
@ -137,9 +121,9 @@ class RoomListViewModel @AssistedInject constructor(
|
|||
when (roomSummary) {
|
||||
is RoomSummary.Empty -> RoomListRoomSummaryPlaceholders.create(roomSummary.identifier)
|
||||
is RoomSummary.Filled -> {
|
||||
val avatarData = loadAvatarData(
|
||||
roomSummary.details.name,
|
||||
roomSummary.details.avatarURLString
|
||||
val avatarData = matrixUserHelper.loadAvatarData(
|
||||
roomSummary = roomSummary,
|
||||
size = AvatarSize.MEDIUM
|
||||
)
|
||||
RoomListRoomSummary(
|
||||
id = roomSummary.identifier(),
|
||||
|
|
@ -153,14 +137,4 @@ class RoomListViewModel @AssistedInject constructor(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun loadAvatarData(
|
||||
name: String,
|
||||
url: String?,
|
||||
size: AvatarSize = AvatarSize.MEDIUM
|
||||
): AvatarData {
|
||||
val model = client.mediaResolver()
|
||||
.resolve(url, kind = MediaResolver.Kind.Thumbnail(size.value))
|
||||
return AvatarData(name, model, size)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue