Merge #353: gui: enumerate multiple ledger devices

e26a6313180220ffa507ea4c0745fee8cf86ee25 gui: enumerate multiple ledger devices (edouard)

Pull request description:

  close #165

ACKs for top commit:
  edouardparis:
    Self-ACK e26a6313180220ffa507ea4c0745fee8cf86ee25

Tree-SHA512: 6eee38e49d75215db78d350a8480766e62ba34c874e88a15f0d0bcd49b8f16834054fc2a5c18e1a248aae42619f1b42505accaa79ecafa09d0e1bbddfdebacb6
This commit is contained in:
edouard 2023-02-17 14:02:42 +01:00
commit ca5c368c07
No known key found for this signature in database
GPG Key ID: E65F7A089C20DC8F
3 changed files with 52 additions and 43 deletions

4
gui/Cargo.lock generated
View File

@ -145,9 +145,9 @@ dependencies = [
[[package]]
name = "async-hwi"
version = "0.0.3"
version = "0.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5df769ed2ee66f45f290602647bfb48f7c652d6d8bb9dd8eb104fdfb0ac48919"
checksum = "b3b6805d43fc4b11c8f2a16f0aa8dca5b8b8702c3a23aa0a1a2ec1b42c98ebb7"
dependencies = [
"async-trait",
"base64",

View File

@ -14,7 +14,7 @@ name = "liana-gui"
path = "src/main.rs"
[dependencies]
async-hwi = "0.0.3"
async-hwi = "0.0.4"
liana = { git = "https://github.com/wizardsardine/liana", branch = "master", default-features = false }
backtrace = "0.3"
base64 = "0.13"

View File

@ -151,49 +151,58 @@ pub async fn list_hardware_wallets(
debug!("{}", e);
}
}
match ledger::Ledger::try_connect_hid() {
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.to_string())
.map(|cfg| cfg.token()),
)
.expect("Configuration must be correct");
}
let version = device.get_version().await.ok();
if ledger_version_supported(version.as_ref()) {
hws.push(HardwareWallet::Supported {
kind: device.device_kind(),
fingerprint,
device: Arc::new(device),
version,
});
} else {
hws.push(HardwareWallet::Unsupported {
kind: device.device_kind(),
version,
message: "Minimal supported app version is 2.1.0".to_string(),
});
}
}
Err(_) => {
hws.push(HardwareWallet::Unsupported {
kind: device.device_kind(),
version: None,
message: "Minimal supported app version is 2.1.0".to_string(),
});
}
},
Err(HWIError::DeviceNotFound) => {}
match ledger::HidApi::new() {
Err(e) => {
debug!("{}", e);
}
Ok(api) => {
for detected in ledger::Ledger::<ledger::TransportHID>::enumerate(&api) {
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.to_string())
.map(|cfg| cfg.token()),
)
.expect("Configuration must be correct");
}
let version = device.get_version().await.ok();
if ledger_version_supported(version.as_ref()) {
hws.push(HardwareWallet::Supported {
kind: device.device_kind(),
fingerprint,
device: Arc::new(device),
version,
});
} else {
hws.push(HardwareWallet::Unsupported {
kind: device.device_kind(),
version,
message: "Minimal supported app version is 2.1.0".to_string(),
});
}
}
Err(_) => {
hws.push(HardwareWallet::Unsupported {
kind: device.device_kind(),
version: None,
message: "Minimal supported app version is 2.1.0".to_string(),
});
}
},
Err(HWIError::DeviceNotFound) => {}
Err(e) => {
debug!("{}", e);
}
}
}
}
}
hws
}