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:
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)
+}