Settings refactor

Remove the big saveSetup function and set individual settings immediately after being changed in the UI. Group them all under Netplay.Settings
This commit is contained in:
Tom Pratt
2026-04-19 20:07:37 +02:00
committed by Tom Pratt
parent 65e4c60158
commit 86956b21be
4 changed files with 89 additions and 175 deletions

View File

@@ -202,99 +202,46 @@ object Netplay {
}
// Settings
object Settings {
@JvmStatic
external fun getNickname(): String
@JvmStatic
external fun getNickname(): String
@JvmStatic
external fun setNickname(nickname: String)
fun getConnectionType(): ConnectionType = ConnectionType.all
.find { it.configValue == getTraversalChoice() } ?: throw IllegalStateException()
fun getConnectionType(): ConnectionType = ConnectionType.all
.find { it.configValue == getTraversalChoice() } ?: throw IllegalStateException()
@JvmStatic
external fun getTraversalChoice(): String
@JvmStatic
external fun getTraversalChoice(): String
@JvmStatic
external fun getAddress(): String
@JvmStatic
external fun setTraversalChoice(traversalChoice: String)
@JvmStatic
external fun getHostCode(): String
@JvmStatic
external fun getAddress(): String
@JvmStatic
external fun getConnectPort(): Int
@JvmStatic
external fun setAddress(address: String)
@JvmStatic
external fun getHostPort(): Int
@JvmStatic
external fun getHostCode(): String
@JvmStatic
external fun getUseUpnp(): Boolean
@JvmStatic
external fun setHostCode(hostCode: String)
@JvmStatic
external fun getEnableChunkedUploadLimit(): Boolean
@JvmStatic
external fun getConnectPort(): Int
@JvmStatic
external fun getChunkedUploadLimit(): Int
@JvmStatic
external fun setConnectPort(port: Int)
@JvmStatic
external fun getUseIndex(): Boolean
@JvmStatic
external fun getClientBufferSize(): Int
@JvmStatic
external fun getIndexRegion(): String
@JvmStatic
external fun getIndexName(): String
@JvmStatic
external fun getIndexPassword(): String
@JvmStatic
external fun getClientBufferSize(): Int
@JvmStatic
external fun setClientBufferSize(buffer: Int)
suspend fun saveSetup(
nickname: String,
connectionType: ConnectionType,
address: String,
hostCode: String,
connectPort: Int,
) = withContext(Dispatchers.IO) {
SaveSetup(
nickname = nickname,
traversalChoice = connectionType.configValue,
address = address,
hostCode = hostCode,
connectPort = connectPort,
hostPort = 2626,
useUpnp = false,
useListenPort = false,
listenPort = 2626,
enableChunkedUploadLimit = false,
chunkedUploadLimit = 3000,
useIndex = false,
indexRegion = "",
indexName = "",
indexPassword = "",
)
@JvmStatic
external fun setClientBufferSize(buffer: Int)
}
@JvmStatic
external fun SaveSetup(
nickname: String,
traversalChoice: String,
address: String,
hostCode: String,
connectPort: Int,
hostPort: Int,
useUpnp: Boolean,
useListenPort: Boolean,
listenPort: Int,
enableChunkedUploadLimit: Boolean,
chunkedUploadLimit: Int,
useIndex: Boolean,
indexRegion: String,
indexName: String,
indexPassword: String,
)
}
private fun Channel<String>.flush() {

View File

@@ -19,19 +19,19 @@ class NetplaySetupViewModel : ViewModel() {
private val _connectionRole = MutableStateFlow<ConnectionRole>(ConnectionRole.Connect)
val connectionRole = _connectionRole.asStateFlow()
private val _nickname = MutableStateFlow(Netplay.getNickname())
private val _nickname = MutableStateFlow(Netplay.Settings.getNickname())
val nickname = _nickname.asStateFlow()
private val _connectionType = MutableStateFlow(Netplay.getConnectionType())
private val _connectionType = MutableStateFlow(Netplay.Settings.getConnectionType())
val connectionType = _connectionType.asStateFlow()
private val _ipAddress = MutableStateFlow(Netplay.getAddress())
private val _ipAddress = MutableStateFlow(Netplay.Settings.getAddress())
val ipAddress = _ipAddress.asStateFlow()
private val _hostCode = MutableStateFlow(Netplay.getHostCode())
private val _hostCode = MutableStateFlow(Netplay.Settings.getHostCode())
val hostCode = _hostCode.asStateFlow()
private val _connectPort = MutableStateFlow(Netplay.getConnectPort().toString())
private val _connectPort = MutableStateFlow(Netplay.Settings.getConnectPort().toString())
val connectPort = _connectPort.asStateFlow()
private val _showNetplayScreen = Channel<Unit>(CONFLATED)
@@ -52,25 +52,30 @@ class NetplaySetupViewModel : ViewModel() {
fun setNickname(nickname: String) {
_nickname.value = nickname
Netplay.Settings.setNickname(nickname)
}
fun setConnectionType(connectionType: ConnectionType) {
_connectionType.value = connectionType
Netplay.Settings.setTraversalChoice(connectionType.configValue)
}
fun setIpAddress(ipAddress: String) {
if (ipAddress.all { it.isDigit() || it == '.' }) {
_ipAddress.value = ipAddress
Netplay.Settings.setAddress(ipAddress)
}
}
fun setHostCode(hostCode: String) {
_hostCode.value = hostCode
Netplay.Settings.setHostCode(hostCode)
}
fun setConnectPort(port: String) {
if (port.all { it.isDigit() }) {
_connectPort.value = port
port.toIntOrNull()?.let { Netplay.Settings.setConnectPort(it) }
}
}
@@ -80,14 +85,6 @@ class NetplaySetupViewModel : ViewModel() {
viewModelScope.launch {
GameFileCacheManager.isLoading().asFlow().first { it == false }
Netplay.saveSetup(
nickname = nickname.value,
connectionType = connectionType.value,
address = ipAddress.value,
hostCode = hostCode.value,
connectPort = connectPort.value.toInt(),
)
if (Netplay.join()) {
_showNetplayScreen.trySend(Unit)
}

View File

@@ -37,7 +37,7 @@ class NetplayViewModel : ViewModel() {
val hostInputAuthority = Netplay.hostInputAuthorityEnabled
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), false)
private val _maxBuffer = MutableStateFlow(Netplay.getClientBufferSize())
private val _maxBuffer = MutableStateFlow(Netplay.Settings.getClientBufferSize())
val maxBuffer = _maxBuffer.asStateFlow()
init {
@@ -57,7 +57,7 @@ class NetplayViewModel : ViewModel() {
fun setMaxBuffer(buffer: Int) {
_maxBuffer.value = buffer
Netplay.setClientBufferSize(buffer)
Netplay.Settings.setClientBufferSize(buffer)
Netplay.adjustPadBufferSize(buffer)
}