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 afac73faee45b57b2795a2b14cf822fad46f5e33..f342635c8b1b92cff050872f2524f86833ed9120 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt @@ -338,15 +338,13 @@ class QuasselService : DaggerLifecycleService(), } }) - var wasEverConnected = false connectivity .delay(200, TimeUnit.MILLISECONDS) .throttleFirst(1, TimeUnit.SECONDS) .toLiveData() .observe(this, Observer { handlerService.backend { - if (wasEverConnected && !sessionManager.hasErrored) - sessionManager.reconnect(true) + sessionManager.autoReconnect(true) } }) @@ -358,12 +356,7 @@ class QuasselService : DaggerLifecycleService(), .observe( this, Observer { handlerService.backend { - if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) { - if (wasEverConnected && !sessionManager.hasErrored) - sessionManager.reconnect() - } else { - wasEverConnected = true - } + sessionManager.autoReconnect() } }) 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 83d3188ceac60b6ded1786af6edd996d60bec6b4..ea5edf2917433b0cef84ed45d25f55a01bea23a8 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt @@ -98,9 +98,17 @@ class SessionManager( Invokers } + fun ifClosed(closure: (ISession) -> Unit) { + state.or(ConnectionState.DISCONNECTED).let { + if (it == ConnectionState.CLOSED) { + closure(inProgressSession.value) + } + } + } + fun ifDisconnected(closure: (ISession) -> Unit) { state.or(ConnectionState.DISCONNECTED).let { - if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) { + if (it == ConnectionState.CLOSED || it == ConnectionState.DISCONNECTED) { closure(inProgressSession.value) } } @@ -138,6 +146,14 @@ class SessionManager( ) } + fun autoReconnect(forceReconnect: Boolean = false) { + if (!hasErrored) { + ifClosed { + reconnect(forceReconnect) + } + } + } + fun reconnect(forceReconnect: Boolean = false) { if (lastShouldReconnect || forceReconnect) { val clientData = lastClientData