Avoids decrypting existing Nostr events just to add the relay into the relay list.

This commit is contained in:
Vitor Pamplona
2024-04-11 18:01:22 -04:00
parent 1553640c18
commit 6e31cff99c
2 changed files with 47 additions and 26 deletions
@@ -1607,7 +1607,7 @@ object LocalCache {
refreshObservers(note) refreshObservers(note)
} }
private fun consume( fun consume(
event: SealedGossipEvent, event: SealedGossipEvent,
relay: Relay?, relay: Relay?,
) { ) {
@@ -2114,7 +2114,7 @@ object LocalCache {
} }
} }
private fun consume( fun consume(
event: DraftEvent, event: DraftEvent,
relay: Relay?, relay: Relay?,
) { ) {
@@ -268,49 +268,70 @@ object NostrAccountDataSource : NostrDataSource("AccountData") {
// Avoid decrypting over and over again if the event already exist. // Avoid decrypting over and over again if the event already exist.
if (!event.isDeleted()) { if (!event.isDeleted()) {
val note = LocalCache.getNoteIfExists(event.id) val note = LocalCache.getAddressableNoteIfExists(event.addressTag())
if (note?.event != null && relay.brief in note.relays) return val noteEvent = note?.event
if (noteEvent != null) {
if (event.createdAt > noteEvent.createdAt() || relay.brief !in note.relays) {
LocalCache.consume(event, relay)
}
} else {
// decrypts
event.cachedDraft(account.signer) {}
// decrypts LocalCache.justConsume(event, relay)
event.cachedDraft(account.signer) {} }
LocalCache.justConsume(event, relay)
} }
} }
is GiftWrapEvent -> { is GiftWrapEvent -> {
// Avoid decrypting over and over again if the event already exist. // Avoid decrypting over and over again if the event already exist.
val note = LocalCache.getNoteIfExists(event.id) val note = LocalCache.getNoteIfExists(event.id)
if (note?.event != null && relay.brief in note.relays) return val noteEvent = note?.event as? GiftWrapEvent
if (noteEvent != null) {
event.cachedGift(account.signer) { this.consume(it, relay) } if (relay.brief !in note.relays) {
LocalCache.justConsume(noteEvent, relay)
LocalCache.justConsume(event, relay) noteEvent.cachedGift(account.signer) {
this.consume(it, relay)
}
}
} else {
// new event
event.cachedGift(account.signer) { this.consume(it, relay) }
LocalCache.justConsume(event, relay)
}
} }
is SealedGossipEvent -> { is SealedGossipEvent -> {
// Avoid decrypting over and over again if the event already exist. // Avoid decrypting over and over again if the event already exist.
val note = LocalCache.getNoteIfExists(event.id) val note = LocalCache.getNoteIfExists(event.id)
if (note?.event != null && relay.brief in note.relays) return val noteEvent = note?.event as? SealedGossipEvent
if (noteEvent != null) {
event.cachedGossip(account.signer) { LocalCache.justConsume(it, relay) } if (relay.brief !in note.relays) {
// adds the relay to seal and inner chat
LocalCache.justConsume(event, relay) LocalCache.consume(noteEvent, relay)
noteEvent.cachedGossip(account.signer) {
LocalCache.justConsume(it, relay)
}
}
} else {
// new event
event.cachedGossip(account.signer) { LocalCache.justConsume(it, relay) }
LocalCache.justConsume(event, relay)
}
} }
is LnZapEvent -> { is LnZapEvent -> {
// Avoid decrypting over and over again if the event already exist. // Avoid decrypting over and over again if the event already exist.
val note = LocalCache.getNoteIfExists(event.id) val note = LocalCache.getNoteIfExists(event.id)
if (note?.event == null) {
if (note?.event != null && relay.brief in note.relays) return event.zapRequest?.let {
if (it.isPrivateZap()) {
event.zapRequest?.let { it.decryptPrivateZap(account.signer) {}
if (it.isPrivateZap()) { }
it.decryptPrivateZap(account.signer) {}
} }
}
LocalCache.justConsume(event, relay) LocalCache.justConsume(event, relay)
}
} }
else -> { else -> {