1
Fork 0
mirror of https://github.com/Steffo99/twom.git synced 2024-11-21 15:44:26 +00:00

Export resolveUser to a separate file

This commit is contained in:
Steffo 2024-01-31 03:57:28 +01:00
parent c1b84d14f4
commit 63ef1a4edd
Signed by: steffo
GPG key ID: 5ADA3868646C3FC0
2 changed files with 55 additions and 13 deletions

View file

@ -13,10 +13,8 @@ import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
@ -28,10 +26,10 @@ import eu.steffo.twom.R
import eu.steffo.twom.composables.avatar.components.AvatarUser
import eu.steffo.twom.composables.errorhandling.ErrorText
import eu.steffo.twom.composables.matrix.LocalSession
import eu.steffo.twom.composables.viewroom.effects.resolveUser
import eu.steffo.twom.utils.RSVPAnswer
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
import org.matrix.android.sdk.api.session.user.model.User
import kotlin.jvm.optionals.getOrNull
@OptIn(ExperimentalFoundationApi::class)
@ -64,16 +62,8 @@ fun MemberListItem(
return
}
// TODO: Is this necessary?
var user by remember { mutableStateOf<User?>(null) }
LaunchedEffect(session, member.userId) {
val memberId = member.userId
Log.d("UserListItem", "Resolving user: $memberId")
user = session.userService().resolveUser(memberId)
Log.d("UserListItem", "Resolved user: $memberId")
}
// This might not be necessary; I'm not sure when the internal Matrix client resolves users
val user = resolveUser(member.userId)
val scope = rememberCoroutineScope()

View file

@ -0,0 +1,52 @@
package eu.steffo.twom.composables.viewroom.effects
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import eu.steffo.twom.composables.matrix.LocalSession
import kotlinx.coroutines.CancellationException
import org.matrix.android.sdk.api.session.user.model.User
private const val TAG = "resolveUser"
@Composable
fun resolveUser(userId: String?): User? {
val session = LocalSession.current
var user by remember { mutableStateOf<User?>(null) }
LaunchedEffect(session, userId) Fetch@{
if (session == null) {
Log.d(TAG, "Session is null, clearing user...")
user = null
return@Fetch
}
if (userId == null) {
Log.d(TAG, "userId is null, clearing user...")
user = null
return@Fetch
}
Log.i(TAG, "Resolving user: $userId")
try {
user = session.userService().resolveUser(userId)
} catch (e: CancellationException) {
// This makes sure no corrupt image is displayed, at least
Log.d(TAG, "Cancelled resolution of user: $userId", e)
user = null
return@Fetch
} catch (e: Throwable) {
Log.e(TAG, "Unable to resolve user: $userId", e)
user = null
return@Fetch
}
Log.d(TAG, "Resolved user: $userId")
}
return user
}