Skip to content

Commit

Permalink
feat: Fetch firmware from fwupd in advance
Browse files Browse the repository at this point in the history
Firmware from fwupd, when updates are available, will be fetched in advance, before it is shown in the UI.

Closes #59
  • Loading branch information
mmstick committed Aug 30, 2019
1 parent 4f15396 commit 005bf42
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 6 deletions.
2 changes: 1 addition & 1 deletion notify/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ fn main() {
eprintln!("failed to update fwupd remotes: {}", why);
}

fwupd_scan(client, &event_handler);
fwupd_scan(client, http_client, &event_handler);
}
}
}
Expand Down
27 changes: 23 additions & 4 deletions src/fwupd.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
//! Functions specific to working with fwupd firmware.

use crate::{FirmwareInfo, FirmwareSignal};
use fwupd_dbus::{Client as FwupdClient, Device as FwupdDevice, Release as FwupdRelease};
use std::{cmp::Ordering, error::Error as _, io, process::Command};
use fwupd_dbus::{
Client as FwupdClient, Device as FwupdDevice, FlashEvent, Release as FwupdRelease,
};
use reqwest::Client as HttpClient;
use std::cmp::Ordering;

/// A signal sent when a fwupd-compatible device has been discovered.
#[derive(Debug)]
Expand All @@ -18,7 +21,7 @@ pub struct FwupdSignal {
}

/// Scan for supported devices from the fwupd DBus daemon.
pub fn fwupd_scan<F: Fn(FirmwareSignal)>(fwupd: &FwupdClient, sender: F) {
pub fn fwupd_scan<F: Fn(FirmwareSignal)>(fwupd: &FwupdClient, http: &HttpClient, sender: F) {
info!("scanning fwupd devices");

let devices = match fwupd.devices() {
Expand All @@ -36,7 +39,23 @@ pub fn fwupd_scan<F: Fn(FirmwareSignal)>(fwupd: &FwupdClient, sender: F) {
crate::sort_versions(&mut releases);

let latest = releases.iter().last().expect("no releases");
let upgradeable = is_newer(&device.version, &latest.version);
let mut upgradeable = is_newer(&device.version, &latest.version);

if upgradeable {
if let Err(why) = fwupd.fetch_firmware_from_release(
http,
&device,
latest,
None::<fn(FlashEvent)>,
) {
error!(
"failed to fetch firmware for {}: {}",
device.name,
crate::format_error(why)
);
upgradeable = false;
}
}

sender(FirmwareSignal::Fwupd(FwupdSignal {
info: FirmwareInfo {
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ pub fn event_loop<F: Fn(FirmwareSignal)>(receiver: Receiver<FirmwareEvent>, send
if let Err(why) = fwupd_updates(client, http_client) {
eprintln!("failed to update fwupd remotes: {}", why);
}
fwupd_scan(client, sender);
fwupd_scan(client, http_client, sender);
}
}

Expand Down

0 comments on commit 005bf42

Please sign in to comment.