Skip to content

Commit 5a9bc8a

Browse files
committed
gui: add import/export feature in settings
1 parent 54f6199 commit 5a9bc8a

18 files changed

+289
-27
lines changed

liana-gui/src/app/mod.rs

+13-4
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,8 @@ impl App {
316316
self.cache.clone_from(&cache);
317317
let current = &self.panels.current;
318318
let daemon = self.daemon.clone();
319+
let config = self.config.clone();
320+
let wallet = self.wallet.clone();
319321
// These are the panels to update with the cache.
320322
let mut panels = [
321323
(&mut self.panels.home as &mut dyn State, Menu::Home),
@@ -328,6 +330,8 @@ impl App {
328330
daemon.clone(),
329331
&cache,
330332
Message::UpdatePanelCache(current == menu),
333+
&config,
334+
wallet.clone(),
331335
)
332336
})
333337
.collect();
@@ -350,14 +354,19 @@ impl App {
350354
self.daemon.clone(),
351355
&self.cache,
352356
Message::WalletUpdated(Ok(wallet)),
357+
&self.config,
358+
self.wallet.clone(),
353359
)
354360
}
355361
Message::View(view::Message::Menu(menu)) => self.set_current_panel(menu),
356362
Message::View(view::Message::Clipboard(text)) => clipboard::write(text),
357-
_ => self
358-
.panels
359-
.current_mut()
360-
.update(self.daemon.clone(), &self.cache, message),
363+
_ => self.panels.current_mut().update(
364+
self.daemon.clone(),
365+
&self.cache,
366+
message,
367+
&self.config,
368+
self.wallet.clone(),
369+
),
361370
}
362371
}
363372

liana-gui/src/app/state/coins.rs

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use iced::Task;
77
use liana_ui::widget::Element;
88
use lianad::commands::CoinStatus;
99

10+
use crate::app::Config;
1011
use crate::daemon::model::LabelsLoader;
1112
use crate::{
1213
app::{
@@ -113,6 +114,8 @@ impl State for CoinsPanel {
113114
daemon: Arc<dyn Daemon + Sync + Send>,
114115
_cache: &Cache,
115116
message: Message,
117+
_config: &Config,
118+
_wallet: Arc<Wallet>,
116119
) -> Task<Message> {
117120
match message {
118121
Message::Coins(res) => match res {

liana-gui/src/app/state/export.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ impl ExportModal {
4545
ImportExportType::Transactions => {
4646
format!("liana-txs-{date}.csv")
4747
}
48-
ImportExportType::ExportString(_) => "psbt.psbt".into(),
48+
ImportExportType::ExportPsbt(_) => "psbt.psbt".into(),
4949
ImportExportType::Descriptor(descriptor) => {
5050
let checksum = descriptor
5151
.to_string()
@@ -58,6 +58,7 @@ impl ExportModal {
5858
ImportExportType::ImportPsbt => "psbt.psbt".into(),
5959
ImportExportType::ImportDescriptor => "descriptor.descriptor".into(),
6060
ImportExportType::ExportLabels => format!("liana-labels-{date}.csv"),
61+
ImportExportType::ExportBackup(_) => format!("liana-backup-{date}.json"),
6162
}
6263
}
6364

liana-gui/src/app/state/mod.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mod coins;
2-
mod export;
2+
pub mod export;
33
mod label;
44
mod psbt;
55
mod psbts;
@@ -18,6 +18,7 @@ use liana::miniscript::bitcoin::{Amount, OutPoint};
1818
use liana_ui::widget::*;
1919
use lianad::commands::CoinStatus;
2020

21+
use super::Config;
2122
use super::{
2223
cache::Cache,
2324
error::Error,
@@ -50,6 +51,8 @@ pub trait State {
5051
_daemon: Arc<dyn Daemon + Sync + Send>,
5152
_cache: &Cache,
5253
_message: Message,
54+
_config: &Config,
55+
_wallet: Arc<Wallet>,
5356
) -> Task<Message> {
5457
Task::none()
5558
}
@@ -201,6 +204,8 @@ impl State for Home {
201204
daemon: Arc<dyn Daemon + Sync + Send>,
202205
cache: &Cache,
203206
message: Message,
207+
_config: &Config,
208+
_wallet: Arc<Wallet>,
204209
) -> Task<Message> {
205210
match message {
206211
Message::Coins(res) => match res {

liana-gui/src/app/state/psbt.rs

+17-2
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ impl Action for UpdateAction {
732732
mod tests {
733733
use super::*;
734734
use crate::{
735-
app::{cache::Cache, state::PsbtsPanel},
735+
app::{cache::Cache, state::PsbtsPanel, Config},
736736
daemon::client::{Lianad, Request},
737737
utils::{mock::Daemon, sandbox::Sandbox},
738738
};
@@ -796,24 +796,35 @@ mod tests {
796796
Ok(json!({})),
797797
),
798798
]);
799+
let config = Config {
800+
daemon_config_path: None,
801+
daemon_rpc_path: None,
802+
log_level: None,
803+
debug: None,
804+
start_internal_bitcoind: false,
805+
};
799806
let wallet = Arc::new(Wallet::new(LianaDescriptor::from_str(DESC).unwrap()));
800807
let sandbox: Sandbox<PsbtsPanel> = Sandbox::new(PsbtsPanel::new(wallet.clone()));
801808
let client = Arc::new(Lianad::new(daemon.run()));
802809
let cache = Cache::default();
803810
let sandbox = sandbox
804-
.load(client.clone(), &Cache::default(), wallet)
811+
.load(client.clone(), &Cache::default(), &config, wallet.clone())
805812
.await;
806813
let _sandbox = sandbox
807814
.update(
808815
client.clone(),
809816
&cache,
810817
Message::View(view::Message::Select(0)),
818+
&config,
819+
wallet.clone(),
811820
)
812821
.await
813822
.update(
814823
client.clone(),
815824
&cache,
816825
Message::View(view::Message::Spend(view::SpendTxMessage::EditPsbt)),
826+
&config,
827+
wallet.clone(),
817828
)
818829
.await
819830
.update(
@@ -822,6 +833,8 @@ mod tests {
822833
Message::View(view::Message::ImportSpend(
823834
view::ImportSpendMessage::PsbtEdited("panic".to_string()),
824835
)),
836+
&config,
837+
wallet.clone(),
825838
)
826839
.await
827840
.update(
@@ -830,6 +843,8 @@ mod tests {
830843
Message::View(view::Message::ImportSpend(
831844
view::ImportSpendMessage::Confirm,
832845
)),
846+
&config,
847+
wallet,
833848
)
834849
.await;
835850
}

liana-gui/src/app/state/psbts.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use liana_ui::{
1111

1212
use super::{psbt, State};
1313
use crate::{
14-
app::{cache::Cache, error::Error, menu::Menu, message::Message, view, wallet::Wallet},
14+
app::{cache::Cache, error::Error, menu::Menu, message::Message, view, wallet::Wallet, Config},
1515
daemon::{model::SpendTx, Daemon},
1616
};
1717

@@ -76,6 +76,8 @@ impl State for PsbtsPanel {
7676
daemon: Arc<dyn Daemon + Sync + Send>,
7777
cache: &Cache,
7878
message: Message,
79+
_config: &Config,
80+
_wallet: Arc<Wallet>,
7981
) -> Task<Message> {
8082
match message {
8183
Message::View(view::Message::Reload) | Message::View(view::Message::Close) => {

liana-gui/src/app/state/receive.rs

+22-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use liana::miniscript::bitcoin::{
99
};
1010
use liana_ui::{component::modal, widget::*};
1111

12+
use crate::app::Config;
1213
use crate::daemon::model::LabelsLoader;
1314
use crate::{
1415
app::{
@@ -112,6 +113,8 @@ impl State for ReceivePanel {
112113
daemon: Arc<dyn Daemon + Sync + Send>,
113114
cache: &Cache,
114115
message: Message,
116+
_config: &Config,
117+
_wallet: Arc<Wallet>,
115118
) -> Task<Message> {
116119
match message {
117120
Message::View(view::Message::Label(_, _)) | Message::LabelsUpdated(_) => {
@@ -328,7 +331,7 @@ async fn verify_address(
328331
mod tests {
329332
use super::*;
330333
use crate::{
331-
app::{cache::Cache, view::Message as viewMessage, Message},
334+
app::{cache::Cache, view::Message as viewMessage, Config, Message},
332335
daemon::{
333336
client::{Lianad, Request},
334337
model::*,
@@ -355,14 +358,30 @@ mod tests {
355358
ChildNumber::from_normal_idx(0).unwrap()
356359
))),
357360
)]);
361+
let config = Config {
362+
daemon_config_path: None,
363+
daemon_rpc_path: None,
364+
log_level: None,
365+
debug: None,
366+
start_internal_bitcoind: false,
367+
};
368+
358369
let wallet = Arc::new(Wallet::new(LianaDescriptor::from_str(DESC).unwrap()));
359370
let sandbox: Sandbox<ReceivePanel> =
360371
Sandbox::new(ReceivePanel::new(PathBuf::new(), wallet.clone()));
361372
let client = Arc::new(Lianad::new(daemon.run()));
362373
let cache = Cache::default();
363-
let sandbox = sandbox.load(client.clone(), &cache, wallet).await;
364374
let sandbox = sandbox
365-
.update(client, &cache, Message::View(viewMessage::Next))
375+
.load(client.clone(), &cache, &config, wallet.clone())
376+
.await;
377+
let sandbox = sandbox
378+
.update(
379+
client,
380+
&cache,
381+
Message::View(viewMessage::Next),
382+
&config,
383+
wallet,
384+
)
366385
.await;
367386

368387
let panel = sandbox.state();

liana-gui/src/app/state/recovery.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ use crate::{
1717
error::Error,
1818
menu::Menu,
1919
message::Message,
20-
state::psbt,
21-
state::{redirect, State},
20+
state::{psbt, redirect, State},
2221
view,
2322
wallet::Wallet,
23+
Config,
2424
},
2525
daemon::{
2626
model::{remaining_sequence, Coin, SpendTx},
@@ -101,6 +101,8 @@ impl State for RecoveryPanel {
101101
daemon: Arc<dyn Daemon + Sync + Send>,
102102
cache: &Cache,
103103
message: Message,
104+
_config: &Config,
105+
_wallet: Arc<Wallet>,
104106
) -> Task<Message> {
105107
match message {
106108
Message::Coins(res) => match res {

liana-gui/src/app/state/settings/bitcoind.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ use lianad::config::{
1515

1616
use liana_ui::{component::form, widget::Element};
1717

18+
use crate::app::wallet::Wallet;
1819
use crate::{
19-
app::{cache::Cache, error::Error, message::Message, state::settings::State, view},
20+
app::{self, cache::Cache, error::Error, message::Message, state::settings::State, view},
2021
daemon::Daemon,
2122
node::{
2223
bitcoind::{RpcAuthType, RpcAuthValues},
@@ -90,6 +91,8 @@ impl State for BitcoindSettingsState {
9091
daemon: Arc<dyn Daemon + Sync + Send>,
9192
cache: &Cache,
9293
message: Message,
94+
_config: &app::Config,
95+
_wallet: Arc<Wallet>,
9396
) -> Task<Message> {
9497
match message {
9598
Message::DaemonConfigLoaded(res) => match res {

0 commit comments

Comments
 (0)