notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit c421f8f8ff3bf119bcbb3cb24f2dd97973cf4289
parent 8d2da86f1fb997e7ca0fba895766fd58bc898373
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 17 Jul 2025 14:49:16 -0700

profile: fetch new metadata when visiting profiles

This ensures we always have the latest data

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mcrates/notedeck_columns/src/timeline/kind.rs | 41++++++++++++++++++++++-------------------
1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/crates/notedeck_columns/src/timeline/kind.rs b/crates/notedeck_columns/src/timeline/kind.rs @@ -5,7 +5,7 @@ use enostr::{Filter, NoteId, Pubkey}; use nostrdb::{Ndb, Transaction}; use notedeck::{ contacts::{contacts_filter, hybrid_contacts_filter}, - filter::{self, default_limit}, + filter::{self, default_limit, default_remote_limit, HybridFilter}, FilterError, FilterState, NoteCache, RootIdError, RootNoteIdBuf, }; use serde::{Deserialize, Serialize}; @@ -468,11 +468,7 @@ impl TimelineKind { todo!("implement generic filter lookups") } - TimelineKind::Profile(pk) => FilterState::ready(vec![Filter::new() - .authors([pk.bytes()]) - .kinds([1]) - .limit(default_limit()) - .build()]), + TimelineKind::Profile(pk) => FilterState::ready_hybrid(profile_filter(pk.bytes())), } } @@ -535,19 +531,11 @@ impl TimelineKind { } } - TimelineKind::Profile(pk) => { - let filter = Filter::new() - .authors([pk.bytes()]) - .kinds([1]) - .limit(default_limit()) - .build(); - - Some(Timeline::new( - TimelineKind::profile(pk), - FilterState::ready(vec![filter]), - TimelineTab::full_tabs(), - )) - } + TimelineKind::Profile(pk) => Some(Timeline::new( + TimelineKind::profile(pk), + FilterState::ready_hybrid(profile_filter(pk.bytes())), + TimelineTab::full_tabs(), + )), TimelineKind::Notifications(pk) => { let notifications_filter = Filter::new() @@ -690,6 +678,21 @@ fn last_per_pubkey_filter_state(ndb: &Ndb, pk: &Pubkey) -> FilterState { } } +fn profile_filter(pk: &[u8; 32]) -> HybridFilter { + HybridFilter::split( + vec![Filter::new() + .authors([pk]) + .kinds([1]) + .limit(default_limit()) + .build()], + vec![Filter::new() + .authors([pk]) + .kinds([1, 0]) + .limit(default_remote_limit()) + .build()], + ) +} + fn search_filter(s: &SearchQuery) -> Vec<Filter> { vec![s.filter().limit(default_limit()).build()] }