package net.keinekekse.app import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.safeContentPadding import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import io.github.oshai.kotlinlogging.KotlinLogging import io.ktor.client.* import io.ktor.client.request.* import io.ktor.client.statement.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import net.keinekekse.app.books.generated.resources.Res import net.keinekekse.app.books.generated.resources.compose_multiplatform import org.jetbrains.compose.resources.painterResource import org.koin.compose.koinInject import org.koin.core.annotation.Single private val logger = KotlinLogging.logger {} @Composable @Preview fun App() { MaterialTheme { /* eigenes Theme -> https://material-foundation.github.io/material-theme-builder/ den Download in den source code übernehmen (in Theme.kt sind Anpassungen nötig) per default hat die generierte Klasse den Namen AppTheme. // AppTheme { */ val test = koinInject() var showContent by remember { mutableStateOf(false) } Column( modifier = Modifier .background(MaterialTheme.colorScheme.primaryContainer) .safeContentPadding() .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, ) { Button(onClick = { showContent = !showContent }) { Text("Click me!") } Button(onClick = { CoroutineScope(Dispatchers.Default).launch { logger.debug { "requesting '/test'" } test.request("/test") } }) { Text("Test Token Refresh") } AnimatedVisibility(showContent) { val greeting = remember { Greeting().greet() } Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, ) { Image(painterResource(Res.drawable.compose_multiplatform), null) Text("Compose: $greeting") } } } } } @Single class TestAuth(val httpClient: HttpClient) { private val srv = "https://kas.keinekekse.net/" suspend fun request(url: String) { logger.debug { "connecting" } // val response = httpClient.get(srv + "testdb/books") // val books: List = response.body() val response = httpClient.get(srv + url + "testdb/books") val body = response.bodyAsText() logger.debug { "call to $url" } logger.debug { response.status } logger.debug { body } } }