notedeck

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

commit 944c9863f5308b34c416c2d4f7bc899a86853df6
parent c3655e033b593cc50682e6340e82d72f35632658
Author: kernelkind <kernelkind@gmail.com>
Date:   Wed, 19 Mar 2025 13:20:39 -0400

process wallet action

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

Diffstat:
Mcrates/notedeck_columns/src/ui/mod.rs | 1+
Acrates/notedeck_columns/src/ui/wallet.rs | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/crates/notedeck_columns/src/ui/mod.rs b/crates/notedeck_columns/src/ui/mod.rs @@ -18,6 +18,7 @@ pub mod support; pub mod thread; pub mod timeline; pub mod username; +pub mod wallet; pub use accounts::AccountsView; pub use mention::Mention; diff --git a/crates/notedeck_columns/src/ui/wallet.rs b/crates/notedeck_columns/src/ui/wallet.rs @@ -0,0 +1,83 @@ +use notedeck::{Accounts, GlobalWallet, Wallet, WalletError, WalletUIState}; + +use crate::route::{Route, Router}; + +#[derive(Debug)] +pub enum WalletAction { + SaveURI, + AddLocalOnly, + Delete, +} + +impl WalletAction { + pub fn process( + &self, + accounts: &mut Accounts, + global_wallet: &mut GlobalWallet, + _router: &mut Router<Route>, + ) { + match &self { + WalletAction::SaveURI => { + let ui_state = &mut global_wallet.ui_state; + if ui_state.for_local_only { + ui_state.for_local_only = false; + let Some(cur_acc) = accounts.get_selected_account_mut() else { + return; + }; + + if cur_acc.wallet.is_some() { + return; + } + + let Some(wallet) = try_create_wallet(ui_state) else { + return; + }; + + accounts.update_current_account(move |acc| { + acc.wallet = Some(wallet); + }); + } else { + if global_wallet.wallet.is_some() { + return; + } + + let Some(wallet) = try_create_wallet(ui_state) else { + return; + }; + + global_wallet.wallet = Some(wallet); + global_wallet.save_wallet(); + } + } + WalletAction::AddLocalOnly => { + // router.route_to(Route::Wallet(notedeck::WalletType::Local)); + global_wallet.ui_state.for_local_only = true; + } + WalletAction::Delete => { + if let Some(acc) = accounts.get_selected_account() { + if acc.wallet.is_some() { + accounts.update_current_account(|acc| { + acc.wallet = None; + }); + return; + } + } + + global_wallet.wallet = None; + global_wallet.save_wallet(); + } + } + } +} + +fn try_create_wallet(state: &mut WalletUIState) -> Option<Wallet> { + let uri = &state.buf; + + let Ok(wallet) = Wallet::new(uri.to_owned()) else { + state.error_msg = Some(WalletError::InvalidURI); + return None; + }; + + *state = WalletUIState::default(); + Some(wallet) +}