android, desktop: protocol servers fix (#3755)
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
This commit is contained in:
parent
cd349e80ce
commit
f102f39147
@ -63,8 +63,6 @@ object ChatModel {
|
|||||||
|
|
||||||
val terminalItems = mutableStateOf<List<TerminalItem>>(listOf())
|
val terminalItems = mutableStateOf<List<TerminalItem>>(listOf())
|
||||||
val userAddress = mutableStateOf<UserContactLinkRec?>(null)
|
val userAddress = mutableStateOf<UserContactLinkRec?>(null)
|
||||||
// Allows to temporary save servers that are being edited on multiple screens
|
|
||||||
val userSMPServersUnsaved = mutableStateOf<(List<ServerCfg>)?>(null)
|
|
||||||
val chatItemTTL = mutableStateOf<ChatItemTTL>(ChatItemTTL.None)
|
val chatItemTTL = mutableStateOf<ChatItemTTL>(ChatItemTTL.None)
|
||||||
|
|
||||||
// set when app opened from external intent
|
// set when app opened from external intent
|
||||||
|
@ -47,10 +47,6 @@ fun NetworkAndServersView(
|
|||||||
val onionHosts = remember { mutableStateOf(netCfg.onionHosts) }
|
val onionHosts = remember { mutableStateOf(netCfg.onionHosts) }
|
||||||
val sessionMode = remember { mutableStateOf(netCfg.sessionMode) }
|
val sessionMode = remember { mutableStateOf(netCfg.sessionMode) }
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
|
||||||
chatModel.userSMPServersUnsaved.value = null
|
|
||||||
}
|
|
||||||
|
|
||||||
val proxyPort = remember { derivedStateOf { chatModel.controller.appPrefs.networkProxyHostPort.state.value?.split(":")?.lastOrNull()?.toIntOrNull() ?: 9050 } }
|
val proxyPort = remember { derivedStateOf { chatModel.controller.appPrefs.networkProxyHostPort.state.value?.split(":")?.lastOrNull()?.toIntOrNull() ?: 9050 } }
|
||||||
NetworkAndServersLayout(
|
NetworkAndServersLayout(
|
||||||
currentRemoteHost = currentRemoteHost,
|
currentRemoteHost = currentRemoteHost,
|
||||||
|
@ -28,19 +28,18 @@ import chat.simplex.res.MR
|
|||||||
@Composable
|
@Composable
|
||||||
fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: ServerProtocol, close: () -> Unit) {
|
fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: ServerProtocol, close: () -> Unit) {
|
||||||
var presetServers by remember(rhId) { mutableStateOf(emptyList<String>()) }
|
var presetServers by remember(rhId) { mutableStateOf(emptyList<String>()) }
|
||||||
var servers by remember(rhId) {
|
var servers by remember { stateGetOrPut("servers") { emptyList<ServerCfg>() } }
|
||||||
mutableStateOf(m.userSMPServersUnsaved.value ?: emptyList())
|
var serversAlreadyLoaded by remember { stateGetOrPut("serversAlreadyLoaded") { false } }
|
||||||
}
|
|
||||||
val currServers = remember(rhId) { mutableStateOf(servers) }
|
val currServers = remember(rhId) { mutableStateOf(servers) }
|
||||||
val testing = rememberSaveable(rhId) { mutableStateOf(false) }
|
val testing = rememberSaveable(rhId) { mutableStateOf(false) }
|
||||||
val serversUnchanged = remember { derivedStateOf { servers == currServers.value || testing.value } }
|
val serversUnchanged = remember(servers) { derivedStateOf { servers == currServers.value || testing.value } }
|
||||||
val allServersDisabled = remember { derivedStateOf { servers.all { !it.enabled } } }
|
val allServersDisabled = remember { derivedStateOf { servers.none { it.enabled } } }
|
||||||
val saveDisabled = remember {
|
val saveDisabled = remember(servers) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
servers.isEmpty() ||
|
servers.isEmpty() ||
|
||||||
servers == currServers.value ||
|
servers == currServers.value ||
|
||||||
testing.value ||
|
testing.value ||
|
||||||
!servers.all { srv ->
|
servers.none { srv ->
|
||||||
val address = parseServerAddress(srv.server)
|
val address = parseServerAddress(srv.server)
|
||||||
address != null && uniqueAddress(srv, address, servers)
|
address != null && uniqueAddress(srv, address, servers)
|
||||||
} ||
|
} ||
|
||||||
@ -49,8 +48,8 @@ fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: Ser
|
|||||||
}
|
}
|
||||||
|
|
||||||
KeyChangeEffect(rhId) {
|
KeyChangeEffect(rhId) {
|
||||||
m.userSMPServersUnsaved.value = null
|
|
||||||
servers = emptyList()
|
servers = emptyList()
|
||||||
|
serversAlreadyLoaded = false
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(rhId) {
|
LaunchedEffect(rhId) {
|
||||||
@ -59,8 +58,9 @@ fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: Ser
|
|||||||
if (res != null) {
|
if (res != null) {
|
||||||
currServers.value = res.protoServers
|
currServers.value = res.protoServers
|
||||||
presetServers = res.presetServers
|
presetServers = res.presetServers
|
||||||
if (servers.isEmpty()) {
|
if (servers.isEmpty() && !serversAlreadyLoaded) {
|
||||||
servers = currServers.value
|
servers = currServers.value
|
||||||
|
serversAlreadyLoaded = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,13 +80,11 @@ fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: Ser
|
|||||||
newServers.add(index, updated)
|
newServers.add(index, updated)
|
||||||
old = updated
|
old = updated
|
||||||
servers = newServers
|
servers = newServers
|
||||||
m.userSMPServersUnsaved.value = servers
|
|
||||||
},
|
},
|
||||||
onDelete = {
|
onDelete = {
|
||||||
val newServers = ArrayList(servers)
|
val newServers = ArrayList(servers)
|
||||||
newServers.removeAt(index)
|
newServers.removeAt(index)
|
||||||
servers = newServers
|
servers = newServers
|
||||||
m.userSMPServersUnsaved.value = servers
|
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -125,7 +123,6 @@ fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: Ser
|
|||||||
ScanProtocolServer(rhId) {
|
ScanProtocolServer(rhId) {
|
||||||
close()
|
close()
|
||||||
servers = servers + it
|
servers = servers + it
|
||||||
m.userSMPServersUnsaved.value = servers
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,13 +147,11 @@ fun ModalData.ProtocolServersView(m: ChatModel, rhId: Long?, serverProtocol: Ser
|
|||||||
testServersJob.value = withLongRunningApi {
|
testServersJob.value = withLongRunningApi {
|
||||||
testServers(testing, servers, m) {
|
testServers(testing, servers, m) {
|
||||||
servers = it
|
servers = it
|
||||||
m.userSMPServersUnsaved.value = servers
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
resetServers = {
|
resetServers = {
|
||||||
servers = currServers.value ?: emptyList()
|
servers = currServers.value
|
||||||
m.userSMPServersUnsaved.value = null
|
|
||||||
},
|
},
|
||||||
saveSMPServers = {
|
saveSMPServers = {
|
||||||
saveServers(rhId, serverProtocol, currServers, servers, m)
|
saveServers(rhId, serverProtocol, currServers, servers, m)
|
||||||
@ -355,7 +350,6 @@ private fun saveServers(rhId: Long?, protocol: ServerProtocol, currServers: Muta
|
|||||||
withBGApi {
|
withBGApi {
|
||||||
if (m.controller.setUserProtoServers(rhId, protocol, servers)) {
|
if (m.controller.setUserProtoServers(rhId, protocol, servers)) {
|
||||||
currServers.value = servers
|
currServers.value = servers
|
||||||
m.userSMPServersUnsaved.value = null
|
|
||||||
}
|
}
|
||||||
afterSave()
|
afterSave()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user