refactor: trim the folder mark's allocations and indirection
The unmarked-folder span and size string allocated per row per frame for nothing, and a filter/map_or_else chain built a string that only one state ever fills. A matches! fills it directly.
This commit is contained in:
@@ -174,7 +174,7 @@ fn render_browse_one(
|
|||||||
.collect();
|
.collect();
|
||||||
let transfer = folder_status(&below);
|
let transfer = folder_status(&below);
|
||||||
let marker = transfer.map_or_else(
|
let marker = transfer.map_or_else(
|
||||||
|| Span::raw(String::new()),
|
|| Span::raw(""),
|
||||||
|status| {
|
|status| {
|
||||||
let (glyph, style) =
|
let (glyph, style) =
|
||||||
download_status_glyph(status);
|
download_status_glyph(status);
|
||||||
@@ -182,16 +182,14 @@ fn render_browse_one(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
let open = if row.expanded { "▾" } else { "▸" };
|
let open = if row.expanded { "▾" } else { "▸" };
|
||||||
let size = transfer
|
let size = if matches!(
|
||||||
.filter(|status| {
|
transfer,
|
||||||
matches!(
|
Some(DownloadStatus::InProgress { .. })
|
||||||
status,
|
) {
|
||||||
DownloadStatus::InProgress { .. }
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.map_or_else(String::new, |_| {
|
|
||||||
format!("{}%", folder_percent(&below))
|
format!("{}%", folder_percent(&below))
|
||||||
});
|
} else {
|
||||||
|
String::new()
|
||||||
|
};
|
||||||
(
|
(
|
||||||
Cell::from(Line::from(vec![
|
Cell::from(Line::from(vec![
|
||||||
Span::raw(indent),
|
Span::raw(indent),
|
||||||
@@ -289,11 +287,7 @@ fn folder_status<'a>(files: &[&'a Download]) -> Option<&'a DownloadStatus> {
|
|||||||
fn folder_percent(files: &[&Download]) -> u8 {
|
fn folder_percent(files: &[&Download]) -> u8 {
|
||||||
let bytes: u64 = files.iter().map(|d| d.bytes_downloaded()).sum();
|
let bytes: u64 = files.iter().map(|d| d.bytes_downloaded()).sum();
|
||||||
let total: u64 = files.iter().map(|d| d.size).sum();
|
let total: u64 = files.iter().map(|d| d.size).sum();
|
||||||
if total == 0 {
|
bytes.saturating_mul(100).checked_div(total).unwrap_or(0) as u8
|
||||||
0
|
|
||||||
} else {
|
|
||||||
(bytes * 100 / total) as u8
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
Reference in New Issue
Block a user