wip: Get room info serially
This commit is contained in:
parent
5fbffd8700
commit
c0944ec0a8
@ -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 {
|
||||
|
@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user