From 182ac5de077789b9ec89ff86bbb652efb6971621 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 19 Feb 2023 15:37:12 -0500 Subject: [PATCH] Changes the follower calculation to only store when important to the user. --- .../amethyst/model/LocalCache.kt | 50 +++++++++---------- .../com/vitorpamplona/amethyst/model/User.kt | 4 +- 2 files changed, 27 insertions(+), 27 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 c6028699b..1a446d3ae 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -16,14 +16,13 @@ import com.vitorpamplona.amethyst.service.model.LnZapRequestEvent import com.vitorpamplona.amethyst.service.model.ReactionEvent import com.vitorpamplona.amethyst.service.model.ReportEvent import com.vitorpamplona.amethyst.service.model.RepostEvent +import com.vitorpamplona.amethyst.service.relays.Relay +import fr.acinq.secp256k1.Hex import java.io.ByteArrayInputStream import java.time.Instant 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 fr.acinq.secp256k1.Hex import java.util.concurrent.atomic.AtomicBoolean import kotlin.time.ExperimentalTime import kotlin.time.measureTimedValue @@ -42,7 +41,6 @@ import nostr.postr.events.PrivateDmEvent import nostr.postr.events.RecommendRelayEvent import nostr.postr.events.TextNoteEvent import nostr.postr.toHex -import nostr.postr.toNpub object LocalCache { @@ -198,29 +196,27 @@ object LocalCache { //Log.d("RR", event.toJson()) } - @OptIn(ExperimentalTime::class) fun consume(event: ContactListEvent) { val user = getOrCreateUser(event.pubKey.toHexKey()) if (event.createdAt > user.updatedFollowsAt) { - val (value, elapsed) = measureTimedValue { - user.updateFollows( - event.follows.map { - try { - val pubKey = decodePublicKey(it.pubKeyHex) - getOrCreateUser(pubKey.toHexKey()) - } catch (e: Exception) { - println("Could not parse Hex key: ${it.pubKeyHex}") - println("UpdateFollows: " + event.toJson()) - e.printStackTrace() - null - } - }.filterNotNull().toSet(), - event.createdAt - ) - } + user.updateFollows( + event.follows.map { + try { + val pubKey = decodePublicKey(it.pubKeyHex) + getOrCreateUser(pubKey.toHexKey()) + } catch (e: Exception) { + println("Could not parse Hex key: ${it.pubKeyHex}") + println("UpdateFollows: " + event.toJson()) + e.printStackTrace() + null + } + }.filterNotNull().toSet(), + event.createdAt + ) - val (valueRelays, elapsedRelays) = measureTimedValue { + // Saves relay list only if it's a user that is currently been seen + if (user.liveSet?.isInUse() == true) { try { if (event.content.isNotEmpty()) { val relays: Map = @@ -234,11 +230,15 @@ object LocalCache { } catch (e: Exception) { e.printStackTrace() } + + // Saves relay list only if it's a user that is currently been seen + user.latestContactList = event } - Log.d("CL", "AAA ${user.toBestDisplayName()} ${event.follows.size} in ${elapsed} and \t${elapsedRelays}") - - user.latestContactList = event + Log.d( + "CL", + "AAA ${user.toBestDisplayName()} ${event.follows.size}" + ) } } 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 5cfdf0b66..776d3c7fe 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -92,7 +92,7 @@ class User(val pubkeyHex: String) { fun follow(users: Set, followedAt: Long) { follows = follows + users users.forEach { - if (this !in it.followers) { + if (this !in it.followers && it.liveSet?.isInUse() == true) { it.followers = it.followers + this it.liveSet?.follows?.invalidateData() } @@ -104,7 +104,7 @@ class User(val pubkeyHex: String) { fun unfollow(users: Set) { follows = follows - users users.forEach { - if (this in it.followers) { + if (this in it.followers && it.liveSet?.isInUse() == true) { it.followers = it.followers - this it.liveSet?.follows?.invalidateData() }