Fixes missing notifications
This commit is contained in:
@@ -2330,7 +2330,14 @@ object LocalCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun hasConsumed(notificationEvent: Event): Boolean {
|
fun hasConsumed(notificationEvent: Event): Boolean {
|
||||||
return notes.containsKey(notificationEvent.id)
|
return if (notificationEvent is AddressableEvent) {
|
||||||
|
val note = addressables.get(notificationEvent.addressTag())
|
||||||
|
val noteEvent = note?.event
|
||||||
|
noteEvent != null && notificationEvent.createdAt <= noteEvent.createdAt()
|
||||||
|
} else {
|
||||||
|
val note = notes.get(notificationEvent.id)
|
||||||
|
note?.event != null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-5
@@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.service.notifications
|
|||||||
|
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.util.Log
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.vitorpamplona.amethyst.LocalPreferences
|
import com.vitorpamplona.amethyst.LocalPreferences
|
||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
@@ -45,6 +46,7 @@ import java.math.BigDecimal
|
|||||||
|
|
||||||
class EventNotificationConsumer(private val applicationContext: Context) {
|
class EventNotificationConsumer(private val applicationContext: Context) {
|
||||||
suspend fun consume(event: GiftWrapEvent) {
|
suspend fun consume(event: GiftWrapEvent) {
|
||||||
|
Log.d("EventNotificationConsumer", "New Notification Arrived")
|
||||||
if (!LocalCache.justVerify(event)) return
|
if (!LocalCache.justVerify(event)) return
|
||||||
if (!notificationManager().areNotificationsEnabled()) return
|
if (!notificationManager().areNotificationsEnabled()) return
|
||||||
|
|
||||||
@@ -64,14 +66,23 @@ class EventNotificationConsumer(private val applicationContext: Context) {
|
|||||||
account: Account,
|
account: Account,
|
||||||
) {
|
) {
|
||||||
pushWrappedEvent.cachedGift(account.signer) { notificationEvent ->
|
pushWrappedEvent.cachedGift(account.signer) { notificationEvent ->
|
||||||
if (!LocalCache.hasConsumed(notificationEvent) && LocalCache.justVerify(notificationEvent)) {
|
val consumed = LocalCache.hasConsumed(notificationEvent)
|
||||||
|
val verified = LocalCache.justVerify(notificationEvent)
|
||||||
|
Log.d("EventNotificationConsumer", "New Notification Arrived for ${account.userProfile().toBestDisplayName()} consumed= $consumed && verified= $verified")
|
||||||
|
if (!consumed && verified) {
|
||||||
|
Log.d("EventNotificationConsumer", "New Notification was verified")
|
||||||
unwrapAndConsume(notificationEvent, account) { innerEvent ->
|
unwrapAndConsume(notificationEvent, account) { innerEvent ->
|
||||||
if (!LocalCache.hasConsumed(innerEvent)) {
|
|
||||||
|
Log.d("EventNotificationConsumer", "Unwrapped consume $consumed ${innerEvent.javaClass.simpleName}")
|
||||||
|
if (!consumed) {
|
||||||
if (innerEvent is PrivateDmEvent) {
|
if (innerEvent is PrivateDmEvent) {
|
||||||
|
Log.d("EventNotificationConsumer", "New Nip-04 DM to Notify")
|
||||||
notify(innerEvent, account)
|
notify(innerEvent, account)
|
||||||
} else if (innerEvent is LnZapEvent) {
|
} else if (innerEvent is LnZapEvent) {
|
||||||
|
Log.d("EventNotificationConsumer", "New Zap to Notify")
|
||||||
notify(innerEvent, account)
|
notify(innerEvent, account)
|
||||||
} else if (innerEvent is ChatMessageEvent) {
|
} else if (innerEvent is ChatMessageEvent) {
|
||||||
|
Log.d("EventNotificationConsumer", "New ChatMessage to Notify")
|
||||||
notify(innerEvent, account)
|
notify(innerEvent, account)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,6 +97,7 @@ class EventNotificationConsumer(private val applicationContext: Context) {
|
|||||||
onReady: (Event) -> Unit,
|
onReady: (Event) -> Unit,
|
||||||
) {
|
) {
|
||||||
if (!LocalCache.justVerify(event)) return
|
if (!LocalCache.justVerify(event)) return
|
||||||
|
if (LocalCache.hasConsumed(event)) return
|
||||||
|
|
||||||
when (event) {
|
when (event) {
|
||||||
is GiftWrapEvent -> {
|
is GiftWrapEvent -> {
|
||||||
@@ -93,9 +105,11 @@ class EventNotificationConsumer(private val applicationContext: Context) {
|
|||||||
}
|
}
|
||||||
is SealedGossipEvent -> {
|
is SealedGossipEvent -> {
|
||||||
event.cachedGossip(account.signer) {
|
event.cachedGossip(account.signer) {
|
||||||
// this is not verifiable
|
if (!LocalCache.hasConsumed(it)) {
|
||||||
LocalCache.justConsume(it, null)
|
// this is not verifiable
|
||||||
onReady(it)
|
LocalCache.justConsume(it, null)
|
||||||
|
onReady(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user