commit 1100e2823300a2f92e2f85a427b58f53c834f949
parent 9b7033e208f7a8405fe56125a2f0867cacdb6839
Author: kernelkind <kernelkind@gmail.com>
Date: Sat, 5 Jul 2025 13:22:52 -0400
use `Contacts` in `AccountData`
Signed-off-by: kernelkind <kernelkind@gmail.com>
Diffstat:
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/crates/notedeck/src/account/accounts.rs b/crates/notedeck/src/account/accounts.rs
@@ -1,6 +1,7 @@
use uuid::Uuid;
use crate::account::cache::AccountCache;
+use crate::account::contacts::Contacts;
use crate::account::mute::AccountMutedData;
use crate::account::relay::{
modify_advertised_relays, update_relay_configuration, AccountRelayData, RelayAction,
@@ -253,6 +254,13 @@ impl Accounts {
),
relay_url,
);
+ pool.send_to(
+ &ClientMessage::req(
+ self.subs.contacts.remote.clone(),
+ vec![data.contacts.filter.clone()],
+ ),
+ relay_url,
+ );
}
pub fn update(&mut self, ndb: &mut Ndb, pool: &mut RelayPool, ctx: &egui::Context) {
@@ -366,6 +374,7 @@ fn get_acc_from_storage(user_account_serializable: UserAccountSerializable) -> O
pub struct AccountData {
pub(crate) relay: AccountRelayData,
pub(crate) muted: AccountMutedData,
+ pub contacts: Contacts,
}
impl AccountData {
@@ -373,6 +382,7 @@ impl AccountData {
Self {
relay: AccountRelayData::new(pubkey),
muted: AccountMutedData::new(pubkey),
+ contacts: Contacts::new(pubkey),
}
}
@@ -388,6 +398,8 @@ impl AccountData {
}
self.muted.poll_for_updates(ndb, &txn, subs.mute.local);
+ self.contacts
+ .poll_for_updates(ndb, &txn, subs.contacts.local);
resp
}
@@ -396,6 +408,7 @@ impl AccountData {
pub(super) fn query(&mut self, ndb: &Ndb, txn: &Transaction) {
self.relay.query(ndb, txn);
self.muted.query(ndb, txn);
+ self.contacts.query(ndb, txn);
}
}
@@ -411,6 +424,7 @@ pub struct AddAccountResponse {
pub(super) struct AccountSubs {
relay: UnifiedSubscription,
mute: UnifiedSubscription,
+ contacts: UnifiedSubscription,
}
impl AccountSubs {
@@ -424,9 +438,14 @@ impl AccountSubs {
) -> Self {
let relay = subscribe(ndb, pool, &data.relay.filter);
let mute = subscribe(ndb, pool, &data.muted.filter);
+ let contacts = subscribe(ndb, pool, &data.contacts.filter);
update_relay_configuration(pool, relay_defaults, pk, &data.relay, wakeup);
- Self { relay, mute }
+ Self {
+ relay,
+ mute,
+ contacts,
+ }
}
pub fn swap_to(
@@ -440,6 +459,7 @@ impl AccountSubs {
) {
unsubscribe(ndb, pool, &self.relay);
unsubscribe(ndb, pool, &self.mute);
+ unsubscribe(ndb, pool, &self.contacts);
*self = AccountSubs::new(ndb, pool, relay_defaults, pk, new_selection_data, wakeup);
}
diff --git a/crates/notedeck/src/user_account.rs b/crates/notedeck/src/user_account.rs
@@ -1,9 +1,9 @@
-use enostr::{Keypair, KeypairUnowned};
+use enostr::{Keypair, KeypairUnowned, Pubkey};
use tokenator::{ParseError, TokenParser, TokenSerializable};
use crate::{
wallet::{WalletSerializable, ZapWallet},
- AccountData,
+ AccountData, IsFollowing,
};
pub struct UserAccount {
@@ -32,6 +32,10 @@ impl UserAccount {
self.wallet = Some(wallet);
self
}
+
+ pub fn is_following(&self, pk: &Pubkey) -> IsFollowing {
+ self.data.contacts.is_following(pk)
+ }
}
pub struct UserAccountSerializable {