From 02c74d5867b51688a7c828f31bb374581ad1d7a8 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Tue, 1 May 2018 21:52:56 +0200 Subject: [PATCH] Improve reconnect handling Signed-off-by: Janne Koschinski <janne@kuschku.de> --- .../quasseldroid/service/QuasselService.kt | 11 ++--------- .../libquassel/session/SessionManager.kt | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 10 deletions(-) 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 afac73fae..f342635c8 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 83d3188ce..ea5edf291 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 -- GitLab