mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-09 08:04:45 +00:00
fix(multi-account): fetch metadata for all accounts, persist display names
Display names weren't showing because metadata was never requested for account pubkeys. Now: 1. LaunchedEffect triggers loadMetadataForPubkeys() for all accounts in the switcher once relays connect 2. metadataVersion collector persists display names for ALL accounts (not just active one) when metadata arrives from relays 3. Names available immediately on next dropdown open Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
f4308ac56d
commit
4b1d468ed0
@@ -673,15 +673,37 @@ fun App(
|
||||
}
|
||||
}
|
||||
|
||||
// Persist display name when metadata arrives from relays (debounced)
|
||||
// Fetch metadata for all accounts in the switcher + persist display names
|
||||
val allAccountsForMetadata by accountManager.allAccounts.collectAsState()
|
||||
LaunchedEffect(allAccountsForMetadata, accountState) {
|
||||
if (accountState !is AccountState.LoggedIn) return@LaunchedEffect
|
||||
// Wait for relay connections before requesting metadata
|
||||
relayManager.connectedRelays.first { it.isNotEmpty() }
|
||||
// Request metadata for all account pubkeys
|
||||
val pubkeys =
|
||||
allAccountsForMetadata.mapNotNull { info ->
|
||||
com.vitorpamplona.quartz.nip19Bech32
|
||||
.decodePublicKeyAsHexOrNull(info.npub)
|
||||
}
|
||||
if (pubkeys.isNotEmpty()) {
|
||||
subscriptionsCoordinator.loadMetadataForPubkeys(pubkeys)
|
||||
}
|
||||
}
|
||||
|
||||
// Persist display names when metadata arrives (debounced)
|
||||
LaunchedEffect(Unit) {
|
||||
localCache.metadataVersion.collect {
|
||||
kotlinx.coroutines.delay(2000) // debounce — wait for batch of metadata to settle
|
||||
val current = accountManager.currentAccount() ?: return@collect
|
||||
val user = localCache.getUserIfExists(current.pubKeyHex) ?: return@collect
|
||||
val name = user.toBestDisplayName()
|
||||
if (name != user.pubkeyDisplayHex()) {
|
||||
accountManager.updateDisplayName(current.npub, name)
|
||||
kotlinx.coroutines.delay(3000)
|
||||
val accounts = accountManager.allAccounts.value
|
||||
for (info in accounts) {
|
||||
val hex =
|
||||
com.vitorpamplona.quartz.nip19Bech32
|
||||
.decodePublicKeyAsHexOrNull(info.npub) ?: continue
|
||||
val user = localCache.getUserIfExists(hex) ?: continue
|
||||
val name = user.toBestDisplayName()
|
||||
if (name != user.pubkeyDisplayHex() && name != info.displayName) {
|
||||
accountManager.updateDisplayName(info.npub, name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user