diff --git a/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2.kt b/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2.kt index cd796bb5d9..bd89464bc4 100644 --- a/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2.kt +++ b/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2.kt @@ -11,14 +11,11 @@ import com.unciv.logic.multiplayer.storage.ApiV2FileStorageWrapper import com.unciv.logic.multiplayer.storage.MultiplayerFileNotFoundException import com.unciv.utils.Concurrency import com.unciv.utils.Log -import io.ktor.client.call.body -import io.ktor.client.plugins.websocket.ClientWebSocketSession -import io.ktor.client.request.get -import io.ktor.http.isSuccess -import io.ktor.websocket.Frame -import io.ktor.websocket.FrameType -import io.ktor.websocket.close -import io.ktor.websocket.readText +import io.ktor.client.call.* +import io.ktor.client.plugins.websocket.* +import io.ktor.client.request.* +import io.ktor.http.* +import io.ktor.websocket.* import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Job import kotlinx.coroutines.cancel @@ -35,6 +32,7 @@ import java.time.Instant import java.util.Random import java.util.UUID import java.util.concurrent.atomic.AtomicReference +import kotlin.collections.set /** * Main class to interact with multiplayer servers implementing [ApiVersion.ApiV2] @@ -569,7 +567,7 @@ class ApiV2(private val baseUrl: String) : ApiV2Wrapper(baseUrl), Disposable { } val success = auth.login( UncivGame.Current.settings.multiplayer.userName, - UncivGame.Current.settings.multiplayer.passwords[UncivGame.Current.onlineMultiplayer.multiplayerServer.serverUrl] ?: "", + UncivGame.Current.settings.multiplayer.passwords[UncivGame.Current.onlineMultiplayer.multiplayerServer.getServerUrl()] ?: "", suppress = true ) if (success) { diff --git a/core/src/com/unciv/logic/multiplayer/storage/OnlineMultiplayerServer.kt b/core/src/com/unciv/logic/multiplayer/storage/OnlineMultiplayerServer.kt index 98e9975b94..2ff1facc8e 100644 --- a/core/src/com/unciv/logic/multiplayer/storage/OnlineMultiplayerServer.kt +++ b/core/src/com/unciv/logic/multiplayer/storage/OnlineMultiplayerServer.kt @@ -20,11 +20,11 @@ import com.unciv.logic.multiplayer.ServerFeatureSet */ @Suppress("RedundantSuspendModifier") // Methods can take a long time, so force users to use them in a coroutine to not get ANRs on Android class OnlineMultiplayerServer( - fileStorageIdentifier: String? = null, + val fileStorageIdentifier: String? = null, private var authenticationHeader: Map? = null ) { internal var featureSet = ServerFeatureSet() - val serverUrl = fileStorageIdentifier ?: UncivGame.Current.settings.multiplayer.server + fun getServerUrl() = fileStorageIdentifier ?: UncivGame.Current.settings.multiplayer.server fun fileStorage(): FileStorage { val authHeader = if (authenticationHeader == null) { @@ -32,9 +32,9 @@ class OnlineMultiplayerServer( mapOf("Authorization" to settings.getAuthHeader()) } else authenticationHeader - return if (serverUrl == Constants.dropboxMultiplayerServer) DropBox + return if (getServerUrl() == Constants.dropboxMultiplayerServer) DropBox else UncivServerFileStorage.apply { - serverUrl = this@OnlineMultiplayerServer.serverUrl + serverUrl = this@OnlineMultiplayerServer.getServerUrl() this.authHeader = authHeader } } @@ -45,7 +45,7 @@ class OnlineMultiplayerServer( */ fun checkServerStatus(): Boolean { var statusOk = false - SimpleHttp.sendGetRequest("${serverUrl}/isalive") { success, result, _ -> + SimpleHttp.sendGetRequest("${getServerUrl()}/isalive") { success, result, _ -> statusOk = success if (result.isNotEmpty()) { featureSet = try { diff --git a/core/src/com/unciv/ui/popups/options/MultiplayerTab.kt b/core/src/com/unciv/ui/popups/options/MultiplayerTab.kt index 4842b44c05..968dbebec0 100644 --- a/core/src/com/unciv/ui/popups/options/MultiplayerTab.kt +++ b/core/src/com/unciv/ui/popups/options/MultiplayerTab.kt @@ -17,11 +17,11 @@ import com.unciv.ui.components.extensions.addSeparator import com.unciv.ui.components.extensions.brighten import com.unciv.ui.components.extensions.format import com.unciv.ui.components.extensions.isEnabled -import com.unciv.ui.components.input.onChange -import com.unciv.ui.components.input.onClick import com.unciv.ui.components.extensions.toGdxArray import com.unciv.ui.components.extensions.toLabel import com.unciv.ui.components.extensions.toTextButton +import com.unciv.ui.components.input.onChange +import com.unciv.ui.components.input.onClick import com.unciv.ui.popups.AuthPopup import com.unciv.ui.popups.Popup import com.unciv.ui.popups.options.SettingsSelect.SelectItem @@ -151,18 +151,14 @@ private fun addMultiplayerServerOptions( multiplayerServerTextField.text = Gdx.app.clipboard.contents }).colspan(2).row() multiplayerServerTextField.onChange { + fixTextFieldUrlOnType(multiplayerServerTextField) + // we can't trim on 'fixTextFieldUrlOnType' for reasons + settings.multiplayer.server = multiplayerServerTextField.text.trimEnd('/') + val isCustomServer = OnlineMultiplayer.usesCustomServer() connectionToServerButton.isEnabled = isCustomServer for (refreshSelect in toUpdate) refreshSelect.update(isCustomServer) - - if (isCustomServer) { - fixTextFieldUrlOnType(multiplayerServerTextField) - // we can't trim on 'fixTextFieldUrlOnType' for reasons - settings.multiplayer.server = multiplayerServerTextField.text.trimEnd('/') - } else { - settings.multiplayer.server = multiplayerServerTextField.text - } } serverIpTable.add(multiplayerServerTextField)