notedeck

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

commit 66c8973edf1c1afde05d84775148dbf4d6d276b3
parent 758de6b024e1d68360df0b75dfd20c45fb208b6f
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 16 Jul 2024 12:41:45 -0700

actionbar: move BarAction and add execute method

We will be executing baractions in multiple places, so factor this
out.

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

Diffstat:
Asrc/actionbar.rs | 30++++++++++++++++++++++++++++++
Msrc/lib.rs | 1+
Msrc/timeline.rs | 16++++------------
Msrc/ui/mod.rs | 2+-
Msrc/ui/note/mod.rs | 7+------
5 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/src/actionbar.rs b/src/actionbar.rs @@ -0,0 +1,30 @@ +use crate::{route::Route, Damus}; +use enostr::NoteId; + +#[derive(Debug, Eq, PartialEq, Copy, Clone)] +pub enum BarAction { + Reply, + OpenThread, +} + +impl BarAction { + pub fn execute(self, app: &mut Damus, timeline: usize, replying_to: &[u8; 32]) { + match self { + BarAction::Reply => { + let timeline = &mut app.timelines[timeline]; + timeline + .routes + .push(Route::Reply(NoteId::new(replying_to.to_owned()))); + timeline.navigating = true; + } + + BarAction::OpenThread => { + let timeline = &mut app.timelines[timeline]; + timeline + .routes + .push(Route::Thread(NoteId::new(replying_to.to_owned()))); + timeline.navigating = true; + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs @@ -5,6 +5,7 @@ mod error; //mod block; mod abbrev; pub mod account_manager; +mod actionbar; pub mod app_creation; mod app_style; mod colors; diff --git a/src/timeline.rs b/src/timeline.rs @@ -8,10 +8,9 @@ use crate::route::Route; use egui::containers::scroll_area::ScrollBarVisibility; use egui::{Direction, Layout}; -use crate::ui::BarAction; use egui_tabs::TabColor; use egui_virtual_list::VirtualList; -use enostr::{Filter, NoteId}; +use enostr::Filter; use nostrdb::{Note, Subscription, Transaction}; use std::cell::RefCell; use std::rc::Rc; @@ -332,16 +331,9 @@ pub fn timeline_view(ui: &mut egui::Ui, app: &mut Damus, timeline: usize) { .show(ui); if let Some(action) = resp.action { - debug!("bar action: {:?}", action); - match action { - BarAction::Reply => { - let timeline = &mut app.timelines[timeline]; - timeline - .routes - .push(Route::Reply(NoteId::new(note.id().to_owned()))); - timeline.navigating = true; - } - } + action.execute(app, timeline, note.id()); + } else if resp.response.clicked() { + debug!("clicked note"); } }); diff --git a/src/ui/mod.rs b/src/ui/mod.rs @@ -17,7 +17,7 @@ pub use account_switcher::AccountSelectionWidget; pub use fixed_window::{FixedWindow, FixedWindowResponse}; pub use global_popup::DesktopGlobalPopup; pub use mention::Mention; -pub use note::{BarAction, NoteResponse, NoteView, PostReplyView, PostView}; +pub use note::{NoteResponse, NoteView, PostReplyView, PostView}; pub use preview::{Preview, PreviewApp, PreviewConfig}; pub use profile::{profile_preview_controller, ProfilePic, ProfilePreview}; pub use relay::RelayView; diff --git a/src/ui/note/mod.rs b/src/ui/note/mod.rs @@ -8,7 +8,7 @@ pub use options::NoteOptions; pub use post::{PostAction, PostResponse, PostView}; pub use reply::PostReplyView; -use crate::{colors, notecache::CachedNote, ui, ui::View, Damus}; +use crate::{actionbar::BarAction, colors, notecache::CachedNote, ui, ui::View, Damus}; use egui::{Label, RichText, Sense}; use nostrdb::{Note, NoteKey, NoteReply, Transaction}; @@ -368,11 +368,6 @@ impl<'a> NoteView<'a> { } } -#[derive(Debug, Eq, PartialEq, Copy, Clone)] -pub enum BarAction { - Reply, -} - fn render_note_actionbar( ui: &mut egui::Ui, note_key: NoteKey,