From f580fdd216a8fb2be9edaafbeebbc5749921baeb Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 14 Jan 2023 10:16:36 -0500 Subject: [PATCH] Storing and Counting followers of the main account. --- .../com/vitorpamplona/amethyst/model/User.kt | 23 ++++++++++++++++--- .../service/NostrSingleEventDataSource.kt | 6 +++++ .../amethyst/ui/navigation/DrawerContent.kt | 4 ++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt index d5bd240ce..abd286cd9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -18,7 +18,7 @@ class User(val pubkey: ByteArray) { val follows = Collections.synchronizedSet(mutableSetOf()) val taggedPosts = Collections.synchronizedSet(mutableSetOf()) - var follower: Number? = null + val followers = Collections.synchronizedSet(mutableSetOf()) fun toBestDisplayName(): String { return bestDisplayName() ?: bestUsername() ?: pubkeyDisplayHex @@ -37,9 +37,26 @@ class User(val pubkey: ByteArray) { return info.picture ?: "https://robohash.org/${pubkeyHex}.png" } + fun follow(user: User) { + follows.add(user) + user.followers.add(this) + } + fun unfollow(user: User) { + follows.remove(user) + user.followers.remove(this) + } + fun updateFollows(newFollows: List, updateAt: Long) { - follows.clear() - follows.addAll(newFollows) + val toBeAdded = newFollows - follows + val toBeRemoved = follows - newFollows + + toBeAdded.forEach { + follow(it) + } + toBeRemoved.forEach { + unfollow(it) + } + updatedFollowsAt = updateAt live.refresh() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt index d3811a1db..94dec5b7e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleEventDataSource.kt @@ -2,8 +2,11 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note +import com.vitorpamplona.amethyst.service.model.ReactionEvent +import com.vitorpamplona.amethyst.service.model.RepostEvent import java.util.Collections import nostr.postr.JsonFilter +import nostr.postr.events.TextNoteEvent object NostrSingleEventDataSource: NostrDataSource("SingleEventFeed") { val eventsToWatch = Collections.synchronizedList(mutableListOf()) @@ -15,7 +18,9 @@ object NostrSingleEventDataSource: NostrDataSource("SingleEventFeed") { return null } + // downloads all the reactions to a given event. return JsonFilter( + kinds = listOf(TextNoteEvent.kind, ReactionEvent.kind, RepostEvent.kind), tags = mapOf("e" to reactionsToWatch) ) } @@ -39,6 +44,7 @@ object NostrSingleEventDataSource: NostrDataSource("SingleEventFeed") { return null } + // downloads linked events to this event. return JsonFilter( ids = interestedEvents ) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index a7cb86972..ee31f1af8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -118,11 +118,11 @@ fun ProfileContent(accountUser: User?, modifier: Modifier = Modifier) { Text(" @${accountUser?.bestUsername()}", color = Color.LightGray) Row(modifier = Modifier.padding(top = 15.dp)) { Row() { - Text("${accountUser?.follows?.size}", fontWeight = FontWeight.Bold) + Text("${accountUser?.follows?.size ?: "--"}", fontWeight = FontWeight.Bold) Text(" Following") } Row(modifier = Modifier.padding(start = 10.dp)) { - Text("${accountUser?.follower ?: "--"}", fontWeight = FontWeight.Bold) + Text("${accountUser?.followers?.size ?: "--"}", fontWeight = FontWeight.Bold) Text(" Followers") } }