sorts pubkeys in the relay management and fixes issues on duplicated keys for the lazy column
This commit is contained in:
+17
-15
@@ -23,11 +23,11 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.nip86
|
|||||||
import androidx.compose.runtime.Stable
|
import androidx.compose.runtime.Stable
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.model.LocalCache
|
import com.vitorpamplona.amethyst.model.LocalCache
|
||||||
import com.vitorpamplona.amethyst.model.User
|
import com.vitorpamplona.amethyst.model.User
|
||||||
import com.vitorpamplona.amethyst.model.nip86RelayManagement.Nip86Retriever
|
import com.vitorpamplona.amethyst.model.nip86RelayManagement.Nip86Retriever
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
||||||
import com.vitorpamplona.quartz.nip01Core.signers.NostrSigner
|
|
||||||
import com.vitorpamplona.quartz.nip86RelayManagement.Nip86Client
|
import com.vitorpamplona.quartz.nip86RelayManagement.Nip86Client
|
||||||
import com.vitorpamplona.quartz.nip86RelayManagement.rpc.AllowedPubkey
|
import com.vitorpamplona.quartz.nip86RelayManagement.rpc.AllowedPubkey
|
||||||
import com.vitorpamplona.quartz.nip86RelayManagement.rpc.BannedEvent
|
import com.vitorpamplona.quartz.nip86RelayManagement.rpc.BannedEvent
|
||||||
@@ -52,10 +52,10 @@ class PubkeyUser(
|
|||||||
@Stable
|
@Stable
|
||||||
class RelayManagementViewModel(
|
class RelayManagementViewModel(
|
||||||
relayUrl: NormalizedRelayUrl,
|
relayUrl: NormalizedRelayUrl,
|
||||||
signer: NostrSigner,
|
account: Account,
|
||||||
private val retriever: Nip86Retriever,
|
private val retriever: Nip86Retriever,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
val client = Nip86Client(relayUrl, signer)
|
val client = Nip86Client(relayUrl, account.signer)
|
||||||
|
|
||||||
private val _supportedMethods = MutableStateFlow<ImmutableList<String>>(persistentListOf())
|
private val _supportedMethods = MutableStateFlow<ImmutableList<String>>(persistentListOf())
|
||||||
val supportedMethods: StateFlow<ImmutableList<String>> = _supportedMethods
|
val supportedMethods: StateFlow<ImmutableList<String>> = _supportedMethods
|
||||||
@@ -80,16 +80,18 @@ class RelayManagementViewModel(
|
|||||||
|
|
||||||
val bannedPubkeyUsers: Flow<List<PubkeyUser>> =
|
val bannedPubkeyUsers: Flow<List<PubkeyUser>> =
|
||||||
_bannedPubkeys.map { list ->
|
_bannedPubkeys.map { list ->
|
||||||
list.mapNotNull { entry ->
|
list
|
||||||
LocalCache.checkGetOrCreateUser(entry.pubkey)?.let { PubkeyUser(it, entry.reason) }
|
.mapNotNull { entry ->
|
||||||
}
|
LocalCache.checkGetOrCreateUser(entry.pubkey)?.let { PubkeyUser(it, entry.reason) }
|
||||||
|
}.sortedByDescending { account.isKnown(it.user) }
|
||||||
}
|
}
|
||||||
|
|
||||||
val allowedPubkeyUsers: Flow<List<PubkeyUser>> =
|
val allowedPubkeyUsers: Flow<List<PubkeyUser>> =
|
||||||
_allowedPubkeys.map { list ->
|
_allowedPubkeys.map { list ->
|
||||||
list.mapNotNull { entry ->
|
list
|
||||||
LocalCache.checkGetOrCreateUser(entry.pubkey)?.let { PubkeyUser(it, entry.reason) }
|
.mapNotNull { entry ->
|
||||||
}
|
LocalCache.checkGetOrCreateUser(entry.pubkey)?.let { PubkeyUser(it, entry.reason) }
|
||||||
|
}.sortedByDescending { account.isKnown(it.user) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _isLoading = MutableStateFlow(false)
|
private val _isLoading = MutableStateFlow(false)
|
||||||
@@ -118,7 +120,7 @@ class RelayManagementViewModel(
|
|||||||
if (response.error != null) {
|
if (response.error != null) {
|
||||||
_error.value = response.error
|
_error.value = response.error
|
||||||
} else {
|
} else {
|
||||||
_bannedPubkeys.value = client.parseBannedPubkeys(response) ?: emptyList()
|
_bannedPubkeys.value = client.parseBannedPubkeys(response)?.distinctBy { it.pubkey } ?: emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -129,7 +131,7 @@ class RelayManagementViewModel(
|
|||||||
if (response.error != null) {
|
if (response.error != null) {
|
||||||
_error.value = response.error
|
_error.value = response.error
|
||||||
} else {
|
} else {
|
||||||
_allowedPubkeys.value = client.parseAllowedPubkeys(response) ?: emptyList()
|
_allowedPubkeys.value = client.parseAllowedPubkeys(response)?.distinctBy { it.pubkey } ?: emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,7 +142,7 @@ class RelayManagementViewModel(
|
|||||||
if (response.error != null) {
|
if (response.error != null) {
|
||||||
_error.value = response.error
|
_error.value = response.error
|
||||||
} else {
|
} else {
|
||||||
_bannedEvents.value = client.parseBannedEvents(response) ?: emptyList()
|
_bannedEvents.value = client.parseBannedEvents(response)?.distinctBy { it.id } ?: emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +153,7 @@ class RelayManagementViewModel(
|
|||||||
if (response.error != null) {
|
if (response.error != null) {
|
||||||
_error.value = response.error
|
_error.value = response.error
|
||||||
} else {
|
} else {
|
||||||
_eventsNeedingModeration.value = client.parseEventsNeedingModeration(response) ?: emptyList()
|
_eventsNeedingModeration.value = client.parseEventsNeedingModeration(response)?.distinctBy { it.id } ?: emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -162,7 +164,7 @@ class RelayManagementViewModel(
|
|||||||
if (response.error != null) {
|
if (response.error != null) {
|
||||||
_error.value = response.error
|
_error.value = response.error
|
||||||
} else {
|
} else {
|
||||||
_allowedKinds.value = client.parseAllowedKinds(response) ?: emptyList()
|
_allowedKinds.value = client.parseAllowedKinds(response)?.distinctBy { it } ?: emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,7 +175,7 @@ class RelayManagementViewModel(
|
|||||||
if (response.error != null) {
|
if (response.error != null) {
|
||||||
_error.value = response.error
|
_error.value = response.error
|
||||||
} else {
|
} else {
|
||||||
_blockedIps.value = client.parseBlockedIps(response) ?: emptyList()
|
_blockedIps.value = client.parseBlockedIps(response)?.distinctBy { it.ip } ?: emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user