Assigns the first relay when a gift-wrapped message is received
This commit is contained in:
@@ -1850,7 +1850,6 @@ object LocalCache : ILocalCache {
|
|||||||
val author = getOrCreateUser(event.pubKey)
|
val author = getOrCreateUser(event.pubKey)
|
||||||
|
|
||||||
if (relay != null) {
|
if (relay != null) {
|
||||||
author.addRelayBeingUsed(relay, event.createdAt)
|
|
||||||
note.addRelay(relay)
|
note.addRelay(relay)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2803,6 +2802,16 @@ object LocalCache : ILocalCache {
|
|||||||
toNote.addRelay(it)
|
toNote.addRelay(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun copyRelaysFromTo(
|
||||||
|
from: Note,
|
||||||
|
to: HexKey,
|
||||||
|
) {
|
||||||
|
val toNote = getOrCreateNote(to)
|
||||||
|
from.relays.forEach {
|
||||||
|
toNote.addRelay(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
|
|||||||
+3
-18
@@ -26,8 +26,6 @@ import com.vitorpamplona.ammolite.relays.RelayBriefInfoCache
|
|||||||
import com.vitorpamplona.ammolite.relays.datasources.EventCollector
|
import com.vitorpamplona.ammolite.relays.datasources.EventCollector
|
||||||
import com.vitorpamplona.ammolite.relays.datasources.RelayInsertConfirmationCollector
|
import com.vitorpamplona.ammolite.relays.datasources.RelayInsertConfirmationCollector
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||||
import com.vitorpamplona.quartz.nip59Giftwrap.seals.SealedRumorEvent
|
|
||||||
import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent
|
|
||||||
|
|
||||||
class CacheClientConnector(
|
class CacheClientConnector(
|
||||||
val client: NostrClient,
|
val client: NostrClient,
|
||||||
@@ -41,7 +39,7 @@ class CacheClientConnector(
|
|||||||
val confirmationWatcher =
|
val confirmationWatcher =
|
||||||
RelayInsertConfirmationCollector(client) { eventId, relay ->
|
RelayInsertConfirmationCollector(client) { eventId, relay ->
|
||||||
cache.markAsSeen(eventId, relay.brief)
|
cache.markAsSeen(eventId, relay.brief)
|
||||||
unwrapAndMarkAsSeen(eventId, relay.brief)
|
markAsSeen(eventId, relay.brief)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun destroy() {
|
fun destroy() {
|
||||||
@@ -49,25 +47,12 @@ class CacheClientConnector(
|
|||||||
confirmationWatcher.destroy()
|
confirmationWatcher.destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun unwrapAndMarkAsSeen(
|
private fun markAsSeen(
|
||||||
eventId: HexKey,
|
eventId: HexKey,
|
||||||
relay: RelayBriefInfoCache.RelayBriefInfo,
|
relay: RelayBriefInfoCache.RelayBriefInfo,
|
||||||
) {
|
) {
|
||||||
val note = LocalCache.getNoteIfExists(eventId)
|
val note = LocalCache.getNoteIfExists(eventId)
|
||||||
|
|
||||||
if (note != null) {
|
note?.addRelay(relay)
|
||||||
note.addRelay(relay)
|
|
||||||
|
|
||||||
val noteEvent = note.event
|
|
||||||
if (noteEvent is GiftWrapEvent) {
|
|
||||||
noteEvent.innerEventId?.let {
|
|
||||||
unwrapAndMarkAsSeen(it, relay)
|
|
||||||
}
|
|
||||||
} else if (noteEvent is SealedRumorEvent) {
|
|
||||||
noteEvent.innerEventId?.let {
|
|
||||||
unwrapAndMarkAsSeen(it, relay)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+23
-6
@@ -42,7 +42,11 @@ class PrecacheNewNotesProcessor(
|
|||||||
fun consume(note: Note) {
|
fun consume(note: Note) {
|
||||||
val noteEvent = note.event
|
val noteEvent = note.event
|
||||||
if (noteEvent != null) {
|
if (noteEvent != null) {
|
||||||
consumeAlreadyVerified(noteEvent, note)
|
try {
|
||||||
|
consumeAlreadyVerified(noteEvent, note)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("PrecacheNewNotesProcessor", "Error processing note", e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,22 +74,35 @@ class PrecacheNewNotesProcessor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
is GiftWrapEvent -> {
|
is GiftWrapEvent -> {
|
||||||
if (event.innerEventId == null) {
|
if (event.recipientPubKey() == account.signer.pubKey) {
|
||||||
if (event.recipientPubKey() == account.signer.pubKey) {
|
val inner = event.innerEventId
|
||||||
|
if (inner == null) {
|
||||||
event.unwrap(account.signer) {
|
event.unwrap(account.signer) {
|
||||||
cache.verifyAndConsume(it, null)
|
if (cache.justVerify(it)) {
|
||||||
cache.copyRelaysFromTo(note, it)
|
cache.justConsume(it, null)
|
||||||
|
cache.copyRelaysFromTo(note, it)
|
||||||
|
consumeAlreadyVerified(it, note)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cache.copyRelaysFromTo(note, inner)
|
||||||
|
val event = cache.getOrCreateNote(inner).event
|
||||||
|
if (event != null) {
|
||||||
|
consumeAlreadyVerified(event, note)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is SealedRumorEvent -> {
|
is SealedRumorEvent -> {
|
||||||
if (event.innerEventId == null) {
|
val inner = event.innerEventId
|
||||||
|
if (inner == null) {
|
||||||
event.unseal(account.signer) {
|
event.unseal(account.signer) {
|
||||||
cache.justConsume(it, null)
|
cache.justConsume(it, null)
|
||||||
cache.copyRelaysFromTo(note, it)
|
cache.copyRelaysFromTo(note, it)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
cache.copyRelaysFromTo(note, inner)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user