commit c6dbb0e85607ab2058cb327473d55b5824e56073
parent 48f17f91b85e9e0a353526481aff84a68a1920e2
Author: Fernando LoĢpez Guevara <fernando.lguevara@gmail.com>
Date: Mon, 9 Jun 2025 10:51:17 -0300
fix(content): handle case where notes are not loaded
Diffstat:
9 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/crates/notedeck/src/note/mod.rs b/crates/notedeck/src/note/mod.rs
@@ -5,6 +5,7 @@ pub use action::{MediaAction, NoteAction, ZapAction, ZapTargetAmount};
pub use context::{BroadcastContext, ContextSelection, NoteContextSelection};
use crate::JobPool;
+use crate::UnknownIds;
use crate::{notecache::NoteCache, zaps::Zaps, Images};
use enostr::{NoteId, RelayPool};
use nostrdb::{Ndb, Note, NoteKey, QueryResult, Transaction};
@@ -21,6 +22,7 @@ pub struct NoteContext<'d> {
pub zaps: &'d mut Zaps,
pub pool: &'d mut RelayPool,
pub job_pool: &'d mut JobPool,
+ pub unknown_ids: &'d mut UnknownIds,
pub current_account_has_wallet: bool,
}
diff --git a/crates/notedeck/src/unknowns.rs b/crates/notedeck/src/unknowns.rs
@@ -201,7 +201,11 @@ impl UnknownIds {
return;
}
- self.ids.entry(UnknownId::Pubkey(*pubkey)).or_default();
+ let unknown_id = UnknownId::Pubkey(*pubkey);
+ if self.ids.contains_key(&unknown_id) {
+ return;
+ }
+ self.ids.entry(unknown_id).or_default();
self.mark_updated();
}
@@ -211,9 +215,11 @@ impl UnknownIds {
return;
}
- self.ids
- .entry(UnknownId::Id(NoteId::new(*note_id)))
- .or_default();
+ let unknown_id = UnknownId::Id(NoteId::new(*note_id));
+ if self.ids.contains_key(&unknown_id) {
+ return;
+ }
+ self.ids.entry(unknown_id).or_default();
self.mark_updated();
}
}
diff --git a/crates/notedeck_columns/src/nav.rs b/crates/notedeck_columns/src/nav.rs
@@ -420,11 +420,11 @@ fn render_nav_body(
zaps: ctx.zaps,
pool: ctx.pool,
job_pool: ctx.job_pool,
+ unknown_ids: ctx.unknown_ids,
current_account_has_wallet: get_current_wallet(ctx.accounts, ctx.global_wallet).is_some(),
};
match top {
Route::Timeline(kind) => render_timeline_route(
- ctx.unknown_ids,
&mut app.timeline_cache,
ctx.accounts,
kind,
@@ -436,7 +436,6 @@ fn render_nav_body(
&mut app.jobs,
),
Route::Thread(selection) => render_thread_route(
- ctx.unknown_ids,
&mut app.threads,
ctx.accounts,
selection,
diff --git a/crates/notedeck_columns/src/timeline/route.rs b/crates/notedeck_columns/src/timeline/route.rs
@@ -6,12 +6,11 @@ use crate::{
};
use enostr::Pubkey;
-use notedeck::{Accounts, MuteFun, NoteContext, UnknownIds};
+use notedeck::{Accounts, MuteFun, NoteContext};
use notedeck_ui::{jobs::JobsCache, NoteOptions};
#[allow(clippy::too_many_arguments)]
pub fn render_timeline_route(
- unknown_ids: &mut UnknownIds,
timeline_cache: &mut TimelineCache,
accounts: &mut Accounts,
kind: &TimelineKind,
@@ -50,7 +49,6 @@ pub fn render_timeline_route(
pubkey,
accounts,
timeline_cache,
- unknown_ids,
col,
ui,
&accounts.mutefun(),
@@ -79,7 +77,6 @@ pub fn render_timeline_route(
#[allow(clippy::too_many_arguments)]
pub fn render_thread_route(
- unknown_ids: &mut UnknownIds,
threads: &mut Threads,
accounts: &mut Accounts,
selection: &ThreadSelection,
@@ -95,7 +92,6 @@ pub fn render_thread_route(
ui::ThreadView::new(
threads,
- unknown_ids,
selection.selected_or_root(),
note_options,
&accounts.mutefun(),
@@ -113,7 +109,6 @@ pub fn render_profile_route(
pubkey: &Pubkey,
accounts: &Accounts,
timeline_cache: &mut TimelineCache,
- unknown_ids: &mut UnknownIds,
col: usize,
ui: &mut egui::Ui,
is_muted: &MuteFun,
@@ -127,7 +122,6 @@ pub fn render_profile_route(
col,
timeline_cache,
note_options,
- unknown_ids,
is_muted,
note_context,
jobs,
diff --git a/crates/notedeck_columns/src/ui/note/post.rs b/crates/notedeck_columns/src/ui/note/post.rs
@@ -785,6 +785,7 @@ mod preview {
zaps: app.zaps,
pool: app.pool,
job_pool: app.job_pool,
+ unknown_ids: app.unknown_ids,
current_account_has_wallet: false,
};
diff --git a/crates/notedeck_columns/src/ui/profile/mod.rs b/crates/notedeck_columns/src/ui/profile/mod.rs
@@ -12,7 +12,7 @@ use crate::{
};
use notedeck::{
name::get_display_name, profile::get_profile_url, Accounts, MuteFun, NoteAction, NoteContext,
- NotedeckTextStyle, UnknownIds,
+ NotedeckTextStyle,
};
use notedeck_ui::{
jobs::JobsCache,
@@ -26,7 +26,6 @@ pub struct ProfileView<'a, 'd> {
col_id: usize,
timeline_cache: &'a mut TimelineCache,
note_options: NoteOptions,
- unknown_ids: &'a mut UnknownIds,
is_muted: &'a MuteFun,
note_context: &'a mut NoteContext<'d>,
jobs: &'a mut JobsCache,
@@ -45,7 +44,6 @@ impl<'a, 'd> ProfileView<'a, 'd> {
col_id: usize,
timeline_cache: &'a mut TimelineCache,
note_options: NoteOptions,
- unknown_ids: &'a mut UnknownIds,
is_muted: &'a MuteFun,
note_context: &'a mut NoteContext<'d>,
jobs: &'a mut JobsCache,
@@ -56,7 +54,6 @@ impl<'a, 'd> ProfileView<'a, 'd> {
col_id,
timeline_cache,
note_options,
- unknown_ids,
is_muted,
note_context,
jobs,
@@ -103,7 +100,7 @@ impl<'a, 'd> ProfileView<'a, 'd> {
if let Err(e) = profile_timeline.poll_notes_into_view(
self.note_context.ndb,
&txn,
- self.unknown_ids,
+ self.note_context.unknown_ids,
self.note_context.note_cache,
reversed,
) {
diff --git a/crates/notedeck_columns/src/ui/thread.rs b/crates/notedeck_columns/src/ui/thread.rs
@@ -3,7 +3,7 @@ use egui_virtual_list::VirtualList;
use enostr::KeypairUnowned;
use nostrdb::{Note, Transaction};
use notedeck::note::root_note_id_from_selected_id;
-use notedeck::{MuteFun, NoteAction, NoteContext, UnknownIds};
+use notedeck::{MuteFun, NoteAction, NoteContext};
use notedeck_ui::jobs::JobsCache;
use notedeck_ui::note::NoteResponse;
use notedeck_ui::{NoteOptions, NoteView};
@@ -12,7 +12,6 @@ use crate::timeline::thread::{NoteSeenFlags, ParentState, Threads};
pub struct ThreadView<'a, 'd> {
threads: &'a mut Threads,
- unknown_ids: &'a mut UnknownIds,
selected_note_id: &'a [u8; 32],
note_options: NoteOptions,
col: usize,
@@ -27,7 +26,6 @@ impl<'a, 'd> ThreadView<'a, 'd> {
#[allow(clippy::too_many_arguments)]
pub fn new(
threads: &'a mut Threads,
- unknown_ids: &'a mut UnknownIds,
selected_note_id: &'a [u8; 32],
note_options: NoteOptions,
is_muted: &'a MuteFun,
@@ -38,7 +36,6 @@ impl<'a, 'd> ThreadView<'a, 'd> {
let id_source = egui::Id::new("threadscroll_threadview");
ThreadView {
threads,
- unknown_ids,
selected_note_id,
note_options,
id_source,
@@ -96,7 +93,7 @@ impl<'a, 'd> ThreadView<'a, 'd> {
self.note_context.note_cache,
self.note_context.ndb,
txn,
- self.unknown_ids,
+ self.note_context.unknown_ids,
self.col,
);
diff --git a/crates/notedeck_dave/src/ui/dave.rs b/crates/notedeck_dave/src/ui/dave.rs
@@ -216,6 +216,7 @@ impl<'a> DaveUi<'a> {
zaps: ctx.zaps,
pool: ctx.pool,
job_pool: ctx.job_pool,
+ unknown_ids: ctx.unknown_ids,
current_account_has_wallet: false,
};
diff --git a/crates/notedeck_ui/src/note/contents.rs b/crates/notedeck_ui/src/note/contents.rs
@@ -89,6 +89,10 @@ pub fn render_note_preview(
));
}
} else {
+ note_context
+ .unknown_ids
+ .add_note_id_if_missing(note_context.ndb, txn, id);
+
return NoteResponse::new(ui.colored_label(Color32::RED, "TODO: COULD NOT LOAD"));
/*
return ui