parent
cbc03202ca
commit
3287488737
@ -10,13 +10,116 @@ use liana_ui::{
|
||||
|
||||
use crate::{app::view::message::*, hw::HardwareWallet};
|
||||
|
||||
pub fn hw_list_view<'a>(
|
||||
pub fn hw_list_view(
|
||||
i: usize,
|
||||
hw: &'a HardwareWallet,
|
||||
hw: &HardwareWallet,
|
||||
chosen: bool,
|
||||
processing: bool,
|
||||
status: Option<&'a str>,
|
||||
) -> Element<'a, Message> {
|
||||
signed: bool,
|
||||
) -> Element<Message> {
|
||||
let mut bttn = Button::new(
|
||||
Row::new()
|
||||
.push(
|
||||
Column::new()
|
||||
.push(text(format!("{}", hw.kind())).bold())
|
||||
.push(match hw {
|
||||
HardwareWallet::Supported {
|
||||
fingerprint,
|
||||
version,
|
||||
registered,
|
||||
..
|
||||
} => Row::new()
|
||||
.align_items(Alignment::Center)
|
||||
.spacing(5)
|
||||
.push(text(format!("fingerprint: {}", fingerprint)).small())
|
||||
.push_maybe(
|
||||
version
|
||||
.as_ref()
|
||||
.map(|v| text(format!("version: {}", v)).small()),
|
||||
)
|
||||
.push_maybe(registered.and_then(|registered|
|
||||
if !registered {
|
||||
Some(Row::new()
|
||||
.spacing(5)
|
||||
.align_items(Alignment::Center)
|
||||
.push(text("unregistered").small())
|
||||
.push(
|
||||
tooltip::Tooltip::new(
|
||||
icon::warning_icon(),
|
||||
"Policy is not registered on the device.\n You can register it in the settings.",
|
||||
tooltip::Position::Bottom,
|
||||
).style(theme::Container::Card(theme::Card::Simple))))
|
||||
} else {
|
||||
None
|
||||
})
|
||||
),
|
||||
HardwareWallet::Unsupported {
|
||||
version, message, ..
|
||||
} => Row::new()
|
||||
.spacing(5)
|
||||
.push_maybe(
|
||||
version
|
||||
.as_ref()
|
||||
.map(|v| text(format!("version: {}", v)).small()),
|
||||
)
|
||||
.push(
|
||||
tooltip::Tooltip::new(
|
||||
icon::warning_icon(),
|
||||
message,
|
||||
tooltip::Position::Bottom,
|
||||
)
|
||||
.style(theme::Container::Card(theme::Card::Simple)),
|
||||
),
|
||||
})
|
||||
.spacing(5)
|
||||
.width(Length::Fill),
|
||||
)
|
||||
.push_maybe(if chosen && processing {
|
||||
Some(
|
||||
Column::new()
|
||||
.push(text("Processing..."))
|
||||
.push(text("Please check your device").small()),
|
||||
)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
.push_maybe(if signed {
|
||||
Some(
|
||||
Row::new()
|
||||
.align_items(Alignment::Center)
|
||||
.spacing(5)
|
||||
.push(icon::circle_check_icon().style(color::legacy::SUCCESS))
|
||||
.push(text("Signed").style(color::legacy::SUCCESS)),
|
||||
)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
.align_items(Alignment::Center)
|
||||
.width(Length::Fill),
|
||||
)
|
||||
.padding(10)
|
||||
.style(theme::Button::Secondary)
|
||||
.width(Length::Fill);
|
||||
if !processing {
|
||||
if let HardwareWallet::Supported { registered, .. } = hw {
|
||||
if *registered != Some(false) {
|
||||
bttn = bttn.on_press(Message::SelectHardwareWallet(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
Container::new(bttn)
|
||||
.width(Length::Fill)
|
||||
.style(theme::Container::Card(theme::Card::Simple))
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn hw_list_view_for_registration(
|
||||
i: usize,
|
||||
hw: &HardwareWallet,
|
||||
chosen: bool,
|
||||
processing: bool,
|
||||
registered: bool,
|
||||
) -> Element<Message> {
|
||||
let mut bttn = Button::new(
|
||||
Row::new()
|
||||
.push(
|
||||
@ -65,13 +168,17 @@ pub fn hw_list_view<'a>(
|
||||
} else {
|
||||
None
|
||||
})
|
||||
.push_maybe(status.map(|v| {
|
||||
Row::new()
|
||||
.align_items(Alignment::Center)
|
||||
.spacing(5)
|
||||
.push(icon::circle_check_icon().style(color::legacy::SUCCESS))
|
||||
.push(text(v).style(color::legacy::SUCCESS))
|
||||
}))
|
||||
.push_maybe(if registered {
|
||||
Some(
|
||||
Row::new()
|
||||
.align_items(Alignment::Center)
|
||||
.spacing(5)
|
||||
.push(icon::circle_check_icon().style(color::legacy::SUCCESS))
|
||||
.push(text("Registered").style(color::legacy::SUCCESS)),
|
||||
)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
.align_items(Alignment::Center)
|
||||
.width(Length::Fill),
|
||||
)
|
||||
|
||||
@ -644,18 +644,14 @@ pub fn register_wallet_modal<'a>(
|
||||
.push(hws.iter().enumerate().fold(
|
||||
Column::new().spacing(10),
|
||||
|col, (i, hw)| {
|
||||
col.push(hw::hw_list_view(
|
||||
col.push(hw::hw_list_view_for_registration(
|
||||
i,
|
||||
hw,
|
||||
Some(i) == chosen_hw,
|
||||
processing,
|
||||
hw.fingerprint().and_then(|f| {
|
||||
if registered.contains(&f) {
|
||||
Some("Registered")
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}),
|
||||
hw.fingerprint()
|
||||
.map(|f| registered.contains(&f))
|
||||
.unwrap_or(false),
|
||||
))
|
||||
},
|
||||
))
|
||||
|
||||
@ -739,13 +739,9 @@ pub fn sign_action<'a>(
|
||||
hw,
|
||||
Some(i) == chosen_hw,
|
||||
processing,
|
||||
hw.fingerprint().and_then(|f| {
|
||||
if signed.contains(&f) {
|
||||
Some("Signed")
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}),
|
||||
hw.fingerprint()
|
||||
.map(|f| signed.contains(&f))
|
||||
.unwrap_or(false),
|
||||
))
|
||||
},
|
||||
))
|
||||
|
||||
@ -20,6 +20,7 @@ pub enum HardwareWallet {
|
||||
kind: DeviceKind,
|
||||
fingerprint: Fingerprint,
|
||||
version: Option<Version>,
|
||||
registered: Option<bool>,
|
||||
},
|
||||
}
|
||||
|
||||
@ -33,6 +34,7 @@ impl HardwareWallet {
|
||||
kind,
|
||||
fingerprint,
|
||||
version,
|
||||
registered: None,
|
||||
})
|
||||
}
|
||||
|
||||
@ -110,25 +112,23 @@ pub async fn list_hardware_wallets(
|
||||
match ledger::LedgerSimulator::try_connect().await {
|
||||
Ok(mut device) => match device.get_master_fingerprint().await {
|
||||
Ok(fingerprint) => {
|
||||
if let Some((name, descriptor)) = wallet {
|
||||
device
|
||||
.load_wallet(
|
||||
name,
|
||||
descriptor,
|
||||
cfg.iter()
|
||||
.find(|cfg| cfg.fingerprint == fingerprint)
|
||||
.map(|cfg| cfg.token()),
|
||||
)
|
||||
.expect("Configuration must be correct");
|
||||
}
|
||||
|
||||
let version = device.get_version().await.ok();
|
||||
if ledger_version_supported(version.as_ref()) {
|
||||
let mut registered = false;
|
||||
if let Some((name, descriptor)) = wallet {
|
||||
if let Some(cfg) = cfg.iter().find(|cfg| cfg.fingerprint == fingerprint) {
|
||||
device
|
||||
.load_wallet(name, descriptor, Some(cfg.token()))
|
||||
.expect("Configuration must be correct");
|
||||
registered = true;
|
||||
}
|
||||
}
|
||||
hws.push(HardwareWallet::Supported {
|
||||
kind: device.device_kind(),
|
||||
fingerprint,
|
||||
device: Arc::new(device),
|
||||
version,
|
||||
registered: Some(registered),
|
||||
});
|
||||
} else {
|
||||
hws.push(HardwareWallet::Unsupported {
|
||||
@ -160,25 +160,25 @@ pub async fn list_hardware_wallets(
|
||||
match ledger::Ledger::<ledger::TransportHID>::connect(&api, detected) {
|
||||
Ok(mut device) => match device.get_master_fingerprint().await {
|
||||
Ok(fingerprint) => {
|
||||
if let Some((name, descriptor)) = wallet {
|
||||
device
|
||||
.load_wallet(
|
||||
name,
|
||||
descriptor,
|
||||
cfg.iter()
|
||||
.find(|cfg| cfg.fingerprint == fingerprint)
|
||||
.map(|cfg| cfg.token()),
|
||||
)
|
||||
.expect("Configuration must be correct");
|
||||
}
|
||||
|
||||
let version = device.get_version().await.ok();
|
||||
if ledger_version_supported(version.as_ref()) {
|
||||
let mut registered = false;
|
||||
if let Some((name, descriptor)) = wallet {
|
||||
if let Some(cfg) =
|
||||
cfg.iter().find(|cfg| cfg.fingerprint == fingerprint)
|
||||
{
|
||||
device
|
||||
.load_wallet(name, descriptor, Some(cfg.token()))
|
||||
.expect("Configuration must be correct");
|
||||
registered = true;
|
||||
}
|
||||
}
|
||||
hws.push(HardwareWallet::Supported {
|
||||
kind: device.device_kind(),
|
||||
fingerprint,
|
||||
device: Arc::new(device),
|
||||
version,
|
||||
registered: Some(registered),
|
||||
});
|
||||
} else {
|
||||
hws.push(HardwareWallet::Unsupported {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user