Skip to content

Commit c8c1318

Browse files
committed
Merge #331: Make config editabe in Settings panel
5408a5a Add load_config to Daemon trait (edouard) 392cdc8 Make config editable in settings panel (edouard) Pull request description: close #21 ACKs for top commit: edouardparis: Self-ACK 5408a5a Tree-SHA512: e868d810da0f4549624fa0024752bd25949cffba3f9b2dbeea4dff580ae4e80f67e885729222ccffc8fe38295a5bd2fd7a793260313d0554743caf0552442f01
2 parents c434c3a + 5408a5a commit c8c1318

File tree

15 files changed

+1554
-501
lines changed

15 files changed

+1554
-501
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/context.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
1+
use std::fs::OpenOptions;
12
use std::future::Future;
3+
use std::io::Write;
24
use std::pin::Pin;
35
use std::sync::Arc;
46

57
use bitcoin::util::psbt::PartiallySignedTransaction as Psbt;
68

7-
use super::menu::Menu;
8-
use crate::{app::config, conversion::Converter, daemon::Daemon, revault::Role};
99
use revaultd::config::Config as DaemonConfig;
1010
use revaultd::revault_tx::miniscript::DescriptorPublicKey;
1111

1212
use revault_hwi::{app::revault::RevaultHWI, HWIError};
1313

14+
use crate::{
15+
app::{config, error::Error, menu::Menu},
16+
conversion::Converter,
17+
daemon::Daemon,
18+
revault::Role,
19+
};
20+
1421
pub type HardwareWallet =
1522
Box<dyn Future<Output = Result<Box<dyn RevaultHWI + Send>, HWIError>> + Send + Sync>;
1623

@@ -113,6 +120,32 @@ impl Context {
113120
false
114121
}
115122
}
123+
124+
pub fn load_daemon_config(&mut self, cfg: DaemonConfig) -> Result<(), Error> {
125+
loop {
126+
if let Some(daemon) = Arc::get_mut(&mut self.revaultd) {
127+
daemon.load_config(cfg.clone())?;
128+
break;
129+
}
130+
}
131+
132+
let mut daemon_config_file = OpenOptions::new()
133+
.write(true)
134+
.open(&self.config.gui.revaultd_config_path)
135+
.map_err(|e| Error::ConfigError(e.to_string()))?;
136+
137+
let content =
138+
toml::to_string(&self.config.daemon).map_err(|e| Error::ConfigError(e.to_string()))?;
139+
140+
daemon_config_file
141+
.write_all(content.as_bytes())
142+
.map_err(|e| {
143+
log::warn!("failed to write to file: {:?}", e);
144+
Error::ConfigError(e.to_string())
145+
})?;
146+
147+
Ok(())
148+
}
116149
}
117150

118151
pub struct ConfigContext {

src/app/message.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
use bitcoin::{util::psbt::PartiallySignedTransaction as Psbt, OutPoint};
2-
use revault_hwi::{app::revault::RevaultHWI, HWIError};
31
use std::sync::Arc;
2+
3+
use bitcoin::{util::psbt::PartiallySignedTransaction as Psbt, OutPoint};
44
use tokio::sync::Mutex;
55

6+
use revault_hwi::{app::revault::RevaultHWI, HWIError};
7+
use revaultd::config::Config as DaemonConfig;
8+
69
use crate::{
710
app::{error::Error, menu::Menu},
811
daemon::{
@@ -58,6 +61,19 @@ pub enum Message {
5861
Close,
5962
Revault,
6063
Revaulted(Result<(), RevaultDError>),
64+
Settings(usize, SettingsMessage),
65+
AddWatchtower,
66+
LoadDaemonConfig(DaemonConfig),
67+
DaemonConfigLoaded(Result<(), Error>),
68+
}
69+
70+
#[derive(Debug, Clone)]
71+
pub enum SettingsMessage {
72+
Remove,
73+
Edit,
74+
FieldEdited(&'static str, String),
75+
CancelEdit,
76+
ConfirmEdit,
6177
}
6278

6379
#[derive(Debug, Clone)]

src/app/mod.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use iced::{time, Clipboard, Command, Element, Subscription};
1414
use iced_native::{window, Event};
1515

1616
pub use config::Config;
17-
pub use message::Message;
17+
pub use message::{Message, SettingsMessage};
1818

1919
use menu::Menu;
2020
use state::{
@@ -31,14 +31,13 @@ pub struct App {
3131
context: Context,
3232
}
3333

34-
#[allow(unreachable_patterns)]
3534
pub fn new_state(context: &Context) -> Box<dyn State> {
3635
match (context.role, &context.menu) {
3736
(_, Menu::Deposit) => DepositState::new().into(),
3837
(_, Menu::History) => HistoryState::new().into(),
3938
(_, Menu::Vaults(menu)) => VaultsState::new(menu).into(),
4039
(_, Menu::RevaultVaults) => RevaultVaultsState::default().into(),
41-
(_, Menu::Settings) => SettingsState::new(context.config.gui.clone()).into(),
40+
(_, Menu::Settings) => SettingsState::new(context).into(),
4241
(Role::Stakeholder, Menu::Home) => StakeholderHomeState::new().into(),
4342
(Role::Stakeholder, Menu::CreateVaults) => StakeholderCreateVaultsState::new().into(),
4443
(Role::Stakeholder, Menu::DelegateFunds) => StakeholderDelegateVaultsState::new().into(),
@@ -107,6 +106,10 @@ impl App {
107106
}
108107
Command::none()
109108
}
109+
Message::LoadDaemonConfig(cfg) => {
110+
let res = self.context.load_daemon_config(cfg);
111+
self.update(Message::DaemonConfigLoaded(res), clipboard)
112+
}
110113
Message::ChangeRole(role) => {
111114
self.context.role = role;
112115
self.state = new_state(&self.context);

0 commit comments

Comments
 (0)