mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
use snapshot state to recalculate errors
This commit is contained in:
+8
-4
@@ -50,9 +50,15 @@ fun ModalData.NetworkAndServersView(close: () -> Unit) {
|
||||
val currUserServers = remember { stateGetOrPut("currUserServers") { emptyList<UserOperatorServers>() } }
|
||||
val userServers = remember { stateGetOrPut("userServers") { emptyList<UserOperatorServers>() } }
|
||||
val serverErrors = remember { stateGetOrPut("serverErrors") { emptyList<UserServersError>() } }
|
||||
|
||||
val scope = rememberCoroutineScope()
|
||||
|
||||
LaunchedEffect(userServers) {
|
||||
snapshotFlow { userServers.value }
|
||||
.collect { updatedServers ->
|
||||
validateServers(rhId = currentRemoteHost?.remoteHostId, userServersToValidate = updatedServers, serverErrors = serverErrors)
|
||||
}
|
||||
}
|
||||
|
||||
val proxyPort = remember { derivedStateOf { appPrefs.networkProxy.state.value.port } }
|
||||
ModalView(
|
||||
close = {
|
||||
@@ -819,11 +825,9 @@ fun updateOperatorsConditionsAcceptance(usvs: MutableState<List<UserOperatorServ
|
||||
|
||||
suspend fun validateServers(
|
||||
rhId: Long?,
|
||||
userServers: MutableState<List<UserOperatorServers>>,
|
||||
userServersToValidate: List<UserOperatorServers>,
|
||||
serverErrors: MutableState<List<UserServersError>>
|
||||
) {
|
||||
val userServersToValidate = userServers.value
|
||||
|
||||
try {
|
||||
val errors = chatController.validateServers(rhId, userServersToValidate) ?: return
|
||||
serverErrors.value = errors
|
||||
|
||||
+7
-1
@@ -22,6 +22,13 @@ fun ModalData.NewServerView(
|
||||
val scope = rememberCoroutineScope()
|
||||
val newServer = remember { mutableStateOf(UserServer.empty) }
|
||||
|
||||
LaunchedEffect(userServers) {
|
||||
snapshotFlow { userServers.value }
|
||||
.collect { updatedServers ->
|
||||
validateServers(rhId = rhId, userServersToValidate = updatedServers, serverErrors = serverErrors)
|
||||
}
|
||||
}
|
||||
|
||||
ModalView(close = {
|
||||
addServer(
|
||||
scope,
|
||||
@@ -122,7 +129,6 @@ fun addServer(
|
||||
|
||||
userServers.value = updatedUserServers
|
||||
close()
|
||||
scope.launch { validateServers(rhId, userServers, serverErrors) }
|
||||
matchingOperator?.let { op ->
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title = generalGetString(MR.strings.operator_server_alert_title),
|
||||
|
||||
+8
-17
@@ -44,7 +44,13 @@ fun ModalData.OperatorView(
|
||||
val testing = remember { mutableStateOf(false) }
|
||||
val operator = remember { userServers.value[operatorIndex].operator_ }
|
||||
val currentUser = remember { chatModel.currentUser }.value
|
||||
val scope = rememberCoroutineScope()
|
||||
|
||||
LaunchedEffect(userServers) {
|
||||
snapshotFlow { userServers.value }
|
||||
.collect { updatedServers ->
|
||||
validateServers(rhId = rhId, userServersToValidate = updatedServers, serverErrors = serverErrors)
|
||||
}
|
||||
}
|
||||
|
||||
Box {
|
||||
ColumnWithScrollBar(Modifier.alpha(if (testing.value) 0.6f else 1f)) {
|
||||
@@ -55,7 +61,7 @@ fun ModalData.OperatorView(
|
||||
serverErrors,
|
||||
operatorIndex,
|
||||
navigateToProtocolView = { serverIndex, server, protocol ->
|
||||
navigateToProtocolView(scope, userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
|
||||
navigateToProtocolView(userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
|
||||
},
|
||||
currentUser,
|
||||
rhId,
|
||||
@@ -70,7 +76,6 @@ fun ModalData.OperatorView(
|
||||
}
|
||||
|
||||
fun navigateToProtocolView(
|
||||
scope: CoroutineScope,
|
||||
userServers: MutableState<List<UserOperatorServers>>,
|
||||
serverErrors: MutableState<List<UserServersError>>,
|
||||
operatorIndex: Int,
|
||||
@@ -93,7 +98,6 @@ fun navigateToProtocolView(
|
||||
deleteXFTPServer(userServers, operatorIndex, serverIndex)
|
||||
}
|
||||
close()
|
||||
scope.launch { validateServers(rhId, userServers, serverErrors) }
|
||||
},
|
||||
onUpdate = { updatedServer ->
|
||||
userServers.value = userServers.value.toMutableList().apply {
|
||||
@@ -195,9 +199,6 @@ fun OperatorViewLayout(
|
||||
)
|
||||
)
|
||||
}
|
||||
scope.launch {
|
||||
validateServers(rhId, userServers, serverErrors)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -218,9 +219,6 @@ fun OperatorViewLayout(
|
||||
)
|
||||
)
|
||||
}
|
||||
scope.launch {
|
||||
validateServers(rhId, userServers, serverErrors)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -305,9 +303,6 @@ fun OperatorViewLayout(
|
||||
)
|
||||
)
|
||||
}
|
||||
scope.launch {
|
||||
validateServers(rhId, userServers, serverErrors)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -444,7 +439,6 @@ private fun UseOperatorToggle(
|
||||
when (val conditionsAcceptance = operator?.conditionsAcceptance) {
|
||||
is ConditionsAcceptance.Accepted -> {
|
||||
changeOperatorEnabled(userServers, operatorIndex, true)
|
||||
scope.launch { validateServers(rhId, userServers, serverErrors) }
|
||||
}
|
||||
|
||||
is ConditionsAcceptance.Required -> {
|
||||
@@ -461,7 +455,6 @@ private fun UseOperatorToggle(
|
||||
}
|
||||
} else {
|
||||
changeOperatorEnabled(userServers, operatorIndex, true)
|
||||
scope.launch { validateServers(rhId, userServers, serverErrors) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -469,7 +462,6 @@ private fun UseOperatorToggle(
|
||||
}
|
||||
} else {
|
||||
changeOperatorEnabled(userServers, operatorIndex, false)
|
||||
scope.launch { validateServers(rhId, userServers, serverErrors) }
|
||||
}
|
||||
},
|
||||
)
|
||||
@@ -498,7 +490,6 @@ private fun SingleOperatorUsageConditionsView(
|
||||
updateOperatorsConditionsAcceptance(currUserServers, r.serverOperators)
|
||||
updateOperatorsConditionsAcceptance(userServers, r.serverOperators)
|
||||
changeOperatorEnabled(userServers, operatorIndex, true)
|
||||
validateServers(rhId, userServers, serverErrors)
|
||||
close()
|
||||
} catch (ex: Exception) {
|
||||
Log.e(TAG, ex.stackTraceToString())
|
||||
|
||||
+7
-1
@@ -45,6 +45,13 @@ fun ProtocolServerView(
|
||||
val scope = rememberCoroutineScope()
|
||||
val draftServer = remember { mutableStateOf(server) }
|
||||
|
||||
LaunchedEffect(userServers) {
|
||||
snapshotFlow { userServers.value }
|
||||
.collect { updatedServers ->
|
||||
validateServers(rhId = rhId, userServersToValidate = updatedServers, serverErrors = serverErrors)
|
||||
}
|
||||
}
|
||||
|
||||
ModalView(
|
||||
close = {
|
||||
scope.launch {
|
||||
@@ -70,7 +77,6 @@ fun ProtocolServerView(
|
||||
} else {
|
||||
onUpdate(draftServer.value)
|
||||
close()
|
||||
validateServers(rhId, userServers, serverErrors)
|
||||
}
|
||||
} else {
|
||||
close()
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ fun ModalData.YourServersView(
|
||||
serverErrors,
|
||||
operatorIndex,
|
||||
navigateToProtocolView = { serverIndex, server, protocol ->
|
||||
navigateToProtocolView(scope, userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
|
||||
navigateToProtocolView(userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
|
||||
},
|
||||
currentUser,
|
||||
rhId,
|
||||
|
||||
Reference in New Issue
Block a user