Переработан процесс получения данных с сервера
Этот коммит содержится в:
родитель
50c521c45a
Коммит
d7aefcb03d
@ -57,6 +57,7 @@ kotlin {
|
|||||||
implementation(libs.androidx.lifecycle.viewmodel)
|
implementation(libs.androidx.lifecycle.viewmodel)
|
||||||
implementation(libs.androidx.lifecycle.runtime.compose)
|
implementation(libs.androidx.lifecycle.runtime.compose)
|
||||||
implementation(libs.ktor.client.core)
|
implementation(libs.ktor.client.core)
|
||||||
|
implementation(libs.ktor.client.content.negotiation)
|
||||||
implementation(libs.ktor.serialization.kotlinx.json)
|
implementation(libs.ktor.serialization.kotlinx.json)
|
||||||
implementation(libs.navigation.compose)
|
implementation(libs.navigation.compose)
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import androidx.compose.runtime.LaunchedEffect
|
|||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.snapshotFlow
|
import androidx.compose.runtime.snapshotFlow
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@ -54,6 +55,13 @@ import cit_is_bot.composeapp.generated.resources.baseline_subject_24
|
|||||||
import cit_is_bot.composeapp.generated.resources.baseline_title_24
|
import cit_is_bot.composeapp.generated.resources.baseline_title_24
|
||||||
import cit_is_bot.composeapp.generated.resources.outline_adjust_24
|
import cit_is_bot.composeapp.generated.resources.outline_adjust_24
|
||||||
import cit_is_bot.composeapp.generated.resources.outline_time_auto_24
|
import cit_is_bot.composeapp.generated.resources.outline_time_auto_24
|
||||||
|
import io.ktor.client.HttpClient
|
||||||
|
import io.ktor.client.request.put
|
||||||
|
import io.ktor.client.request.setBody
|
||||||
|
import io.ktor.http.ContentType
|
||||||
|
import io.ktor.http.HttpStatusCode
|
||||||
|
import io.ktor.http.contentType
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import org.jetbrains.compose.resources.DrawableResource
|
import org.jetbrains.compose.resources.DrawableResource
|
||||||
import org.jetbrains.compose.resources.painterResource
|
import org.jetbrains.compose.resources.painterResource
|
||||||
import ru.csasq.cit_is_bot.ui.components.TextCheckbox
|
import ru.csasq.cit_is_bot.ui.components.TextCheckbox
|
||||||
@ -75,10 +83,12 @@ enum class MessageType(
|
|||||||
@Composable
|
@Composable
|
||||||
fun ScenarioDialog(
|
fun ScenarioDialog(
|
||||||
scenarioDialogState: MutableState<Scenario?>,
|
scenarioDialogState: MutableState<Scenario?>,
|
||||||
|
client: HttpClient,
|
||||||
properties: DialogProperties = DialogProperties(
|
properties: DialogProperties = DialogProperties(
|
||||||
usePlatformDefaultWidth = false,
|
usePlatformDefaultWidth = false,
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
|
val coroutine = rememberCoroutineScope()
|
||||||
val nameState = remember {
|
val nameState = remember {
|
||||||
mutableStateOf(scenarioDialogState.value?.name)
|
mutableStateOf(scenarioDialogState.value?.name)
|
||||||
}
|
}
|
||||||
@ -134,7 +144,16 @@ fun ScenarioDialog(
|
|||||||
actions = {
|
actions = {
|
||||||
Button(
|
Button(
|
||||||
onClick = {
|
onClick = {
|
||||||
scenarioDialogState.value = null
|
scenarioDialogState.value?.name = nameState.value!!
|
||||||
|
coroutine.launch {
|
||||||
|
val response = client.put("https://cit.csasq.ru/api/scripts") {
|
||||||
|
contentType(ContentType.Application.Json)
|
||||||
|
setBody(scenarioDialogState.value)
|
||||||
|
}
|
||||||
|
when(response.status) {
|
||||||
|
HttpStatusCode.Created -> scenarioDialogState.value = null
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
@ -230,7 +249,9 @@ fun ScenarioDialog(
|
|||||||
) {
|
) {
|
||||||
OutlinedTextField(
|
OutlinedTextField(
|
||||||
value = nameState.value ?: "",
|
value = nameState.value ?: "",
|
||||||
onValueChange = {},
|
onValueChange = { value ->
|
||||||
|
nameState.value = value
|
||||||
|
},
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth(),
|
.fillMaxWidth(),
|
||||||
label = {
|
label = {
|
||||||
@ -258,7 +279,9 @@ fun ScenarioDialog(
|
|||||||
)
|
)
|
||||||
OutlinedTextField(
|
OutlinedTextField(
|
||||||
value = timeState.value ?: "",
|
value = timeState.value ?: "",
|
||||||
onValueChange = {},
|
onValueChange = { value ->
|
||||||
|
timeState.value = value
|
||||||
|
},
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth(),
|
.fillMaxWidth(),
|
||||||
label = {
|
label = {
|
||||||
|
@ -22,12 +22,13 @@ import androidx.navigation.NavController
|
|||||||
import cit_is_bot.composeapp.generated.resources.Res
|
import cit_is_bot.composeapp.generated.resources.Res
|
||||||
import cit_is_bot.composeapp.generated.resources.baseline_add_24
|
import cit_is_bot.composeapp.generated.resources.baseline_add_24
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.plugins.websocket.WebSockets
|
import io.ktor.client.call.body
|
||||||
import io.ktor.client.plugins.websocket.receiveDeserialized
|
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
|
||||||
import io.ktor.client.plugins.websocket.webSocket
|
import io.ktor.client.request.get
|
||||||
import io.ktor.serialization.kotlinx.KotlinxWebsocketSerializationConverter
|
import io.ktor.http.HttpStatusCode
|
||||||
|
import io.ktor.serialization.kotlinx.json.json
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import org.jetbrains.compose.resources.painterResource
|
import org.jetbrains.compose.resources.painterResource
|
||||||
import ru.csasq.cit_is_bot.ui.components.SwitchButton
|
import ru.csasq.cit_is_bot.ui.components.SwitchButton
|
||||||
import ru.csasq.cit_is_bot.ui.dialogs.ScenarioDialog
|
import ru.csasq.cit_is_bot.ui.dialogs.ScenarioDialog
|
||||||
@ -35,10 +36,10 @@ import ru.csasq.cit_is_bot.ui.dialogs.ScenarioDialog
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class Scenario(
|
data class Scenario(
|
||||||
val id: Int? = null,
|
val id: Int? = null,
|
||||||
val name: String,
|
var name: String,
|
||||||
val time: String,
|
var time: String,
|
||||||
val messageNumber: String,
|
var messageNumber: String,
|
||||||
val isEnabled: Boolean,
|
var isEnabled: Boolean,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -64,15 +65,22 @@ fun ScenariosScreen(
|
|||||||
mutableStateListOf<Scenario>()
|
mutableStateListOf<Scenario>()
|
||||||
}
|
}
|
||||||
val client = HttpClient {
|
val client = HttpClient {
|
||||||
install(WebSockets) {
|
install(ContentNegotiation) {
|
||||||
contentConverter = KotlinxWebsocketSerializationConverter(Json)
|
json()
|
||||||
}
|
}
|
||||||
|
// install(WebSockets) {
|
||||||
|
// contentConverter = KotlinxWebsocketSerializationConverter(Json)
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
LaunchedEffect(false) {
|
LaunchedEffect(false) {
|
||||||
client.webSocket(
|
client.launch {
|
||||||
urlString = "wss://cit.csasq.ru/ws/scripts",
|
val response = client.get("https://cit.csasq.ru/api/scripts")
|
||||||
) {
|
when (response.status) {
|
||||||
scenarioList.addAll(receiveDeserialized<List<Scenario>>())
|
HttpStatusCode.OK -> scenarioList.addAll(response.body())
|
||||||
|
}
|
||||||
|
// client.webSocket("wss://cit.csasq.ru/ws/scripts") {
|
||||||
|
// scenarioList.addAll(receiveDeserialized<List<Scenario>>())
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Column(
|
Column(
|
||||||
@ -138,6 +146,7 @@ fun ScenariosScreen(
|
|||||||
scenarioDialogState.value?.let {
|
scenarioDialogState.value?.let {
|
||||||
ScenarioDialog(
|
ScenarioDialog(
|
||||||
scenarioDialogState = scenarioDialogState,
|
scenarioDialogState = scenarioDialogState,
|
||||||
|
client = client,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ androidx-lifecycle-viewmodel = { group = "org.jetbrains.androidx.lifecycle", nam
|
|||||||
androidx-lifecycle-runtime-compose = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
|
androidx-lifecycle-runtime-compose = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
|
||||||
kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
|
kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
|
||||||
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
|
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
|
||||||
|
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
|
||||||
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
|
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
|
||||||
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
|
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
|
||||||
navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigationComposeVersion" }
|
navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigationComposeVersion" }
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user