wip: Get room info serially

This commit is contained in:
Sweetbread 2025-02-22 20:56:15 +03:00
parent 5fbffd8700
commit c0944ec0a8
2 changed files with 61 additions and 28 deletions

View File

@ -1,7 +1,7 @@
/*
* Created by sweetbread on 22.02.2025, 15:45
* Created by sweetbread on 22.02.2025, 17:56
* Copyright (c) 2025. All rights reserved.
* Last modified 22.02.2025, 15:45
* Last modified 22.02.2025, 17:48
*/
package ru.risdeveau.pixeldragon.api
@ -25,13 +25,13 @@ import ru.risdeveau.pixeldragon.token
//
//}
suspend fun getRooms(): List<Room> {
suspend fun getRooms(): List<String> {
val r = client.get("$baseUrl/joined_rooms")
{ bearerAuth(token) }
val rooms = JSONObject(r.bodyAsText()).getJSONArray("joined_rooms")
return List<Room>(
return List<String>(
rooms.length()
) { i -> getRoom(rooms.getString(i)) }
) { i -> rooms.getString(i) }
}
suspend fun getRoom(rid: String): Room {

View File

@ -1,7 +1,7 @@
/*
* Created by sweetbread on 22.02.2025, 15:45
* Created by sweetbread on 22.02.2025, 17:56
* Copyright (c) 2025. All rights reserved.
* Last modified 22.02.2025, 15:45
* Last modified 22.02.2025, 17:56
*/
package ru.risdeveau.pixeldragon.ui.activity
@ -10,16 +10,21 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
@ -41,6 +46,7 @@ import coil3.request.ImageRequest
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import ru.risdeveau.pixeldragon.api.getRoom
import ru.risdeveau.pixeldragon.api.getRooms
import ru.risdeveau.pixeldragon.api.mxcToUrl
import ru.risdeveau.pixeldragon.db.Room
@ -79,7 +85,7 @@ class MainActivity : ComponentActivity() {
@Composable
fun RoomList(modifier: Modifier = Modifier) {
var list by remember { mutableStateOf(listOf<Room>()) }
var list by remember { mutableStateOf(listOf<String>()) }
val coroutineScope = rememberCoroutineScope()
val listState = rememberLazyListState()
@ -99,8 +105,8 @@ fun RoomList(modifier: Modifier = Modifier) {
}
LazyColumn(modifier = modifier, state = listState) {
items(list) { room ->
RoomItem(room = room)
items(list) { rid ->
RoomItem(rid = rid)
}
item {
@ -112,25 +118,52 @@ fun RoomList(modifier: Modifier = Modifier) {
}
@Composable
fun RoomItem(modifier: Modifier = Modifier, room: Room) {
Row (
modifier.height(64.dp).fillMaxWidth().padding(8.dp)
fun RoomItem(modifier: Modifier = Modifier, rid: String) {
var room by remember { mutableStateOf<Room?>(null) }
val scope = rememberCoroutineScope()
LaunchedEffect(true) {
scope.launch {
withContext(Dispatchers.IO) {
room = getRoom(rid)
}
}
}
if (room != null) {
Row(
modifier
.padding(8.dp)
.height(72.dp)
.fillMaxWidth()
.background(MaterialTheme.colorScheme.primaryContainer, RoundedCornerShape(16.dp))
.padding(8.dp)
) {
SubcomposeAsyncImage(
modifier = Modifier
.padding(end = 4.dp)
.height(64.dp)
.width(64.dp),
model = ImageRequest.Builder(appCtx)
.data(mxcToUrl(room.avatarUrl ?: ""))
.httpHeaders(NetworkHeaders.Builder()
.data(mxcToUrl(room!!.avatarUrl ?: ""))
.httpHeaders(
NetworkHeaders.Builder()
.set("Authorization", "Bearer $token")
.build())
.set("Cache-Control", "max-age=86400")
.build()
)
.build(),
contentDescription = room.roomId,
contentDescription = room!!.roomId,
loading = {
CircularProgressIndicator()
}
)
// Column {
Text(room.name ?: "Unknown")
// }
Column {
Text(room!!.name ?: "Unknown", maxLines = 1)
}
}
} else {
LinearProgressIndicator(Modifier.fillMaxWidth())
}
}