diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt index e615f8ac7ed7048666647d390927a7367440d995..bf557b57d9cfa2982521249acfb0eca543124018 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt @@ -291,7 +291,15 @@ class QuasselService : DaggerLifecycleService(), service?.apply { disconnect() sessionManager.connect( - clientData, trustManager, hostnameVerifier, address, user to pass, requireSsl, reconnect + SessionManager.ConnectionInfo( + clientData = clientData, + trustManager = trustManager, + hostnameVerifier = hostnameVerifier, + address = address, + userData = Pair(user, pass), + requireSsl = requireSsl, + shouldReconnect = reconnect + ) ) } } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt index c300b207f627738384ec2249fb6889e3c89ba960..27a4c6415a84135b099a5ea5edb009e3d60e24b8 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt @@ -56,12 +56,17 @@ class SessionManager( fun close() = session.or(lastSession).close() - private var lastClientData: ClientData? = null - private var lastTrustManager: X509TrustManager? = null - private var lastHostnameVerifier: HostnameVerifier? = null - private var lastAddress: SocketAddress? = null - private var lastUserData: Pair<String, String>? = null - private var lastShouldReconnect = false + data class ConnectionInfo( + val clientData: ClientData, + val trustManager: X509TrustManager, + val hostnameVerifier: HostnameVerifier, + val address: SocketAddress, + val userData: Pair<String, String>, + val requireSsl: Boolean, + val shouldReconnect: Boolean + ) + + private var lastConnectionInfo: ConnectionInfo? = null private var inProgressSession = BehaviorSubject.createDefault(ISession.NULL) private var lastSession: ISession = offlineSession @@ -111,31 +116,20 @@ class SessionManager( } fun connect( - clientData: ClientData, - trustManager: X509TrustManager, - hostnameVerifier: HostnameVerifier, - address: SocketAddress, - userData: Pair<String, String>, - requireSsl: Boolean, - shouldReconnect: Boolean = false + connectionInfo: ConnectionInfo ) { log(DEBUG, "SessionManager", "Connecting") inProgressSession.value.close() - lastClientData = clientData - lastTrustManager = trustManager - lastHostnameVerifier = hostnameVerifier - lastAddress = address - lastUserData = userData - lastShouldReconnect = shouldReconnect + lastConnectionInfo = connectionInfo hasErrored = false inProgressSession.onNext( Session( - address, - userData, - requireSsl, - trustManager, - hostnameVerifier, - clientData, + connectionInfo.address, + connectionInfo.userData, + connectionInfo.requireSsl, + connectionInfo.trustManager, + connectionInfo.hostnameVerifier, + connectionInfo.clientData, handlerService, heartBeatFactory, disconnectFromCore, @@ -173,15 +167,11 @@ class SessionManager( } fun reconnect(forceReconnect: Boolean = false) { - if (lastShouldReconnect || forceReconnect) { - val clientData = lastClientData - val trustManager = lastTrustManager - val hostnameVerifier = lastHostnameVerifier - val address = lastAddress - val userData = lastUserData - - if (clientData != null && trustManager != null && hostnameVerifier != null && address != null && userData != null) { - connect(clientData, trustManager, hostnameVerifier, address, userData, forceReconnect) + if (lastConnectionInfo?.shouldReconnect == true || forceReconnect) { + val connectionInfo = lastConnectionInfo + + if (connectionInfo != null) { + connect(connectionInfo) } else { log(INFO, "SessionManager", "Reconnect failed: not enough data available") }