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:
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, ¬e, 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(
+ ¬e_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: ¬edeck::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: ¬edeck::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;