diff --git a/app/src/main/kotlin/com/github/gotify/service/WebSocketConnection.kt b/app/src/main/kotlin/com/github/gotify/service/WebSocketConnection.kt
index b3e809c2..5c55b0be 100644
--- a/app/src/main/kotlin/com/github/gotify/service/WebSocketConnection.kt
+++ b/app/src/main/kotlin/com/github/gotify/service/WebSocketConnection.kt
@@ -38,8 +38,7 @@ internal class WebSocketConnection(
private lateinit var onMessageCallback: (Message) -> Unit
private lateinit var onClose: Runnable
private lateinit var onOpen: Runnable
- private lateinit var onBadRequest: BadRequestRunnable
- private lateinit var onNetworkFailure: OnNetworkFailureRunnable
+ private lateinit var onFailure: OnNetworkFailureRunnable
private lateinit var onReconnected: Runnable
private var state: State? = null
@@ -71,14 +70,8 @@ internal class WebSocketConnection(
}
@Synchronized
- fun onBadRequest(onBadRequest: BadRequestRunnable): WebSocketConnection {
- this.onBadRequest = onBadRequest
- return this
- }
-
- @Synchronized
- fun onNetworkFailure(onNetworkFailure: OnNetworkFailureRunnable): WebSocketConnection {
- this.onNetworkFailure = onNetworkFailure
+ fun onFailure(onFailure: OnNetworkFailureRunnable): WebSocketConnection {
+ this.onFailure = onFailure
return this
}
@@ -192,15 +185,11 @@ internal class WebSocketConnection(
Logger.error(t) { "WebSocket($id): failure $code Message: $message" }
syncExec(id) {
closed()
- if (response != null && response.code >= 400 && response.code <= 499) {
- onBadRequest.execute(message)
- return@syncExec
- }
errorCount++
val minutes = (errorCount * 2 - 1).coerceAtMost(20)
- onNetworkFailure.execute(minutes)
+ onFailure.execute(response?.message ?: "unreachable", minutes)
scheduleReconnect(TimeUnit.MINUTES.toSeconds(minutes.toLong()))
}
super.onFailure(webSocket, t, response)
@@ -214,12 +203,8 @@ internal class WebSocketConnection(
}
}
- internal fun interface BadRequestRunnable {
- fun execute(message: String)
- }
-
internal fun interface OnNetworkFailureRunnable {
- fun execute(minutes: Int)
+ fun execute(status: String, minutes: Int)
}
internal enum class State {
diff --git a/app/src/main/kotlin/com/github/gotify/service/WebSocketService.kt b/app/src/main/kotlin/com/github/gotify/service/WebSocketService.kt
index 7ad0078c..3bfc6984 100644
--- a/app/src/main/kotlin/com/github/gotify/service/WebSocketService.kt
+++ b/app/src/main/kotlin/com/github/gotify/service/WebSocketService.kt
@@ -111,8 +111,7 @@ internal class WebSocketService : Service() {
)
.onOpen { onOpen() }
.onClose { onClose() }
- .onBadRequest { message -> onBadRequest(message) }
- .onNetworkFailure { minutes -> onNetworkFailure(minutes) }
+ .onFailure { status, minutes -> onFailure(status, minutes) }
.onMessage { message -> onMessage(message) }
.onReconnected { notifyMissedNotifications() }
.start()
@@ -179,16 +178,12 @@ internal class WebSocketService : Service() {
connection!!.scheduleReconnect(15)
}
- private fun onBadRequest(message: String) {
- showForegroundNotification(getString(R.string.websocket_could_not_connect), message)
- }
-
- private fun onNetworkFailure(minutes: Int) {
- val status = getString(R.string.websocket_not_connected)
+ private fun onFailure(status: String, minutes: Int) {
+ val title = getString(R.string.websocket_error, status)
val intervalUnit = resources
.getQuantityString(R.plurals.websocket_retry_interval, minutes, minutes)
showForegroundNotification(
- status,
+ title,
"${getString(R.string.websocket_reconnect)} $intervalUnit"
)
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 206fcbd3..d0e4e2c4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -64,7 +64,6 @@
Missed messages
New Messages
Connected
- Could not connect
Initializing
gotify/android v%1$s; gotify/server v%2$s
Advanced Settings
@@ -112,7 +111,7 @@
Open
Cancel
- Not connected
+ Error %s (see logs)
Trying to reconnect
- in %d minute