diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt index 3b3301f60..ca70015c8 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt @@ -141,10 +141,10 @@ fun debugState(context: Context) { LocalCache.addressables .sumByGroup(groupMap = { _, it -> it.event?.kind }, sumOf = { _, it -> it.event?.countMemory() ?: 0L }) - qttNotes.toList().sortedByDescending { bytesNotes.get(it.first) }.forEach { (kind, qtt) -> + qttNotes.toList().sortedByDescending { bytesNotes[it.first] }.forEach { (kind, qtt) -> Log.d("STATE DUMP", "Kind ${kind.toString().padStart(5,' ')}:\t${qtt.toString().padStart(6,' ')} elements\t${bytesNotes.get(kind)?.div((1024 * 1024))}MB ") } - qttAddressables.toList().sortedByDescending { bytesNotes.get(it.first) }.forEach { (kind, qtt) -> + qttAddressables.toList().sortedByDescending { bytesNotes[it.first] }.forEach { (kind, qtt) -> Log.d("STATE DUMP", "Kind ${kind.toString().padStart(5,' ')}:\t${qtt.toString().padStart(6,' ')} elements\t${bytesAddressables.get(kind)?.div((1024 * 1024))}MB ") } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/BaseEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/BaseEoseManager.kt index f90d643bd..ac84ed46e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/BaseEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/BaseEoseManager.kt @@ -25,17 +25,29 @@ import com.vitorpamplona.amethyst.isDebug import com.vitorpamplona.ammolite.relays.BundledUpdate import com.vitorpamplona.ammolite.relays.datasources.SubscriptionController import com.vitorpamplona.quartz.nip01Core.relay.client.NostrClient +import com.vitorpamplona.quartz.nip01Core.relay.client.single.newSubId +import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl import kotlinx.coroutines.Dispatchers abstract class BaseEoseManager( val client: NostrClient, val allKeys: () -> Set, ) { - val orchestrator = SubscriptionController(client) + protected val logTag: String = this.javaClass.simpleName + + private val orchestrator = SubscriptionController(client) abstract fun updateSubscriptions(keys: Set) - fun printStats() = orchestrator.printStats(this.javaClass.simpleName) + fun printStats() = orchestrator.printStats(logTag) + + fun newSubscriptionId() = if (isDebug) logTag + newSubId() else newSubId() + + fun getSubscription(subId: String) = orchestrator.getSub(subId) + + fun requestNewSubscription(onEOSE: ((Long, NormalizedRelayUrl) -> Unit)? = null) = orchestrator.requestNewSubscription(newSubscriptionId(), onEOSE) + + fun dismissSubscription(subId: String) = orchestrator.dismissSubscription(subId) // Refreshes observers in batches. private val bundler = BundledUpdate(300, Dispatchers.Default) @@ -56,7 +68,7 @@ abstract class BaseEoseManager( bundler.cancel() orchestrator.destroy() if (isDebug) { - Log.d("${this.javaClass.simpleName}", "Destroy, Unsubscribe") + Log.d(logTag, "Destroy, Unsubscribe") } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUniqueIdEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUniqueIdEoseManager.kt index 2a9f0169b..045d6c902 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUniqueIdEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUniqueIdEoseManager.kt @@ -62,7 +62,7 @@ abstract class PerUniqueIdEoseManager( } open fun newSub(key: T): Subscription = - orchestrator.requestNewSubscription { time, relayUrl -> + requestNewSubscription { time, relayUrl -> newEose(key, relayUrl, time) } @@ -70,7 +70,7 @@ abstract class PerUniqueIdEoseManager( key: String, subId: String, ) { - orchestrator.dismissSubscription(subId) + dismissSubscription(subId) userSubscriptionMap.remove(key) } @@ -80,7 +80,7 @@ abstract class PerUniqueIdEoseManager( return if (subId == null) { newSub(key).also { userSubscriptionMap[id] = it.id } } else { - orchestrator.getSub(subId) ?: newSub(key).also { userSubscriptionMap[id] = it.id } + getSubscription(subId) ?: newSub(key).also { userSubscriptionMap[id] = it.id } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserAndFollowListEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserAndFollowListEoseManager.kt index 948060682..26e1a72e6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserAndFollowListEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserAndFollowListEoseManager.kt @@ -28,6 +28,7 @@ import com.vitorpamplona.quartz.nip01Core.relay.client.NostrClient import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter import com.vitorpamplona.quartz.nip01Core.relay.client.pool.groupByRelay import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl +import kotlin.collections.distinctBy /** * This query type creates a new relay subscription for every logged-in @@ -57,7 +58,7 @@ abstract class PerUserAndFollowListEoseManager( ) = latestEOSEs.newEose(user(key), list(key), relay, time) open fun newSub(key: T): Subscription = - orchestrator.requestNewSubscription { time, relayUrl -> + requestNewSubscription { time, relayUrl -> newEose(key, relayUrl, time) if (invalidateAfterEose) { invalidateFilters() @@ -68,7 +69,7 @@ abstract class PerUserAndFollowListEoseManager( key: User, subId: String, ) { - orchestrator.dismissSubscription(subId) + dismissSubscription(subId) userSubscriptionMap.remove(key) } @@ -78,7 +79,7 @@ abstract class PerUserAndFollowListEoseManager( return if (subId == null) { newSub(key).also { userSubscriptionMap[user] = it.id } } else { - orchestrator.getSub(subId) ?: newSub(key).also { userSubscriptionMap[user] = it.id } + getSubscription(subId) ?: newSub(key).also { userSubscriptionMap[user] = it.id } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserEoseManager.kt index 404ab6143..e6e139c7b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/PerUserEoseManager.kt @@ -56,7 +56,7 @@ abstract class PerUserEoseManager( ) = latestEOSEs.newEose(user(key), relay, time) open fun newSub(key: T): Subscription = - orchestrator.requestNewSubscription { time, relayUrl -> + requestNewSubscription { time, relayUrl -> newEose(key, relayUrl, time) if (invalidateAfterEose) { invalidateFilters() @@ -67,7 +67,7 @@ abstract class PerUserEoseManager( key: User, subId: String, ) { - orchestrator.dismissSubscription(subId) + dismissSubscription(subId) userSubscriptionMap.remove(key) } @@ -77,7 +77,7 @@ abstract class PerUserEoseManager( return if (subId == null) { newSub(key).also { userSubscriptionMap[user] = it.id } } else { - orchestrator.getSub(subId) ?: newSub(key).also { userSubscriptionMap[user] = it.id } + getSubscription(subId) ?: newSub(key).also { userSubscriptionMap[user] = it.id } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubEoseManager.kt index c11aff657..443f034ac 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubEoseManager.kt @@ -56,7 +56,7 @@ abstract class SingleSubEoseManager( ) = latestEOSEs.newEose(relay, time) val sub = - orchestrator.requestNewSubscription { time, relayUrl -> + requestNewSubscription { time, relayUrl -> newEose(relayUrl, time) if (invalidateAfterEose) { invalidateFilters() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubNoEoseCacheEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubNoEoseCacheEoseManager.kt index 90d8d79fa..bd03a7145 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubNoEoseCacheEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/eoseManagers/SingleSubNoEoseCacheEoseManager.kt @@ -36,7 +36,7 @@ abstract class SingleSubNoEoseCacheEoseManager( val invalidateAfterEose: Boolean = false, ) : BaseEoseManager(client, allKeys) { val sub = - orchestrator.requestNewSubscription { time, relayUrl -> + requestNewSubscription { time, relayUrl -> if (invalidateAfterEose) { invalidateFilters() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsEoseManager.kt index 0622fac81..4601b97ca 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsEoseManager.kt @@ -38,7 +38,7 @@ class AccountGiftWrapsEoseManager( client: NostrClient, allKeys: () -> Set, ) : PerUserEoseManager(client, allKeys) { - override fun user(query: AccountQueryState) = query.account.userProfile() + override fun user(key: AccountQueryState) = key.account.userProfile() override fun updateFilter( key: AccountQueryState, diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/datasources/SubscriptionController.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/datasources/SubscriptionController.kt index d1767f3fa..b1a6f9169 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/datasources/SubscriptionController.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/datasources/SubscriptionController.kt @@ -78,7 +78,10 @@ class SubscriptionController( fun getSub(subId: String) = subscriptions.get(subId) - fun requestNewSubscription(onEOSE: ((Long, NormalizedRelayUrl) -> Unit)? = null): Subscription = Subscription(onEose = onEOSE).also { subscriptions.put(it.id, it) } + fun requestNewSubscription( + subId: String, + onEOSE: ((Long, NormalizedRelayUrl) -> Unit)? = null, + ): Subscription = Subscription(subId, onEose = onEOSE).also { subscriptions.put(it.id, it) } fun dismissSubscription(subId: String) = getSub(subId)?.let { dismissSubscription(it) }