From c0944ec0a884bdb425949296e5883b8bdebf1b56 Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Sat, 22 Feb 2025 20:56:15 +0300 Subject: [PATCH] wip: Get room info serially --- .../java/ru/risdeveau/pixeldragon/api/Room.kt | 10 +-- .../pixeldragon/ui/activity/MainActivity.kt | 79 +++++++++++++------ 2 files changed, 61 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/ru/risdeveau/pixeldragon/api/Room.kt b/app/src/main/java/ru/risdeveau/pixeldragon/api/Room.kt index 7453d24..471a98c 100755 --- a/app/src/main/java/ru/risdeveau/pixeldragon/api/Room.kt +++ b/app/src/main/java/ru/risdeveau/pixeldragon/api/Room.kt @@ -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 { +suspend fun getRooms(): List { val r = client.get("$baseUrl/joined_rooms") { bearerAuth(token) } val rooms = JSONObject(r.bodyAsText()).getJSONArray("joined_rooms") - return List( + return List( rooms.length() - ) { i -> getRoom(rooms.getString(i)) } + ) { i -> rooms.getString(i) } } suspend fun getRoom(rid: String): Room { diff --git a/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt b/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt index fa8f8dd..a59f28c 100755 --- a/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt +++ b/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt @@ -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()) } + var list by remember { mutableStateOf(listOf()) } 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) - ) { - SubcomposeAsyncImage( - model = ImageRequest.Builder(appCtx) - .data(mxcToUrl(room.avatarUrl ?: "")) - .httpHeaders(NetworkHeaders.Builder() - .set("Authorization", "Bearer $token") - .build()) - .build(), - contentDescription = room.roomId, - loading = { - CircularProgressIndicator() +fun RoomItem(modifier: Modifier = Modifier, rid: String) { + var room by remember { mutableStateOf(null) } + val scope = rememberCoroutineScope() + + LaunchedEffect(true) { + scope.launch { + withContext(Dispatchers.IO) { + room = getRoom(rid) } - ) -// Column { - Text(room.name ?: "Unknown") -// } + } + } + + 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() + .set("Authorization", "Bearer $token") + .set("Cache-Control", "max-age=86400") + .build() + ) + .build(), + contentDescription = room!!.roomId, + loading = { + CircularProgressIndicator() + } + ) + Column { + Text(room!!.name ?: "Unknown", maxLines = 1) + } + } + } else { + LinearProgressIndicator(Modifier.fillMaxWidth()) } }