notedeck

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

commit 3dccdf2bade8e569d38070ae6d90ac52536ebfbc
parent e8a1233174d0f355e64d575a8593a72024cc3dff
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 22 Apr 2025 19:07:25 -0700

chrome: use actual columns noteaction executor

there is code duplication here and it is causing bugs

Diffstat:
Mcrates/notedeck_chrome/src/chrome.rs | 85++++++++++++++++++++++++++++---------------------------------------------------
Mcrates/notedeck_columns/src/decks.rs | 8+++++++-
Mcrates/notedeck_columns/src/lib.rs | 2+-
3 files changed, 38 insertions(+), 57 deletions(-)

diff --git a/crates/notedeck_chrome/src/chrome.rs b/crates/notedeck_chrome/src/chrome.rs @@ -6,13 +6,10 @@ use egui::{vec2, Button, Label, Layout, RichText, ThemePreference, Widget}; use egui_extras::{Size, StripBuilder}; use nostrdb::{ProfileRecord, Transaction}; use notedeck::{ - profile::get_profile_url, App, AppAction, AppContext, NoteAction, NotedeckTextStyle, - UserAccount, WalletType, -}; -use notedeck_columns::{ - timeline::{ThreadSelection, TimelineKind}, - Damus, Route, + profile::get_profile_url, App, AppAction, AppContext, NotedeckTextStyle, UserAccount, + WalletType, }; +use notedeck_columns::Damus; use notedeck_dave::{Dave, DaveAvatar}; use notedeck_ui::{AnimationHelper, ProfilePic}; @@ -468,54 +465,32 @@ fn chrome_handle_app_action( ui: &mut egui::Ui, ) { match action { - AppAction::Note(note_action) => match note_action { - NoteAction::Hashtag(hashtag) => { - ChromePanelAction::columns_navigate( - ctx, - chrome, - Route::Timeline(TimelineKind::Hashtag(hashtag)), - ); - } - - NoteAction::Reply(note_id) => { - ChromePanelAction::columns_navigate(ctx, chrome, Route::Reply(note_id)); - } - - NoteAction::Zap(_) => { - todo!("implement note zaps in chrome"); - } - - NoteAction::Context(context) => 'brk: { - let txn = Transaction::new(ctx.ndb).unwrap(); - let Some(note) = ctx.ndb.get_note_by_key(&txn, context.note_key).ok() else { - break 'brk; - }; - - context.action.process(ui, &note, ctx.pool); - } - - NoteAction::Quote(note_id) => { - ChromePanelAction::columns_navigate(ctx, chrome, Route::Quote(note_id)); - } - - NoteAction::Profile(pubkey) => { - ChromePanelAction::columns_navigate( - ctx, - chrome, - Route::Timeline(TimelineKind::Profile(pubkey)), - ); - } - - NoteAction::Note(note_id) => { - let txn = Transaction::new(ctx.ndb).unwrap(); - let thread = ThreadSelection::from_note_id(ctx.ndb, ctx.note_cache, &txn, note_id); - - match thread { - Ok(t) => ChromePanelAction::columns_navigate(ctx, chrome, Route::thread(t)), - - Err(err) => tracing::error!("{:?}", err), - } - } - }, + AppAction::Note(note_action) => { + chrome.switch_to_columns(); + let Some(columns) = chrome.get_columns() else { + return; + }; + + let txn = Transaction::new(ctx.ndb).unwrap(); + + notedeck_columns::actionbar::execute_and_process_note_action( + &note_action, + ctx.ndb, + columns + .decks_cache + .active_columns_mut(ctx.accounts) + .unwrap(), + 0, + &mut columns.timeline_cache, + ctx.note_cache, + ctx.pool, + &txn, + ctx.unknown_ids, + ctx.accounts, + ctx.global_wallet, + ctx.zaps, + ui, + ); + } } } diff --git a/crates/notedeck_columns/src/decks.rs b/crates/notedeck_columns/src/decks.rs @@ -38,11 +38,17 @@ impl Default for DecksCache { impl DecksCache { /// Gets the first column in the currently active user's active deck pub fn first_column_mut(&mut self, accounts: &notedeck::Accounts) -> Option<&mut Column> { + self.active_columns_mut(accounts) + .and_then(|ad| ad.columns_mut().first_mut()) + } + + /// Gets the active columns + pub fn active_columns_mut(&mut self, accounts: &notedeck::Accounts) -> Option<&mut Columns> { let account = accounts.get_selected_account()?; self.decks_mut(&account.key.pubkey) .active_deck_mut() - .and_then(|ad| ad.columns_mut().columns_mut().first_mut()) + .map(|ad| ad.columns_mut()) } pub fn new(mut account_to_decks: HashMap<Pubkey, Decks>) -> Self { diff --git a/crates/notedeck_columns/src/lib.rs b/crates/notedeck_columns/src/lib.rs @@ -4,7 +4,7 @@ mod error; //mod note; //mod block; pub mod accounts; -mod actionbar; +pub mod actionbar; pub mod app_creation; mod app_style; mod args;