Make user finish sign process before opening new modal
This commit is contained in:
parent
1d1a281955
commit
874d2d4068
@ -165,10 +165,17 @@ impl PsbtState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Message::View(view::Message::Spend(view::SpendTxMessage::Cancel)) => {
|
Message::View(view::Message::Spend(view::SpendTxMessage::Cancel)) => {
|
||||||
if let Some(PsbtModal::Sign(SignModal { display_modal, .. })) = &mut self.modal {
|
if let Some(PsbtModal::Sign(SignModal {
|
||||||
|
display_modal,
|
||||||
|
signing,
|
||||||
|
..
|
||||||
|
})) = &mut self.modal
|
||||||
|
{
|
||||||
|
if !signing.is_empty() {
|
||||||
*display_modal = false;
|
*display_modal = false;
|
||||||
return Task::none();
|
return Task::none();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.modal = None;
|
self.modal = None;
|
||||||
}
|
}
|
||||||
@ -231,7 +238,15 @@ impl PsbtState {
|
|||||||
Message::Updated(Ok(_)) => {
|
Message::Updated(Ok(_)) => {
|
||||||
self.saved = true;
|
self.saved = true;
|
||||||
if let Some(modal) = self.modal.as_mut() {
|
if let Some(modal) = self.modal.as_mut() {
|
||||||
return modal.as_mut().update(daemon.clone(), message, &mut self.tx);
|
let cmd = modal.as_mut().update(daemon.clone(), message, &mut self.tx);
|
||||||
|
// if modal is only the pending notif then we remove it once the psbt was
|
||||||
|
// updated.
|
||||||
|
if let PsbtModal::Sign(SignModal { display_modal, .. }) = modal {
|
||||||
|
if !*display_modal {
|
||||||
|
self.modal = None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cmd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Message::BroadcastModal(res) => match res {
|
Message::BroadcastModal(res) => match res {
|
||||||
@ -271,6 +286,11 @@ impl PsbtState {
|
|||||||
&self.wallet.keys_aliases,
|
&self.wallet.keys_aliases,
|
||||||
self.labels_edited.cache(),
|
self.labels_edited.cache(),
|
||||||
cache.network,
|
cache.network,
|
||||||
|
if let Some(PsbtModal::Sign(m)) = &self.modal {
|
||||||
|
m.is_signing()
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
},
|
||||||
self.warning.as_ref(),
|
self.warning.as_ref(),
|
||||||
);
|
);
|
||||||
if let Some(modal) = &self.modal {
|
if let Some(modal) = &self.modal {
|
||||||
@ -462,6 +482,10 @@ impl SignModal {
|
|||||||
recovery_timelock,
|
recovery_timelock,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_signing(&self) -> bool {
|
||||||
|
!self.signing.is_empty()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Modal for SignModal {
|
impl Modal for SignModal {
|
||||||
@ -503,6 +527,7 @@ impl Modal for SignModal {
|
|||||||
self.signing.remove(&fingerprint);
|
self.signing.remove(&fingerprint);
|
||||||
match res {
|
match res {
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
self.display_modal = true;
|
||||||
if !matches!(e, Error::HardwareWallet(async_hwi::Error::UserRefused)) {
|
if !matches!(e, Error::HardwareWallet(async_hwi::Error::UserRefused)) {
|
||||||
self.error = Some(e)
|
self.error = Some(e)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1018,6 +1018,11 @@ impl Step for SaveSpend {
|
|||||||
&psbt_state.wallet.keys_aliases,
|
&psbt_state.wallet.keys_aliases,
|
||||||
psbt_state.labels_edited.cache(),
|
psbt_state.labels_edited.cache(),
|
||||||
cache.network,
|
cache.network,
|
||||||
|
if let Some(psbt::PsbtModal::Sign(m)) = &psbt_state.modal {
|
||||||
|
m.is_signing()
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
},
|
||||||
psbt_state.warning.as_ref(),
|
psbt_state.warning.as_ref(),
|
||||||
);
|
);
|
||||||
if let Some(modal) = &psbt_state.modal {
|
if let Some(modal) = &psbt_state.modal {
|
||||||
|
|||||||
@ -46,6 +46,7 @@ pub fn psbt_view<'a>(
|
|||||||
key_aliases: &'a HashMap<Fingerprint, String>,
|
key_aliases: &'a HashMap<Fingerprint, String>,
|
||||||
labels_editing: &'a HashMap<String, form::Value<String>>,
|
labels_editing: &'a HashMap<String, form::Value<String>>,
|
||||||
network: Network,
|
network: Network,
|
||||||
|
currently_signing: bool,
|
||||||
warning: Option<&Error>,
|
warning: Option<&Error>,
|
||||||
) -> Element<'a, Message> {
|
) -> Element<'a, Message> {
|
||||||
dashboard(
|
dashboard(
|
||||||
@ -72,7 +73,12 @@ pub fn psbt_view<'a>(
|
|||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.push(spend_header(tx, labels_editing))
|
.push(spend_header(tx, labels_editing))
|
||||||
.push(spend_overview_view(tx, desc_info, key_aliases))
|
.push(spend_overview_view(
|
||||||
|
tx,
|
||||||
|
desc_info,
|
||||||
|
key_aliases,
|
||||||
|
currently_signing,
|
||||||
|
))
|
||||||
.push(
|
.push(
|
||||||
Column::new()
|
Column::new()
|
||||||
.spacing(20)
|
.spacing(20)
|
||||||
@ -96,7 +102,11 @@ pub fn psbt_view<'a>(
|
|||||||
.push(
|
.push(
|
||||||
button::secondary(None, "Delete")
|
button::secondary(None, "Delete")
|
||||||
.width(Length::Fixed(200.0))
|
.width(Length::Fixed(200.0))
|
||||||
.on_press(Message::Spend(SpendTxMessage::Delete)),
|
.on_press_maybe(if currently_signing {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Message::Spend(SpendTxMessage::Delete))
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
} else {
|
} else {
|
||||||
@ -105,7 +115,11 @@ pub fn psbt_view<'a>(
|
|||||||
.push(
|
.push(
|
||||||
button::secondary(None, "Save")
|
button::secondary(None, "Save")
|
||||||
.width(Length::Fixed(150.0))
|
.width(Length::Fixed(150.0))
|
||||||
.on_press(Message::Spend(SpendTxMessage::Save)),
|
.on_press_maybe(if currently_signing {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Message::Spend(SpendTxMessage::Save))
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
})
|
})
|
||||||
@ -321,6 +335,7 @@ pub fn spend_overview_view<'a>(
|
|||||||
tx: &'a SpendTx,
|
tx: &'a SpendTx,
|
||||||
desc_info: &'a LianaPolicy,
|
desc_info: &'a LianaPolicy,
|
||||||
key_aliases: &'a HashMap<Fingerprint, String>,
|
key_aliases: &'a HashMap<Fingerprint, String>,
|
||||||
|
currently_signing: bool,
|
||||||
) -> Element<'a, Message> {
|
) -> Element<'a, Message> {
|
||||||
Column::new()
|
Column::new()
|
||||||
.spacing(20)
|
.spacing(20)
|
||||||
@ -343,14 +358,22 @@ pub fn spend_overview_view<'a>(
|
|||||||
Some(icon::backup_icon()),
|
Some(icon::backup_icon()),
|
||||||
"Export",
|
"Export",
|
||||||
)
|
)
|
||||||
.on_press(Message::ExportPsbt),
|
.on_press_maybe(if currently_signing {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Message::ExportPsbt)
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.push(
|
.push(
|
||||||
button::secondary(
|
button::secondary(
|
||||||
Some(icon::restore_icon()),
|
Some(icon::restore_icon()),
|
||||||
"Import",
|
"Import",
|
||||||
)
|
)
|
||||||
.on_press(Message::ImportPsbt),
|
.on_press_maybe(if currently_signing {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Message::ImportPsbt)
|
||||||
|
}),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.align_y(Alignment::Center),
|
.align_y(Alignment::Center),
|
||||||
|
|||||||
@ -37,6 +37,7 @@ pub fn spend_view<'a>(
|
|||||||
key_aliases: &'a HashMap<Fingerprint, String>,
|
key_aliases: &'a HashMap<Fingerprint, String>,
|
||||||
labels_editing: &'a HashMap<String, form::Value<String>>,
|
labels_editing: &'a HashMap<String, form::Value<String>>,
|
||||||
network: Network,
|
network: Network,
|
||||||
|
currently_signing: bool,
|
||||||
warning: Option<&Error>,
|
warning: Option<&Error>,
|
||||||
) -> Element<'a, Message> {
|
) -> Element<'a, Message> {
|
||||||
let is_recovery = tx
|
let is_recovery = tx
|
||||||
@ -75,7 +76,12 @@ pub fn spend_view<'a>(
|
|||||||
},
|
},
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
.push(psbt::spend_overview_view(tx, desc_info, key_aliases))
|
.push(psbt::spend_overview_view(
|
||||||
|
tx,
|
||||||
|
desc_info,
|
||||||
|
key_aliases,
|
||||||
|
currently_signing,
|
||||||
|
))
|
||||||
.push(
|
.push(
|
||||||
Column::new()
|
Column::new()
|
||||||
.spacing(20)
|
.spacing(20)
|
||||||
@ -99,7 +105,11 @@ pub fn spend_view<'a>(
|
|||||||
.push(
|
.push(
|
||||||
button::secondary(None, "Delete")
|
button::secondary(None, "Delete")
|
||||||
.width(Length::Fixed(200.0))
|
.width(Length::Fixed(200.0))
|
||||||
.on_press(Message::Spend(SpendTxMessage::Delete)),
|
.on_press_maybe(if currently_signing {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Message::Spend(SpendTxMessage::Delete))
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
} else {
|
} else {
|
||||||
@ -107,13 +117,21 @@ pub fn spend_view<'a>(
|
|||||||
.push(
|
.push(
|
||||||
button::secondary(None, "< Previous")
|
button::secondary(None, "< Previous")
|
||||||
.width(Length::Fixed(150.0))
|
.width(Length::Fixed(150.0))
|
||||||
.on_press(Message::Previous),
|
.on_press_maybe(if currently_signing {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Message::Previous)
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.push(Space::with_width(Length::Fill))
|
.push(Space::with_width(Length::Fill))
|
||||||
.push(
|
.push(
|
||||||
button::secondary(None, "Save")
|
button::secondary(None, "Save")
|
||||||
.width(Length::Fixed(150.0))
|
.width(Length::Fixed(150.0))
|
||||||
.on_press(Message::Spend(SpendTxMessage::Save)),
|
.on_press_maybe(if currently_signing {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Message::Spend(SpendTxMessage::Save))
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
}),
|
}),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user