From f73052ed488ac36a519541e6960301a13e612498 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 21 May 2024 15:56:51 -0400 Subject: [PATCH] Checks cache before making a new request to DVM --- .../ui/screen/loggedIn/AccountViewModel.kt | 15 +++++++++++++++ .../loggedIn/NIP90ContentDiscoveryScreen.kt | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt index cd31b9071..b214b1e0a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt @@ -48,6 +48,7 @@ import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.UrlCachedPreviewer import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.UserState +import com.vitorpamplona.amethyst.model.observables.CreatedAtComparator import com.vitorpamplona.amethyst.model.observables.LatestByKindWithETag import com.vitorpamplona.amethyst.service.CashuProcessor import com.vitorpamplona.amethyst.service.CashuToken @@ -81,6 +82,7 @@ import com.vitorpamplona.quartz.events.EventInterface import com.vitorpamplona.quartz.events.GiftWrapEvent import com.vitorpamplona.quartz.events.LnZapEvent import com.vitorpamplona.quartz.events.LnZapRequestEvent +import com.vitorpamplona.quartz.events.NIP90ContentDiscoveryRequestEvent import com.vitorpamplona.quartz.events.Participant import com.vitorpamplona.quartz.events.ReportEvent import com.vitorpamplona.quartz.events.Response @@ -1354,6 +1356,19 @@ class AccountViewModel(val account: Account, val settings: SettingsState) : View } } + suspend fun cachedDVMContentDiscovery(pubkeyHex: String): Note? { + val fifteenMinsAgo = TimeUtils.fifteenMinutesAgo() + return LocalCache.notes.maxOrNullOf( + filter = { key, note -> + val noteEvent = note.event + noteEvent is NIP90ContentDiscoveryRequestEvent && + noteEvent.isTaggedUser(pubkeyHex) && + noteEvent.createdAt > fifteenMinsAgo + }, + comparator = CreatedAtComparator, + ) + } + fun sendZapPaymentRequestFor( bolt11: String, zappedNote: Note?, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt index 1ef99181b..b80867e49 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NIP90ContentDiscoveryScreen.kt @@ -142,7 +142,12 @@ fun NIP90ContentDiscoveryScreen( } LaunchedEffect(key1 = appDefinition) { - onRefresh() + val existingResult = accountViewModel.cachedDVMContentDiscovery(noteAuthor.pubkeyHex) + if (existingResult == null) { + onRefresh() + } else { + requestEventID = existingResult + } } RefresheableBox(