gui: add wallet to reload
This commit is contained in:
parent
19d9a4b26a
commit
67ebde1432
@ -60,7 +60,7 @@ impl Panels {
|
|||||||
current: Menu::Home,
|
current: Menu::Home,
|
||||||
home: Home::new(wallet.clone(), &cache.coins),
|
home: Home::new(wallet.clone(), &cache.coins),
|
||||||
coins: CoinsPanel::new(&cache.coins, wallet.main_descriptor.first_timelock_value()),
|
coins: CoinsPanel::new(&cache.coins, wallet.main_descriptor.first_timelock_value()),
|
||||||
transactions: TransactionsPanel::new(),
|
transactions: TransactionsPanel::new(wallet.clone()),
|
||||||
psbts: PsbtsPanel::new(wallet.clone()),
|
psbts: PsbtsPanel::new(wallet.clone()),
|
||||||
recovery: RecoveryPanel::new(wallet.clone(), &cache.coins, cache.blockheight),
|
recovery: RecoveryPanel::new(wallet.clone(), &cache.coins, cache.blockheight),
|
||||||
receive: ReceivePanel::new(data_dir.clone(), wallet.clone()),
|
receive: ReceivePanel::new(data_dir.clone(), wallet.clone()),
|
||||||
@ -137,7 +137,7 @@ impl App {
|
|||||||
data_dir.clone(),
|
data_dir.clone(),
|
||||||
internal_bitcoind.as_ref(),
|
internal_bitcoind.as_ref(),
|
||||||
);
|
);
|
||||||
let cmd = panels.home.reload(daemon.clone());
|
let cmd = panels.home.reload(daemon.clone(), wallet.clone());
|
||||||
(
|
(
|
||||||
Self {
|
Self {
|
||||||
panels,
|
panels,
|
||||||
@ -202,7 +202,9 @@ impl App {
|
|||||||
_ => {}
|
_ => {}
|
||||||
};
|
};
|
||||||
self.panels.current = menu;
|
self.panels.current = menu;
|
||||||
self.panels.current_mut().reload(self.daemon.clone())
|
self.panels
|
||||||
|
.current_mut()
|
||||||
|
.reload(self.daemon.clone(), self.wallet.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn subscription(&self) -> Subscription<Message> {
|
pub fn subscription(&self) -> Subscription<Message> {
|
||||||
|
|||||||
@ -14,6 +14,7 @@ use crate::{
|
|||||||
message::Message,
|
message::Message,
|
||||||
state::{label::LabelsEdited, State},
|
state::{label::LabelsEdited, State},
|
||||||
view,
|
view,
|
||||||
|
wallet::Wallet,
|
||||||
},
|
},
|
||||||
daemon::{
|
daemon::{
|
||||||
model::{Coin, LabelItem, Labelled},
|
model::{Coin, LabelItem, Labelled},
|
||||||
@ -150,7 +151,11 @@ impl State for CoinsPanel {
|
|||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
_wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
let daemon1 = daemon.clone();
|
let daemon1 = daemon.clone();
|
||||||
let daemon2 = daemon.clone();
|
let daemon2 = daemon.clone();
|
||||||
Command::batch(vec![
|
Command::batch(vec![
|
||||||
|
|||||||
@ -44,7 +44,11 @@ pub trait State {
|
|||||||
fn subscription(&self) -> Subscription<Message> {
|
fn subscription(&self) -> Subscription<Message> {
|
||||||
Subscription::none()
|
Subscription::none()
|
||||||
}
|
}
|
||||||
fn reload(&mut self, _daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
_daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
_wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,7 +212,7 @@ impl State for Home {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
Message::View(view::Message::Reload) => {
|
Message::View(view::Message::Reload) => {
|
||||||
return self.reload(daemon);
|
return self.reload(daemon, self.wallet.clone());
|
||||||
}
|
}
|
||||||
Message::View(view::Message::Close) => {
|
Message::View(view::Message::Close) => {
|
||||||
self.selected_event = None;
|
self.selected_event = None;
|
||||||
@ -259,8 +263,13 @@ impl State for Home {
|
|||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
self.selected_event = None;
|
self.selected_event = None;
|
||||||
|
self.wallet = wallet;
|
||||||
let daemon1 = daemon.clone();
|
let daemon1 = daemon.clone();
|
||||||
let daemon2 = daemon.clone();
|
let daemon2 = daemon.clone();
|
||||||
let daemon3 = daemon.clone();
|
let daemon3 = daemon.clone();
|
||||||
|
|||||||
@ -75,7 +75,7 @@ impl State for PsbtsPanel {
|
|||||||
) -> Command<Message> {
|
) -> Command<Message> {
|
||||||
match message {
|
match message {
|
||||||
Message::View(view::Message::Reload) | Message::View(view::Message::Close) => {
|
Message::View(view::Message::Reload) | Message::View(view::Message::Close) => {
|
||||||
return self.reload(daemon);
|
return self.reload(daemon, self.wallet.clone());
|
||||||
}
|
}
|
||||||
Message::SpendTxs(res) => match res {
|
Message::SpendTxs(res) => match res {
|
||||||
Err(e) => self.warning = Some(e),
|
Err(e) => self.warning = Some(e),
|
||||||
@ -118,7 +118,12 @@ impl State for PsbtsPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
|
self.wallet = wallet;
|
||||||
self.selected_tx = None;
|
self.selected_tx = None;
|
||||||
self.import_tx = None;
|
self.import_tx = None;
|
||||||
let daemon = daemon.clone();
|
let daemon = daemon.clone();
|
||||||
|
|||||||
@ -191,7 +191,12 @@ impl State for ReceivePanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
|
self.wallet = wallet;
|
||||||
// Fill at least with one address, user will then use the generate button.
|
// Fill at least with one address, user will then use the generate button.
|
||||||
if self.addresses.is_empty() {
|
if self.addresses.is_empty() {
|
||||||
let daemon = daemon.clone();
|
let daemon = daemon.clone();
|
||||||
@ -364,13 +369,11 @@ mod tests {
|
|||||||
ChildNumber::from_normal_idx(0).unwrap()
|
ChildNumber::from_normal_idx(0).unwrap()
|
||||||
))),
|
))),
|
||||||
)]);
|
)]);
|
||||||
|
let wallet = Arc::new(Wallet::new(LianaDescriptor::from_str(DESC).unwrap()));
|
||||||
let sandbox: Sandbox<ReceivePanel> = Sandbox::new(ReceivePanel::new(
|
let sandbox: Sandbox<ReceivePanel> =
|
||||||
PathBuf::new(),
|
Sandbox::new(ReceivePanel::new(PathBuf::new(), wallet.clone()));
|
||||||
Arc::new(Wallet::new(LianaDescriptor::from_str(DESC).unwrap())),
|
|
||||||
));
|
|
||||||
let client = Arc::new(Lianad::new(daemon.run()));
|
let client = Arc::new(Lianad::new(daemon.run()));
|
||||||
let sandbox = sandbox.load(client, &Cache::default()).await;
|
let sandbox = sandbox.load(client, &Cache::default(), wallet).await;
|
||||||
|
|
||||||
let panel = sandbox.state();
|
let panel = sandbox.state();
|
||||||
assert_eq!(panel.addresses.list, vec![addr]);
|
assert_eq!(panel.addresses.list, vec![addr]);
|
||||||
|
|||||||
@ -192,8 +192,13 @@ impl State for RecoveryPanel {
|
|||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
let daemon = daemon.clone();
|
let daemon = daemon.clone();
|
||||||
|
self.wallet = wallet;
|
||||||
self.selected_path = None;
|
self.selected_path = None;
|
||||||
self.warning = None;
|
self.warning = None;
|
||||||
self.feerate = form::Value::default();
|
self.feerate = form::Value::default();
|
||||||
|
|||||||
@ -53,25 +53,28 @@ impl State for SettingsState {
|
|||||||
)
|
)
|
||||||
.into(),
|
.into(),
|
||||||
);
|
);
|
||||||
|
let wallet = self.wallet.clone();
|
||||||
self.setting
|
self.setting
|
||||||
.as_mut()
|
.as_mut()
|
||||||
.map(|s| s.reload(daemon))
|
.map(|s| s.reload(daemon, wallet))
|
||||||
.unwrap_or_else(Command::none)
|
.unwrap_or_else(Command::none)
|
||||||
}
|
}
|
||||||
Message::View(view::Message::Settings(view::SettingsMessage::AboutSection)) => {
|
Message::View(view::Message::Settings(view::SettingsMessage::AboutSection)) => {
|
||||||
self.setting = Some(AboutSettingsState::default().into());
|
self.setting = Some(AboutSettingsState::default().into());
|
||||||
|
let wallet = self.wallet.clone();
|
||||||
self.setting
|
self.setting
|
||||||
.as_mut()
|
.as_mut()
|
||||||
.map(|s| s.reload(daemon))
|
.map(|s| s.reload(daemon, wallet))
|
||||||
.unwrap_or_else(Command::none)
|
.unwrap_or_else(Command::none)
|
||||||
}
|
}
|
||||||
Message::View(view::Message::Settings(view::SettingsMessage::EditWalletSettings)) => {
|
Message::View(view::Message::Settings(view::SettingsMessage::EditWalletSettings)) => {
|
||||||
self.setting = Some(
|
self.setting = Some(
|
||||||
WalletSettingsState::new(self.data_dir.clone(), self.wallet.clone()).into(),
|
WalletSettingsState::new(self.data_dir.clone(), self.wallet.clone()).into(),
|
||||||
);
|
);
|
||||||
|
let wallet = self.wallet.clone();
|
||||||
self.setting
|
self.setting
|
||||||
.as_mut()
|
.as_mut()
|
||||||
.map(|s| s.reload(daemon))
|
.map(|s| s.reload(daemon, wallet))
|
||||||
.unwrap_or_else(Command::none)
|
.unwrap_or_else(Command::none)
|
||||||
}
|
}
|
||||||
_ => self
|
_ => self
|
||||||
@ -98,8 +101,13 @@ impl State for SettingsState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, _daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
_daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
self.setting = None;
|
self.setting = None;
|
||||||
|
self.wallet = wallet;
|
||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,7 +158,11 @@ impl State for AboutSettingsState {
|
|||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
_wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
Command::perform(
|
Command::perform(
|
||||||
async move { daemon.get_info().map_err(|e| e.into()) },
|
async move { daemon.get_info().map_err(|e| e.into()) },
|
||||||
Message::Info,
|
Message::Info,
|
||||||
|
|||||||
@ -180,7 +180,14 @@ impl State for WalletSettingsState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
|
self.descriptor = wallet.main_descriptor.to_string();
|
||||||
|
self.keys_aliases = Self::keys_aliases(&wallet);
|
||||||
|
self.wallet = wallet;
|
||||||
Command::perform(
|
Command::perform(
|
||||||
async move { daemon.get_info().map_err(|e| e.into()) },
|
async move { daemon.get_info().map_err(|e| e.into()) },
|
||||||
Message::Info,
|
Message::Info,
|
||||||
|
|||||||
@ -112,7 +112,11 @@ impl State for CreateSpendPanel {
|
|||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
_wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
let daemon1 = daemon.clone();
|
let daemon1 = daemon.clone();
|
||||||
let daemon2 = daemon.clone();
|
let daemon2 = daemon.clone();
|
||||||
Command::batch(vec![
|
Command::batch(vec![
|
||||||
|
|||||||
@ -22,6 +22,7 @@ use crate::{
|
|||||||
message::Message,
|
message::Message,
|
||||||
state::{label::LabelsEdited, State},
|
state::{label::LabelsEdited, State},
|
||||||
view,
|
view,
|
||||||
|
wallet::Wallet,
|
||||||
},
|
},
|
||||||
daemon::model,
|
daemon::model,
|
||||||
};
|
};
|
||||||
@ -31,8 +32,8 @@ use crate::daemon::{
|
|||||||
Daemon,
|
Daemon,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct TransactionsPanel {
|
pub struct TransactionsPanel {
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
pending_txs: Vec<HistoryTransaction>,
|
pending_txs: Vec<HistoryTransaction>,
|
||||||
txs: Vec<HistoryTransaction>,
|
txs: Vec<HistoryTransaction>,
|
||||||
labels_edited: LabelsEdited,
|
labels_edited: LabelsEdited,
|
||||||
@ -42,8 +43,9 @@ pub struct TransactionsPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TransactionsPanel {
|
impl TransactionsPanel {
|
||||||
pub fn new() -> Self {
|
pub fn new(wallet: Arc<Wallet>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
wallet,
|
||||||
selected_tx: None,
|
selected_tx: None,
|
||||||
txs: Vec::new(),
|
txs: Vec::new(),
|
||||||
pending_txs: Vec::new(),
|
pending_txs: Vec::new(),
|
||||||
@ -120,7 +122,7 @@ impl State for TransactionsPanel {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
Message::View(view::Message::Reload) | Message::View(view::Message::Close) => {
|
Message::View(view::Message::Reload) | Message::View(view::Message::Close) => {
|
||||||
return self.reload(daemon);
|
return self.reload(daemon, self.wallet.clone());
|
||||||
}
|
}
|
||||||
Message::View(view::Message::Select(i)) => {
|
Message::View(view::Message::Select(i)) => {
|
||||||
self.selected_tx = if i < self.pending_txs.len() {
|
self.selected_tx = if i < self.pending_txs.len() {
|
||||||
@ -225,7 +227,11 @@ impl State for TransactionsPanel {
|
|||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reload(&mut self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
|
fn reload(
|
||||||
|
&mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
_wallet: Arc<Wallet>,
|
||||||
|
) -> Command<Message> {
|
||||||
self.selected_tx = None;
|
self.selected_tx = None;
|
||||||
let daemon1 = daemon.clone();
|
let daemon1 = daemon.clone();
|
||||||
let daemon2 = daemon.clone();
|
let daemon2 = daemon.clone();
|
||||||
|
|||||||
@ -3,7 +3,7 @@ use std::sync::Arc;
|
|||||||
use iced_native::command::Action;
|
use iced_native::command::Action;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
app::{cache::Cache, message::Message, state::State},
|
app::{cache::Cache, message::Message, state::State, wallet::Wallet},
|
||||||
daemon::Daemon,
|
daemon::Daemon,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -37,8 +37,13 @@ impl<S: State + Send + 'static> Sandbox<S> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn load(mut self, daemon: Arc<dyn Daemon + Sync + Send>, cache: &Cache) -> Self {
|
pub async fn load(
|
||||||
let cmd = self.state.reload(daemon.clone());
|
mut self,
|
||||||
|
daemon: Arc<dyn Daemon + Sync + Send>,
|
||||||
|
cache: &Cache,
|
||||||
|
wallet: Arc<Wallet>,
|
||||||
|
) -> Self {
|
||||||
|
let cmd = self.state.reload(daemon.clone(), wallet);
|
||||||
for action in cmd.actions() {
|
for action in cmd.actions() {
|
||||||
if let Action::Future(f) = action {
|
if let Action::Future(f) = action {
|
||||||
let msg = f.await;
|
let msg = f.await;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user