diff --git a/liana-gui/src/installer/step/descriptor/editor/key.rs b/liana-gui/src/installer/step/descriptor/editor/key.rs index 599d8a77..ceb6a09e 100644 --- a/liana-gui/src/installer/step/descriptor/editor/key.rs +++ b/liana-gui/src/installer/step/descriptor/editor/key.rs @@ -459,6 +459,7 @@ impl super::DescriptorEditModal for EditXpubModal { hw.fingerprint() == chosen_signer, self.processing, hw.fingerprint() == chosen_signer, + None, self.device_must_support_tapminiscript, )) } diff --git a/liana-gui/src/installer/step/descriptor/mod.rs b/liana-gui/src/installer/step/descriptor/mod.rs index 866fb447..7933fb77 100644 --- a/liana-gui/src/installer/step/descriptor/mod.rs +++ b/liana-gui/src/installer/step/descriptor/mod.rs @@ -306,10 +306,11 @@ impl Step for RegisterDescriptor { email: Option<&'a str>, ) -> Element<'a, Message> { let desc = self.descriptor.as_ref().unwrap(); + view::register_descriptor( progress, email, - desc.to_string(), + desc, &hws.list, &self.registered, self.error.as_ref(), diff --git a/liana-gui/src/installer/view/mod.rs b/liana-gui/src/installer/view/mod.rs index 7aea026e..0f23b2ab 100644 --- a/liana-gui/src/installer/view/mod.rs +++ b/liana-gui/src/installer/view/mod.rs @@ -584,7 +584,7 @@ pub fn share_xpubs<'a>( pub fn register_descriptor<'a>( progress: (usize, usize), email: Option<&'a str>, - descriptor: String, + descriptor: &'a LianaDescriptor, hws: &'a [HardwareWallet], registered: &HashSet, error: Option<&Error>, @@ -593,8 +593,9 @@ pub fn register_descriptor<'a>( done: bool, created_desc: bool, ) -> Element<'a, Message> { + let descriptor_str = descriptor.to_string(); let displayed_descriptor = - if let Ok((template, keys)) = extract_keys_and_template::(&descriptor) { + if let Ok((template, keys)) = extract_keys_and_template::(&descriptor_str) { let mut col = Column::new() .push( card::simple( @@ -651,7 +652,7 @@ pub fn register_descriptor<'a>( .push( scrollable( Column::new() - .push(text(descriptor.to_owned()).small()) + .push(text(descriptor_str.to_owned()).small()) .push(Space::with_height(Length::Fixed(5.0))), ) .direction(scrollable::Direction::Horizontal( @@ -661,7 +662,7 @@ pub fn register_descriptor<'a>( .push( Row::new().push(Column::new().width(Length::Fill)).push( button::secondary(Some(icon::clipboard_icon()), "Copy") - .on_press(Message::Clibpboard(descriptor)), + .on_press(Message::Clibpboard(descriptor_str)), ), ) .spacing(10), @@ -705,6 +706,7 @@ pub fn register_descriptor<'a>( hw.fingerprint() .map(|fg| registered.contains(&fg)) .unwrap_or(false), + Some(descriptor), false, )) }), @@ -1642,14 +1644,16 @@ pub fn defined_sequence<'a>( .into() } -pub fn hw_list_view( +pub fn hw_list_view<'a>( i: usize, - hw: &HardwareWallet, + hw: &'a HardwareWallet, chosen: bool, processing: bool, selected: bool, + descriptor: Option<&'a LianaDescriptor>, device_must_support_taproot: bool, -) -> Element { +) -> Element<'a, Message> { + let mut unrelated = false; let mut bttn = Button::new(match hw { HardwareWallet::Supported { kind, @@ -1658,9 +1662,15 @@ pub fn hw_list_view( alias, .. } => { + let device_in_descriptor = descriptor + .map(|d| d.contains_fingerprint(*fingerprint)) + .unwrap_or(true); let not_tapminiscript = device_must_support_taproot && !is_compatible_with_tapminiscript(kind, version.as_ref()); - if chosen && processing { + if !device_in_descriptor { + unrelated = true; + hw::unrelated_hardware_wallet(kind.to_string(), version.as_ref(), fingerprint) + } else if chosen && processing { hw::processing_hardware_wallet(kind, version.as_ref(), fingerprint, alias.as_ref()) } else if selected { hw::selected_hardware_wallet(kind, version.as_ref(), fingerprint, alias.as_ref(), { @@ -1709,7 +1719,7 @@ pub fn hw_list_view( }) .style(theme::button::secondary) .width(Length::Fill); - if !processing && hw.is_supported() { + if !processing && hw.is_supported() && !unrelated { bttn = bttn.on_press(Message::Select(i)); } bttn.into()