Fix crash during UP registration, #185
This commit is contained in:
parent
c55693f9cf
commit
1a9e271dbe
4 changed files with 21 additions and 11 deletions
|
@ -5,8 +5,8 @@ import android.content.Intent
|
||||||
import io.heckel.ntfy.R
|
import io.heckel.ntfy.R
|
||||||
import io.heckel.ntfy.app.Application
|
import io.heckel.ntfy.app.Application
|
||||||
import io.heckel.ntfy.db.Subscription
|
import io.heckel.ntfy.db.Subscription
|
||||||
import io.heckel.ntfy.util.Log
|
|
||||||
import io.heckel.ntfy.service.SubscriberServiceManager
|
import io.heckel.ntfy.service.SubscriberServiceManager
|
||||||
|
import io.heckel.ntfy.util.Log
|
||||||
import io.heckel.ntfy.util.randomString
|
import io.heckel.ntfy.util.randomString
|
||||||
import io.heckel.ntfy.util.topicUrlUp
|
import io.heckel.ntfy.util.topicUrlUp
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -40,7 +40,7 @@ class BroadcastReceiver : android.content.BroadcastReceiver() {
|
||||||
Log.d(TAG, "REGISTER received for app $appId (connectorToken=$connectorToken)")
|
Log.d(TAG, "REGISTER received for app $appId (connectorToken=$connectorToken)")
|
||||||
if (appId.isBlank()) {
|
if (appId.isBlank()) {
|
||||||
Log.w(TAG, "Refusing registration: Empty application")
|
Log.w(TAG, "Refusing registration: Empty application")
|
||||||
distributor.sendRegistrationRefused(appId, connectorToken)
|
distributor.sendRegistrationFailed(appId, connectorToken, "Empty application string")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
GlobalScope.launch(Dispatchers.IO) {
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
|
@ -52,7 +52,7 @@ class BroadcastReceiver : android.content.BroadcastReceiver() {
|
||||||
distributor.sendEndpoint(appId, connectorToken, endpoint)
|
distributor.sendEndpoint(appId, connectorToken, endpoint)
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Subscription with connectorToken $connectorToken exists for a different app. Refusing registration.")
|
Log.d(TAG, "Subscription with connectorToken $connectorToken exists for a different app. Refusing registration.")
|
||||||
distributor.sendRegistrationRefused(appId, connectorToken)
|
distributor.sendRegistrationFailed(appId, connectorToken, "Connector token already exists")
|
||||||
}
|
}
|
||||||
return@launch
|
return@launch
|
||||||
}
|
}
|
||||||
|
@ -74,11 +74,17 @@ class BroadcastReceiver : android.content.BroadcastReceiver() {
|
||||||
lastActive = Date().time/1000
|
lastActive = Date().time/1000
|
||||||
)
|
)
|
||||||
Log.d(TAG, "Adding subscription with for app $appId (connectorToken $connectorToken): $subscription")
|
Log.d(TAG, "Adding subscription with for app $appId (connectorToken $connectorToken): $subscription")
|
||||||
|
try {
|
||||||
|
// Note, this may fail due to a SQL constraint exception, see https://github.com/binwiederhier/ntfy/issues/185
|
||||||
repository.addSubscription(subscription)
|
repository.addSubscription(subscription)
|
||||||
distributor.sendEndpoint(appId, connectorToken, endpoint)
|
distributor.sendEndpoint(appId, connectorToken, endpoint)
|
||||||
|
|
||||||
// Refresh (and maybe start) foreground service
|
// Refresh (and maybe start) foreground service
|
||||||
SubscriberServiceManager.refresh(app)
|
SubscriberServiceManager.refresh(app)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.w(TAG, "Failed to add subscription", e)
|
||||||
|
distributor.sendRegistrationFailed(appId, connectorToken, e.message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ package io.heckel.ntfy.up
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const val ACTION_NEW_ENDPOINT = "org.unifiedpush.android.connector.NEW_ENDPOINT"
|
const val ACTION_NEW_ENDPOINT = "org.unifiedpush.android.connector.NEW_ENDPOINT"
|
||||||
const val ACTION_REGISTRATION_REFUSED = "org.unifiedpush.android.connector.REGISTRATION_REFUSED"
|
const val ACTION_REGISTRATION_FAILED = "org.unifiedpush.android.connector.REGISTRATION_FAILED"
|
||||||
const val ACTION_UNREGISTERED = "org.unifiedpush.android.connector.UNREGISTERED"
|
const val ACTION_UNREGISTERED = "org.unifiedpush.android.connector.UNREGISTERED"
|
||||||
const val ACTION_MESSAGE = "org.unifiedpush.android.connector.MESSAGE"
|
const val ACTION_MESSAGE = "org.unifiedpush.android.connector.MESSAGE"
|
||||||
|
|
||||||
|
|
|
@ -39,12 +39,15 @@ class Distributor(val context: Context) {
|
||||||
context.sendBroadcast(broadcastIntent)
|
context.sendBroadcast(broadcastIntent)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendRegistrationRefused(app: String, connectorToken: String) {
|
fun sendRegistrationFailed(app: String, connectorToken: String, message: String?) {
|
||||||
Log.d(TAG, "Sending REGISTRATION_REFUSED to $app (token=$connectorToken)")
|
Log.d(TAG, "Sending REGISTRATION_FAILED to $app (token=$connectorToken)")
|
||||||
val broadcastIntent = Intent()
|
val broadcastIntent = Intent()
|
||||||
broadcastIntent.`package` = app
|
broadcastIntent.`package` = app
|
||||||
broadcastIntent.action = ACTION_REGISTRATION_REFUSED
|
broadcastIntent.action = ACTION_REGISTRATION_FAILED
|
||||||
broadcastIntent.putExtra(EXTRA_TOKEN, connectorToken)
|
broadcastIntent.putExtra(EXTRA_TOKEN, connectorToken)
|
||||||
|
if (message != null) {
|
||||||
|
broadcastIntent.putExtra(EXTRA_MESSAGE, message)
|
||||||
|
}
|
||||||
context.sendBroadcast(broadcastIntent)
|
context.sendBroadcast(broadcastIntent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ Features:
|
||||||
|
|
||||||
Bugs:
|
Bugs:
|
||||||
* IllegalStateException: Failed to build unique file (#177, thanks to @Fallenbagel for reporting)
|
* IllegalStateException: Failed to build unique file (#177, thanks to @Fallenbagel for reporting)
|
||||||
|
* SQLiteConstraintException: Crash during UP registration (#185)
|
||||||
|
|
||||||
Thanks:
|
Thanks:
|
||||||
* Many thanks to @cmeis, @Fallenbagel, @J117 and @rogeliodh for input on the new attachment logic, and for
|
* Many thanks to @cmeis, @Fallenbagel, @J117 and @rogeliodh for input on the new attachment logic, and for
|
||||||
|
|
Loading…
Reference in a new issue