Only downloads DMs if the account is writeable

This commit is contained in:
Vitor Pamplona
2025-10-03 09:18:53 -04:00
parent 97668513b5
commit 21c1d705a1
3 changed files with 30 additions and 14 deletions
@@ -42,14 +42,20 @@ class AccountGiftWrapsEoseManager(
override fun updateFilter( override fun updateFilter(
key: AccountQueryState, key: AccountQueryState,
since: SincePerRelayMap?, since: SincePerRelayMap?,
): List<RelayBasedFilter> = ): List<RelayBasedFilter> {
key.account.dmRelays.flow.value.flatMap { relay -> // Only loads DMs if the account is writeable
filterGiftWrapsToPubkey( return if (key.account.isWriteable()) {
relay = relay, key.account.dmRelays.flow.value.flatMap { relay ->
pubkey = user(key).pubkeyHex, filterGiftWrapsToPubkey(
since = since?.get(relay)?.time, relay = relay,
) pubkey = user(key).pubkeyHex,
since = since?.get(relay)?.time,
)
}
} else {
emptyList()
} }
}
val userJobMap = mutableMapOf<User, List<Job>>() val userJobMap = mutableMapOf<User, List<Job>>()
@@ -23,6 +23,7 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.privateDM.datasource
import com.vitorpamplona.amethyst.service.relayClient.eoseManagers.PerUserAndFollowListEoseManager import com.vitorpamplona.amethyst.service.relayClient.eoseManagers.PerUserAndFollowListEoseManager
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter
class ChatroomFilterSubAssembler( class ChatroomFilterSubAssembler(
client: INostrClient, client: INostrClient,
@@ -31,7 +32,12 @@ class ChatroomFilterSubAssembler(
override fun updateFilter( override fun updateFilter(
key: ChatroomQueryState, key: ChatroomQueryState,
since: SincePerRelayMap?, since: SincePerRelayMap?,
) = filterNip04DMs(key.room.users, key.account, since) ): List<RelayBasedFilter>? =
if (key.account.isWriteable()) {
filterNip04DMs(key.room.users, key.account, since)
} else {
emptyList()
}
override fun user(key: ChatroomQueryState) = key.account.userProfile() override fun user(key: ChatroomQueryState) = key.account.userProfile()
@@ -40,12 +40,16 @@ class DMsFromUserFilterSubAssembler(
key: ChatroomListState, key: ChatroomListState,
since: SincePerRelayMap?, since: SincePerRelayMap?,
): List<RelayBasedFilter>? = ): List<RelayBasedFilter>? =
key.account.homeRelays.flow.value.map { if (key.account.isWriteable()) {
filterNip04DMsFromMe(key.account.userProfile(), it, since?.get(it)?.time) key.account.homeRelays.flow.value.map {
} + filterNip04DMsFromMe(key.account.userProfile(), it, since?.get(it)?.time)
key.account.dmRelays.flow.value.map { } +
filterNip04DMsToMe(key.account.userProfile(), it, since?.get(it)?.time) key.account.dmRelays.flow.value.map {
} filterNip04DMsToMe(key.account.userProfile(), it, since?.get(it)?.time)
}
} else {
emptyList()
}
override fun user(key: ChatroomListState) = key.account.userProfile() override fun user(key: ChatroomListState) = key.account.userProfile()