Load from web client

This commit is contained in:
Damontecres 2026-01-29 19:47:10 -05:00
parent d3448771c8
commit 8437ddb51d
No known key found for this signature in database
3 changed files with 48 additions and 9 deletions

View file

@ -1,5 +1,6 @@
package com.github.damontecres.wholphin.ui.main.settings
import androidx.annotation.StringRes
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@ -48,7 +49,7 @@ fun HomeSettingsPage(
val scope = rememberCoroutineScope()
val listState = rememberLazyListState()
val backStack = rememberNavBackStack(HomeSettingsDestination.RowList)
var showConfirmDialog by remember { mutableStateOf<(() -> Unit)?>(null) }
var showConfirmDialog by remember { mutableStateOf<ShowConfirm?>(null) }
val state by viewModel.state.collectAsState()
// TODO discover rows
@ -180,16 +181,22 @@ fun HomeSettingsPage(
HomeSettingsGlobal(
onClickResize = { viewModel.resizeCards(it) },
onClickSave = {
showConfirmDialog = {
viewModel.saveToRemote()
}
showConfirmDialog =
ShowConfirm(R.string.overwrite_server_settings) {
viewModel.saveToRemote()
}
},
onClickLoad = {
showConfirmDialog = {
viewModel.loadFromRemote()
}
showConfirmDialog =
ShowConfirm(R.string.overwrite_local_settings) {
viewModel.loadFromRemote()
}
},
onClickLoadWeb = {
showConfirmDialog =
ShowConfirm(R.string.overwrite_local_settings) {
viewModel.loadFromRemoteWeb()
}
},
modifier = destModifier,
)
@ -215,10 +222,10 @@ fun HomeSettingsPage(
.weight(1f),
)
}
showConfirmDialog?.let { onConfirm ->
showConfirmDialog?.let { (body, onConfirm) ->
ConfirmDialog(
title = stringResource(R.string.confirm),
body = "Overwrite?",
body = stringResource(body),
onCancel = { showConfirmDialog = null },
onConfirm = {
onConfirm.invoke()
@ -227,3 +234,8 @@ fun HomeSettingsPage(
)
}
}
data class ShowConfirm(
@param:StringRes val body: Int,
val onConfirm: () -> Unit,
)

View file

@ -401,6 +401,31 @@ class HomeSettingsViewModel
}
}
fun loadFromRemoteWeb() {
viewModelScope.launchIO {
serverRepository.currentUser.value?.let { user ->
Timber.d("Loading home settings from web")
try {
_state.update { it.copy(loading = LoadingState.Loading) }
val result = homeSettingsService.parseFromWebConfig(user.id)
if (result != null) {
Timber.v("Got web settings")
_state.update {
it.copy(rows = result.rows)
}
} else {
Timber.v("No web settings")
showToast(context, "No server-side web settings found")
}
fetchRowData()
} catch (ex: Exception) {
Timber.e(ex)
showToast(context, "Error: ${ex.localizedMessage}")
}
}
}
}
fun saveToLocal() {
// This uses injected ioScope so that it will still run when the page is closing
ioScope.launchIO {

View file

@ -474,6 +474,8 @@
<string name="load_from_web_client">Load from web client</string>
<string name="use_series">Use series image</string>
<string name="add_row_for">Add row for %1$s</string>
<string name="overwrite_server_settings">Overwrite settings on server?</string>
<string name="overwrite_local_settings">Overwrite local settings?</string>
<string-array name="theme_song_volume">
<item>Disabled</item>