notedeck

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

commit f0158f71b211fd0a47a7ce6b7b95d1be7be91104
parent 61e47323ab8148a63c83264a7f791800c0cd2e86
Author: kernelkind <kernelkind@gmail.com>
Date:   Tue,  1 Jul 2025 14:50:32 -0400

don't expose mutable access to `UserAccount`

it's not preferable that the full mutable access is available to
`ZapWallet`, but this PR is becoming too big already

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

Diffstat:
Mcrates/notedeck/src/account/accounts.rs | 8++++++--
Mcrates/notedeck/src/wallet.rs | 4+---
Mcrates/notedeck_columns/src/actionbar.rs | 2+-
Mcrates/notedeck_columns/src/nav.rs | 8+++-----
Mcrates/notedeck_columns/src/ui/wallet.rs | 3+--
5 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/crates/notedeck/src/account/accounts.rs b/crates/notedeck/src/account/accounts.rs @@ -8,7 +8,7 @@ use crate::account::relay::{ }; use crate::storage::AccountStorageWriter; use crate::user_account::UserAccountSerializable; -use crate::{AccountStorage, MuteFun, SingleUnkIdAction, UnknownIds, UserAccount}; +use crate::{AccountStorage, MuteFun, SingleUnkIdAction, UnknownIds, UserAccount, ZapWallet}; use enostr::{ClientMessage, FilledKeypair, Keypair, Pubkey, RelayPool}; use nostrdb::{Ndb, Note, Transaction}; @@ -180,10 +180,14 @@ impl Accounts { self.get_selected_account().wallet.is_some() } - pub fn get_selected_account_mut(&mut self) -> &mut UserAccount { + fn get_selected_account_mut(&mut self) -> &mut UserAccount { self.cache.selected_mut() } + pub fn get_selected_wallet_mut(&mut self) -> Option<&mut ZapWallet> { + self.cache.selected_mut().wallet.as_mut() + } + fn get_selected_account_data(&self) -> &AccountData { &self.cache.selected().data } diff --git a/crates/notedeck/src/wallet.rs b/crates/notedeck/src/wallet.rs @@ -28,9 +28,7 @@ pub fn get_current_wallet<'a>( accounts: &'a mut Accounts, global_wallet: &'a mut GlobalWallet, ) -> Option<&'a mut ZapWallet> { - let acc = accounts.get_selected_account_mut(); - - let Some(wallet) = &mut acc.wallet else { + let Some(wallet) = accounts.get_selected_wallet_mut() else { return global_wallet.wallet.as_mut(); }; diff --git a/crates/notedeck_columns/src/actionbar.rs b/crates/notedeck_columns/src/actionbar.rs @@ -98,7 +98,7 @@ fn execute_note_action( router_action = Some(RouterAction::route_to(Route::quote(note_id))); } NoteAction::Zap(zap_action) => { - let cur_acc = accounts.get_selected_account_mut(); + let cur_acc = accounts.get_selected_account(); let sender = cur_acc.key.pubkey; diff --git a/crates/notedeck_columns/src/nav.rs b/crates/notedeck_columns/src/nav.rs @@ -686,9 +686,7 @@ fn render_nav_body( Route::Wallet(wallet_type) => { let state = match wallet_type { notedeck::WalletType::Auto => 's: { - if let Some(cur_acc_wallet) = - &mut ctx.accounts.get_selected_account_mut().wallet - { + if let Some(cur_acc_wallet) = ctx.accounts.get_selected_wallet_mut() { let default_zap_state = get_default_zap_state(&mut cur_acc_wallet.default_zap); break 's WalletState::Wallet { @@ -713,8 +711,8 @@ fn render_nav_body( } } notedeck::WalletType::Local => 's: { - let cur_acc = ctx.accounts.get_selected_account_mut(); - let Some(wallet) = &mut cur_acc.wallet else { + let cur_acc = ctx.accounts.get_selected_wallet_mut(); + let Some(wallet) = cur_acc else { break 's WalletState::NoWallet { state: &mut ctx.global_wallet.ui_state, show_local_only: false, diff --git a/crates/notedeck_columns/src/ui/wallet.rs b/crates/notedeck_columns/src/ui/wallet.rs @@ -63,9 +63,8 @@ impl WalletAction { let ui_state = &mut global_wallet.ui_state; if ui_state.for_local_only { ui_state.for_local_only = false; - let cur_acc = accounts.get_selected_account_mut(); - if cur_acc.wallet.is_some() { + if accounts.get_selected_wallet_mut().is_some() { return None; }