notedeck

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

commit efae62024e6e054f20e38a2aea39dcef7b84e704
parent 142aa879c3db8147f6f0697bfebe681ff405c73b
Author: kernelkind <kernelkind@gmail.com>
Date:   Mon, 14 Jul 2025 21:14:37 -0400

migrate to check following through `Contacts::is_following`

Signed-off-by: kernelkind <kernelkind@gmail.com>

Diffstat:
Mcrates/notedeck_ui/src/contacts.rs | 55+------------------------------------------------------
Mcrates/notedeck_ui/src/note/contents.rs | 13++++++-------
2 files changed, 7 insertions(+), 61 deletions(-)

diff --git a/crates/notedeck_ui/src/contacts.rs b/crates/notedeck_ui/src/contacts.rs @@ -1,58 +1,5 @@ -use nostrdb::{Filter, Ndb, Note, Transaction}; - -fn pk1_is_following_pk2( - ndb: &Ndb, - txn: &Transaction, - pk1: &[u8; 32], - pk2: &[u8; 32], -) -> Option<bool> { - let note = get_contacts_note(ndb, txn, pk1)?; - - Some(note_follows(note, pk2)) -} - -pub fn trust_media_from_pk2( - ndb: &Ndb, - txn: &Transaction, - pk1: Option<&[u8; 32]>, - pk2: &[u8; 32], -) -> bool { - pk1.map(|pk| pk == pk2 || pk1_is_following_pk2(ndb, txn, pk, pk2).unwrap_or(false)) - .unwrap_or(false) -} - -fn get_contacts_note<'a>(ndb: &'a Ndb, txn: &'a Transaction, user: &[u8; 32]) -> Option<Note<'a>> { - Some( - ndb.query(txn, &[contacts_filter(user)], 1) - .ok()? - .first()? - .note - .clone(), - ) -} +use nostrdb::Filter; pub fn contacts_filter(pk: &[u8; 32]) -> Filter { Filter::new().authors([pk]).kinds([3]).limit(1).build() } - -fn note_follows(contacts_note: Note<'_>, pk: &[u8; 32]) -> bool { - for tag in contacts_note.tags() { - if tag.count() < 2 { - continue; - } - - let Some("p") = tag.get_str(0) else { - continue; - }; - - let Some(author) = tag.get_id(1) else { - continue; - }; - - if pk == author { - return true; - } - } - - false -} diff --git a/crates/notedeck_ui/src/note/contents.rs b/crates/notedeck_ui/src/note/contents.rs @@ -2,7 +2,6 @@ use std::cell::OnceCell; use crate::{ blur::imeta_blurhashes, - contacts::trust_media_from_pk2, jobs::JobsCache, note::{NoteAction, NoteOptions, NoteResponse, NoteView}, }; @@ -11,7 +10,7 @@ use egui::{Color32, Hyperlink, RichText}; use nostrdb::{BlockType, Mention, Note, NoteKey, Transaction}; use tracing::warn; -use notedeck::NoteContext; +use notedeck::{IsFollowing, NoteContext}; use super::media::{find_renderable_media, image_carousel, RenderableMedia}; @@ -284,11 +283,11 @@ pub fn render_note_contents( ui.add_space(2.0); let carousel_id = egui::Id::new(("carousel", note.key().expect("expected tx note"))); - let zapping_acc = { - let cur_acc = note_context.accounts.get_selected_account(); - cur_acc.wallet.as_ref().map(|_| cur_acc.key.pubkey.bytes()) - }; - let trusted_media = trust_media_from_pk2(note_context.ndb, txn, zapping_acc, note.pubkey()); + let trusted_media = note_context + .accounts + .get_selected_account() + .is_following(note.pubkey()) + == IsFollowing::Yes; media_action = image_carousel( ui,