From 7d2a1d4d315819ad18c040c7ee3e2830b40d8d6f Mon Sep 17 00:00:00 2001 From: Michael Mallan Date: Wed, 23 Apr 2025 13:09:35 +0100 Subject: [PATCH] fix: ensure spend panel steps use latest wallet The wallet is used in some steps to get fingerprint aliases. The recovery panel previously handled a wallet update, but this was omitted when making the recovery panel part of the spend panel. This bug already existed for the final step of a regular spend where the signing information would show old aliases if these were updated while defining the spend. --- liana-gui/src/app/state/spend/mod.rs | 5 ++++- liana-gui/src/app/state/spend/step.rs | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/liana-gui/src/app/state/spend/mod.rs b/liana-gui/src/app/state/spend/mod.rs index 9f79ac66..1fb6b4df 100644 --- a/liana-gui/src/app/state/spend/mod.rs +++ b/liana-gui/src/app/state/spend/mod.rs @@ -185,8 +185,11 @@ impl State for CreateSpendPanel { fn reload( &mut self, daemon: Arc, - _wallet: Arc, + wallet: Arc, ) -> Task { + for step in self.steps.iter_mut() { + step.reload_wallet(wallet.clone()); + } let daemon1 = daemon.clone(); let daemon2 = daemon.clone(); let coin_statuses_1 = if self.draft.is_recovery() { diff --git a/liana-gui/src/app/state/spend/step.rs b/liana-gui/src/app/state/spend/step.rs index 8cf90925..510a20e8 100644 --- a/liana-gui/src/app/state/spend/step.rs +++ b/liana-gui/src/app/state/spend/step.rs @@ -78,6 +78,7 @@ pub trait Step { fn apply(&self, _draft: &mut TransactionDraft) {} fn interrupt(&mut self) {} fn load(&mut self, _coins: &[Coin], _tip_height: i32, _draft: &TransactionDraft) {} + fn reload_wallet(&mut self, _wallet: Arc) {} fn subscription(&self) -> Subscription { Subscription::none() } @@ -975,6 +976,10 @@ impl Step for SaveSpend { )); } + fn reload_wallet(&mut self, wallet: Arc) { + self.wallet = wallet; + } + fn interrupt(&mut self) { if let Some((psbt_state, _)) = &mut self.spend { psbt_state.interrupt() @@ -1063,6 +1068,10 @@ impl Step for SelectRecoveryPath { self.load_from_coins_and_tip_height(coins, tip_height); } + fn reload_wallet(&mut self, wallet: Arc) { + self.wallet = wallet; + } + fn view<'a>(&'a self, cache: &'a Cache) -> Element<'a, view::Message> { view::recovery::recovery( cache,