From 3c52ff6e8d531ec258b97760a901e97cd3c3836a Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 30 Jan 2023 19:38:06 -0300 Subject: [PATCH] Tracks where notes are coming from --- .../java/com/vitorpamplona/amethyst/model/LocalCache.kt | 6 +++++- .../main/java/com/vitorpamplona/amethyst/model/Note.kt | 9 +++++++++ .../vitorpamplona/amethyst/service/NostrDataSource.kt | 2 +- .../com/vitorpamplona/amethyst/ui/note/NoteCompose.kt | 5 +---- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index 1edd45787..4f1766124 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -19,6 +19,7 @@ import java.time.ZoneId import java.time.format.DateTimeFormatter import java.util.Collections import java.util.concurrent.ConcurrentHashMap +import com.vitorpamplona.amethyst.service.relays.Relay import nostr.postr.events.ContactListEvent import nostr.postr.events.DeletionEvent import nostr.postr.events.Event @@ -94,9 +95,12 @@ object LocalCache { .format(DateTimeFormatter.ofPattern("uuuu MMM d hh:mm a")) } - fun consume(event: TextNoteEvent) { + fun consume(event: TextNoteEvent, relay: Relay? = null) { val note = getOrCreateNote(event.id.toHex()) + if (relay != null) + note.addRelay(relay) + // Already processed this event. if (note.event != null) return diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt index 883837d15..d5d03abab 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt @@ -16,6 +16,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import com.vitorpamplona.amethyst.service.relays.Relay import nostr.postr.events.Event class Note(val idHex: String) { @@ -39,6 +40,8 @@ class Note(val idHex: String) { var channel: Channel? = null + val relays = Collections.synchronizedSet(mutableSetOf()) + fun loadEvent(event: Event, author: User, mentions: List, replyTo: MutableList) { this.event = event this.author = author @@ -90,6 +93,11 @@ class Note(val idHex: String) { invalidateData(liveReactions) } + fun addRelay(relay: Relay) { + if (relays.add(relay)) + invalidateData(liveRelays) + } + fun addReport(note: Note) { if (reports.add(note)) invalidateData(liveReports) @@ -126,6 +134,7 @@ class Note(val idHex: String) { val liveBoosts: NoteLiveData = NoteLiveData(this) val liveReplies: NoteLiveData = NoteLiveData(this) val liveReports: NoteLiveData = NoteLiveData(this) + val liveRelays: NoteLiveData = NoteLiveData(this) // Refreshes observers in batches. var handlerWaiting = false diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt index f353a9e05..977d4cb71 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt @@ -57,7 +57,7 @@ abstract class NostrDataSource(val debugName: String) { try { when (event) { is MetadataEvent -> LocalCache.consume(event) - is TextNoteEvent -> LocalCache.consume(event) + is TextNoteEvent -> LocalCache.consume(event, relay) is RecommendRelayEvent -> LocalCache.consume(event) is ContactListEvent -> LocalCache.consume(event) is PrivateDmEvent -> LocalCache.consume(event) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index 5bb452767..0c2614e75 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -258,11 +258,8 @@ fun NoteCompose( RichTextViewer(eventContent, note.event?.tags, navController) } } - - - //if (note.event !is ChannelMessageEvent) { + ReactionsRow(note, accountViewModel) - //} Divider( modifier = Modifier.padding(top = 10.dp),