Merge contact list fixes by kernel #998

kernelkind (2):
      appease clippy
      fix: sometimes most recent contacts list wasn't used
This commit is contained in:
William Casarin
2025-07-23 08:53:14 -07:00
3 changed files with 24 additions and 1 deletions

View File

@@ -15,6 +15,7 @@ pub enum ContactState {
Received { Received {
contacts: HashSet<Pubkey>, contacts: HashSet<Pubkey>,
note_key: NoteKey, note_key: NoteKey,
timestamp: u64,
}, },
} }
@@ -57,6 +58,7 @@ impl Contacts {
ContactState::Received { ContactState::Received {
contacts, contacts,
note_key: _, note_key: _,
timestamp: _,
} => { } => {
if contacts.contains(other_pubkey) { if contacts.contains(other_pubkey) {
IsFollowing::Yes IsFollowing::Yes
@@ -82,6 +84,18 @@ impl Contacts {
} }
}; };
if let ContactState::Received {
contacts: _,
note_key: _,
timestamp,
} = self.get_state()
{
if *timestamp > note.created_at() {
// the current contact list is more up to date than the one we just received. ignore it.
return;
}
}
update_state(&mut self.state, &note, *key); update_state(&mut self.state, &note, *key);
} }
@@ -96,11 +110,17 @@ fn update_state(state: &mut ContactState, note: &Note, key: NoteKey) {
*state = ContactState::Received { *state = ContactState::Received {
contacts: get_contacts_owned(note), contacts: get_contacts_owned(note),
note_key: key, note_key: key,
timestamp: note.created_at(),
}; };
} }
ContactState::Received { contacts, note_key } => { ContactState::Received {
contacts,
note_key,
timestamp,
} => {
update_contacts(contacts, note); update_contacts(contacts, note);
*note_key = key; *note_key = key;
*timestamp = note.created_at();
} }
}; };
} }

View File

@@ -144,6 +144,7 @@ fn send_kind_3_event(ndb: &Ndb, pool: &mut RelayPool, accounts: &Accounts, actio
let ContactState::Received { let ContactState::Received {
contacts: _, contacts: _,
note_key, note_key,
timestamp: _,
} = accounts.get_selected_account().data.contacts.get_state() } = accounts.get_selected_account().data.contacts.get_state()
else { else {
return; return;

View File

@@ -607,6 +607,7 @@ pub fn fetch_contact_list(
ContactState::Received { ContactState::Received {
contacts: _, contacts: _,
note_key: _, note_key: _,
timestamp: _,
} => FilterState::GotRemote(filter::GotRemoteType::Contact), } => FilterState::GotRemote(filter::GotRemoteType::Contact),
}; };
@@ -726,6 +727,7 @@ pub fn is_timeline_ready(
let ContactState::Received { let ContactState::Received {
contacts: _, contacts: _,
note_key, note_key,
timestamp: _,
} = accounts.get_selected_account().data.contacts.get_state() } = accounts.get_selected_account().data.contacts.get_state()
else { else {
return false; return false;