Skip to content

Commit 6f6c35d

Browse files
committed
Merge #1023: gui: record updates to aliases
67ebde1 gui: add wallet to reload (jp1ac4) Pull request description: This is to fix #1017. It adds the `wallet` to the `reload` trait method so that changes are recorded. As part of this change, the `TransactionsPanel` now has a `wallet` field to be used when calling its own `reload` method. ACKs for top commit: edouardparis: ACK 67ebde1 Tree-SHA512: 273684dd7bfbf19b40d9e19e33561cd0428e2d7d93a2faa4409f7dab836bd52e907d7e95a1f95a05476363b8766d630c73be7a64775a2c52ca9f0d5c2509f812
2 parents 19d9a4b + 67ebde1 commit 6f6c35d

File tree

11 files changed

+94
-31
lines changed

11 files changed

+94
-31
lines changed

gui/src/app/mod.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl Panels {
6060
current: Menu::Home,
6161
home: Home::new(wallet.clone(), &cache.coins),
6262
coins: CoinsPanel::new(&cache.coins, wallet.main_descriptor.first_timelock_value()),
63-
transactions: TransactionsPanel::new(),
63+
transactions: TransactionsPanel::new(wallet.clone()),
6464
psbts: PsbtsPanel::new(wallet.clone()),
6565
recovery: RecoveryPanel::new(wallet.clone(), &cache.coins, cache.blockheight),
6666
receive: ReceivePanel::new(data_dir.clone(), wallet.clone()),
@@ -137,7 +137,7 @@ impl App {
137137
data_dir.clone(),
138138
internal_bitcoind.as_ref(),
139139
);
140-
let cmd = panels.home.reload(daemon.clone());
140+
let cmd = panels.home.reload(daemon.clone(), wallet.clone());
141141
(
142142
Self {
143143
panels,
@@ -202,7 +202,9 @@ impl App {
202202
_ => {}
203203
};
204204
self.panels.current = menu;
205-
self.panels.current_mut().reload(self.daemon.clone())
205+
self.panels
206+
.current_mut()
207+
.reload(self.daemon.clone(), self.wallet.clone())
206208
}
207209

208210
pub fn subscription(&self) -> Subscription<Message> {

gui/src/app/state/coins.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use crate::{
1414
message::Message,
1515
state::{label::LabelsEdited, State},
1616
view,
17+
wallet::Wallet,
1718
},
1819
daemon::{
1920
model::{Coin, LabelItem, Labelled},
@@ -150,7 +151,11 @@ impl State for CoinsPanel {
150151
Command::none()
151152
}
152153

153-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
154+
fn reload(
155+
&mut self,
156+
daemon: Arc<dyn Daemon + Sync + Send>,
157+
_wallet: Arc<Wallet>,
158+
) -> Command<Message> {
154159
let daemon1 = daemon.clone();
155160
let daemon2 = daemon.clone();
156161
Command::batch(vec![

gui/src/app/state/mod.rs

+12-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ pub trait State {
4444
fn subscription(&self) -> Subscription<Message> {
4545
Subscription::none()
4646
}
47-
fn reload(&mut self, _daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
47+
fn reload(
48+
&mut self,
49+
_daemon: Arc<dyn Daemon + Sync + Send>,
50+
_wallet: Arc<Wallet>,
51+
) -> Command<Message> {
4852
Command::none()
4953
}
5054
}
@@ -208,7 +212,7 @@ impl State for Home {
208212
};
209213
}
210214
Message::View(view::Message::Reload) => {
211-
return self.reload(daemon);
215+
return self.reload(daemon, self.wallet.clone());
212216
}
213217
Message::View(view::Message::Close) => {
214218
self.selected_event = None;
@@ -259,8 +263,13 @@ impl State for Home {
259263
Command::none()
260264
}
261265

262-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
266+
fn reload(
267+
&mut self,
268+
daemon: Arc<dyn Daemon + Sync + Send>,
269+
wallet: Arc<Wallet>,
270+
) -> Command<Message> {
263271
self.selected_event = None;
272+
self.wallet = wallet;
264273
let daemon1 = daemon.clone();
265274
let daemon2 = daemon.clone();
266275
let daemon3 = daemon.clone();

gui/src/app/state/psbts.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ impl State for PsbtsPanel {
7575
) -> Command<Message> {
7676
match message {
7777
Message::View(view::Message::Reload) | Message::View(view::Message::Close) => {
78-
return self.reload(daemon);
78+
return self.reload(daemon, self.wallet.clone());
7979
}
8080
Message::SpendTxs(res) => match res {
8181
Err(e) => self.warning = Some(e),
@@ -118,7 +118,12 @@ impl State for PsbtsPanel {
118118
}
119119
}
120120

121-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
121+
fn reload(
122+
&mut self,
123+
daemon: Arc<dyn Daemon + Sync + Send>,
124+
wallet: Arc<Wallet>,
125+
) -> Command<Message> {
126+
self.wallet = wallet;
122127
self.selected_tx = None;
123128
self.import_tx = None;
124129
let daemon = daemon.clone();

gui/src/app/state/receive.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,12 @@ impl State for ReceivePanel {
191191
}
192192
}
193193

194-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
194+
fn reload(
195+
&mut self,
196+
daemon: Arc<dyn Daemon + Sync + Send>,
197+
wallet: Arc<Wallet>,
198+
) -> Command<Message> {
199+
self.wallet = wallet;
195200
// Fill at least with one address, user will then use the generate button.
196201
if self.addresses.is_empty() {
197202
let daemon = daemon.clone();
@@ -364,13 +369,11 @@ mod tests {
364369
ChildNumber::from_normal_idx(0).unwrap()
365370
))),
366371
)]);
367-
368-
let sandbox: Sandbox<ReceivePanel> = Sandbox::new(ReceivePanel::new(
369-
PathBuf::new(),
370-
Arc::new(Wallet::new(LianaDescriptor::from_str(DESC).unwrap())),
371-
));
372+
let wallet = Arc::new(Wallet::new(LianaDescriptor::from_str(DESC).unwrap()));
373+
let sandbox: Sandbox<ReceivePanel> =
374+
Sandbox::new(ReceivePanel::new(PathBuf::new(), wallet.clone()));
372375
let client = Arc::new(Lianad::new(daemon.run()));
373-
let sandbox = sandbox.load(client, &Cache::default()).await;
376+
let sandbox = sandbox.load(client, &Cache::default(), wallet).await;
374377

375378
let panel = sandbox.state();
376379
assert_eq!(panel.addresses.list, vec![addr]);

gui/src/app/state/recovery.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,13 @@ impl State for RecoveryPanel {
192192
Command::none()
193193
}
194194

195-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
195+
fn reload(
196+
&mut self,
197+
daemon: Arc<dyn Daemon + Sync + Send>,
198+
wallet: Arc<Wallet>,
199+
) -> Command<Message> {
196200
let daemon = daemon.clone();
201+
self.wallet = wallet;
197202
self.selected_path = None;
198203
self.warning = None;
199204
self.feerate = form::Value::default();

gui/src/app/state/settings/mod.rs

+17-5
Original file line numberDiff line numberDiff line change
@@ -53,25 +53,28 @@ impl State for SettingsState {
5353
)
5454
.into(),
5555
);
56+
let wallet = self.wallet.clone();
5657
self.setting
5758
.as_mut()
58-
.map(|s| s.reload(daemon))
59+
.map(|s| s.reload(daemon, wallet))
5960
.unwrap_or_else(Command::none)
6061
}
6162
Message::View(view::Message::Settings(view::SettingsMessage::AboutSection)) => {
6263
self.setting = Some(AboutSettingsState::default().into());
64+
let wallet = self.wallet.clone();
6365
self.setting
6466
.as_mut()
65-
.map(|s| s.reload(daemon))
67+
.map(|s| s.reload(daemon, wallet))
6668
.unwrap_or_else(Command::none)
6769
}
6870
Message::View(view::Message::Settings(view::SettingsMessage::EditWalletSettings)) => {
6971
self.setting = Some(
7072
WalletSettingsState::new(self.data_dir.clone(), self.wallet.clone()).into(),
7173
);
74+
let wallet = self.wallet.clone();
7275
self.setting
7376
.as_mut()
74-
.map(|s| s.reload(daemon))
77+
.map(|s| s.reload(daemon, wallet))
7578
.unwrap_or_else(Command::none)
7679
}
7780
_ => self
@@ -98,8 +101,13 @@ impl State for SettingsState {
98101
}
99102
}
100103

101-
fn reload(&mut self, _daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
104+
fn reload(
105+
&mut self,
106+
_daemon: Arc<dyn Daemon + Sync + Send>,
107+
wallet: Arc<Wallet>,
108+
) -> Command<Message> {
102109
self.setting = None;
110+
self.wallet = wallet;
103111
Command::none()
104112
}
105113
}
@@ -150,7 +158,11 @@ impl State for AboutSettingsState {
150158
Command::none()
151159
}
152160

153-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
161+
fn reload(
162+
&mut self,
163+
daemon: Arc<dyn Daemon + Sync + Send>,
164+
_wallet: Arc<Wallet>,
165+
) -> Command<Message> {
154166
Command::perform(
155167
async move { daemon.get_info().map_err(|e| e.into()) },
156168
Message::Info,

gui/src/app/state/settings/wallet.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,14 @@ impl State for WalletSettingsState {
180180
}
181181
}
182182

183-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
183+
fn reload(
184+
&mut self,
185+
daemon: Arc<dyn Daemon + Sync + Send>,
186+
wallet: Arc<Wallet>,
187+
) -> Command<Message> {
188+
self.descriptor = wallet.main_descriptor.to_string();
189+
self.keys_aliases = Self::keys_aliases(&wallet);
190+
self.wallet = wallet;
184191
Command::perform(
185192
async move { daemon.get_info().map_err(|e| e.into()) },
186193
Message::Info,

gui/src/app/state/spend/mod.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,11 @@ impl State for CreateSpendPanel {
112112
Command::none()
113113
}
114114

115-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
115+
fn reload(
116+
&mut self,
117+
daemon: Arc<dyn Daemon + Sync + Send>,
118+
_wallet: Arc<Wallet>,
119+
) -> Command<Message> {
116120
let daemon1 = daemon.clone();
117121
let daemon2 = daemon.clone();
118122
Command::batch(vec![

gui/src/app/state/transactions.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use crate::{
2222
message::Message,
2323
state::{label::LabelsEdited, State},
2424
view,
25+
wallet::Wallet,
2526
},
2627
daemon::model,
2728
};
@@ -31,8 +32,8 @@ use crate::daemon::{
3132
Daemon,
3233
};
3334

34-
#[derive(Default)]
3535
pub struct TransactionsPanel {
36+
wallet: Arc<Wallet>,
3637
pending_txs: Vec<HistoryTransaction>,
3738
txs: Vec<HistoryTransaction>,
3839
labels_edited: LabelsEdited,
@@ -42,8 +43,9 @@ pub struct TransactionsPanel {
4243
}
4344

4445
impl TransactionsPanel {
45-
pub fn new() -> Self {
46+
pub fn new(wallet: Arc<Wallet>) -> Self {
4647
Self {
48+
wallet,
4749
selected_tx: None,
4850
txs: Vec::new(),
4951
pending_txs: Vec::new(),
@@ -120,7 +122,7 @@ impl State for TransactionsPanel {
120122
}
121123
},
122124
Message::View(view::Message::Reload) | Message::View(view::Message::Close) => {
123-
return self.reload(daemon);
125+
return self.reload(daemon, self.wallet.clone());
124126
}
125127
Message::View(view::Message::Select(i)) => {
126128
self.selected_tx = if i < self.pending_txs.len() {
@@ -225,7 +227,11 @@ impl State for TransactionsPanel {
225227
Command::none()
226228
}
227229

228-
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
230+
fn reload(
231+
&mut self,
232+
daemon: Arc<dyn Daemon + Sync + Send>,
233+
_wallet: Arc<Wallet>,
234+
) -> Command<Message> {
229235
self.selected_tx = None;
230236
let daemon1 = daemon.clone();
231237
let daemon2 = daemon.clone();

gui/src/utils/sandbox.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::sync::Arc;
33
use iced_native::command::Action;
44

55
use crate::{
6-
app::{cache::Cache, message::Message, state::State},
6+
app::{cache::Cache, message::Message, state::State, wallet::Wallet},
77
daemon::Daemon,
88
};
99

@@ -37,8 +37,13 @@ impl<S: State + Send + 'static> Sandbox<S> {
3737
self
3838
}
3939

40-
pub async fn load(mut self, daemon: Arc<dyn Daemon + Sync + Send>, cache: &Cache) -> Self {
41-
let cmd = self.state.reload(daemon.clone());
40+
pub async fn load(
41+
mut self,
42+
daemon: Arc<dyn Daemon + Sync + Send>,
43+
cache: &Cache,
44+
wallet: Arc<Wallet>,
45+
) -> Self {
46+
let cmd = self.state.reload(daemon.clone(), wallet);
4247
for action in cmd.actions() {
4348
if let Action::Future(f) = action {
4449
let msg = f.await;

0 commit comments

Comments
 (0)