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.
|
* 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
|
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")
|
val r = client.get("$baseUrl/joined_rooms")
|
||||||
{ bearerAuth(token) }
|
{ bearerAuth(token) }
|
||||||
val rooms = JSONObject(r.bodyAsText()).getJSONArray("joined_rooms")
|
val rooms = JSONObject(r.bodyAsText()).getJSONArray("joined_rooms")
|
||||||
return List<Room>(
|
return List<String>(
|
||||||
rooms.length()
|
rooms.length()
|
||||||
) { i -> getRoom(rooms.getString(i)) }
|
) { i -> rooms.getString(i) }
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getRoom(rid: String): Room {
|
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.
|
* 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
|
package ru.risdeveau.pixeldragon.ui.activity
|
||||||
@ -10,16 +10,21 @@ import android.os.Bundle
|
|||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
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.Row
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.LinearProgressIndicator
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
@ -41,6 +46,7 @@ import coil3.request.ImageRequest
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import ru.risdeveau.pixeldragon.api.getRoom
|
||||||
import ru.risdeveau.pixeldragon.api.getRooms
|
import ru.risdeveau.pixeldragon.api.getRooms
|
||||||
import ru.risdeveau.pixeldragon.api.mxcToUrl
|
import ru.risdeveau.pixeldragon.api.mxcToUrl
|
||||||
import ru.risdeveau.pixeldragon.db.Room
|
import ru.risdeveau.pixeldragon.db.Room
|
||||||
@ -79,7 +85,7 @@ class MainActivity : ComponentActivity() {
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RoomList(modifier: Modifier = Modifier) {
|
fun RoomList(modifier: Modifier = Modifier) {
|
||||||
var list by remember { mutableStateOf(listOf<Room>()) }
|
var list by remember { mutableStateOf(listOf<String>()) }
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
val listState = rememberLazyListState()
|
val listState = rememberLazyListState()
|
||||||
|
|
||||||
@ -99,8 +105,8 @@ fun RoomList(modifier: Modifier = Modifier) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LazyColumn(modifier = modifier, state = listState) {
|
LazyColumn(modifier = modifier, state = listState) {
|
||||||
items(list) { room ->
|
items(list) { rid ->
|
||||||
RoomItem(room = room)
|
RoomItem(rid = rid)
|
||||||
}
|
}
|
||||||
|
|
||||||
item {
|
item {
|
||||||
@ -112,25 +118,52 @@ fun RoomList(modifier: Modifier = Modifier) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RoomItem(modifier: Modifier = Modifier, room: Room) {
|
fun RoomItem(modifier: Modifier = Modifier, rid: String) {
|
||||||
Row (
|
var room by remember { mutableStateOf<Room?>(null) }
|
||||||
modifier.height(64.dp).fillMaxWidth().padding(8.dp)
|
val scope = rememberCoroutineScope()
|
||||||
) {
|
|
||||||
SubcomposeAsyncImage(
|
LaunchedEffect(true) {
|
||||||
model = ImageRequest.Builder(appCtx)
|
scope.launch {
|
||||||
.data(mxcToUrl(room.avatarUrl ?: ""))
|
withContext(Dispatchers.IO) {
|
||||||
.httpHeaders(NetworkHeaders.Builder()
|
room = getRoom(rid)
|
||||||
.set("Authorization", "Bearer $token")
|
|
||||||
.build())
|
|
||||||
.build(),
|
|
||||||
contentDescription = room.roomId,
|
|
||||||
loading = {
|
|
||||||
CircularProgressIndicator()
|
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
// 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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user