Improve Images, Compress, Output, Workflow steps
This commit is contained in:
@@ -22,13 +22,13 @@ pub fn build_output_page(state: &AppState) -> adw::NavigationPage {
|
||||
.description("Review your processing settings before starting")
|
||||
.build();
|
||||
|
||||
let summary_placeholder = adw::ActionRow::builder()
|
||||
let summary_row = adw::ActionRow::builder()
|
||||
.title("No operations configured")
|
||||
.subtitle("Go back and configure your workflow settings")
|
||||
.build();
|
||||
summary_placeholder.add_prefix(>k::Image::from_icon_name("dialog-information-symbolic"));
|
||||
summary_row.add_prefix(>k::Image::from_icon_name("dialog-information-symbolic"));
|
||||
|
||||
summary_group.add(&summary_placeholder);
|
||||
summary_group.add(&summary_row);
|
||||
content.append(&summary_group);
|
||||
|
||||
// Output directory
|
||||
@@ -54,10 +54,12 @@ pub fn build_output_page(state: &AppState) -> adw::NavigationPage {
|
||||
output_row.add_suffix(&choose_button);
|
||||
output_row.add_suffix(>k::Image::from_icon_name("go-next-symbolic"));
|
||||
|
||||
let cfg = state.job_config.borrow();
|
||||
|
||||
let structure_row = adw::SwitchRow::builder()
|
||||
.title("Preserve Directory Structure")
|
||||
.subtitle("Keep subfolder hierarchy in output")
|
||||
.active(false)
|
||||
.active(cfg.preserve_dir_structure)
|
||||
.build();
|
||||
|
||||
output_group.add(&output_row);
|
||||
@@ -80,24 +82,33 @@ pub fn build_output_page(state: &AppState) -> adw::NavigationPage {
|
||||
"Skip existing files",
|
||||
]);
|
||||
overwrite_row.set_model(Some(&overwrite_model));
|
||||
overwrite_row.set_selected(cfg.overwrite_behavior as u32);
|
||||
|
||||
overwrite_group.add(&overwrite_row);
|
||||
content.append(&overwrite_group);
|
||||
|
||||
// Image count
|
||||
// Image count - dynamically updated
|
||||
let stats_group = adw::PreferencesGroup::builder()
|
||||
.title("Batch Info")
|
||||
.build();
|
||||
|
||||
let file_count = state.loaded_files.borrow().len();
|
||||
let total_size: u64 = state.loaded_files.borrow().iter()
|
||||
.filter_map(|p| std::fs::metadata(p).ok())
|
||||
.map(|m| m.len())
|
||||
.sum();
|
||||
|
||||
let count_row = adw::ActionRow::builder()
|
||||
.title("Images to process")
|
||||
.subtitle("0 images")
|
||||
.subtitle(format!("{} images ({})", file_count, format_size(total_size)))
|
||||
.build();
|
||||
count_row.add_prefix(>k::Image::from_icon_name("image-x-generic-symbolic"));
|
||||
|
||||
stats_group.add(&count_row);
|
||||
content.append(&stats_group);
|
||||
|
||||
drop(cfg);
|
||||
|
||||
// Wire preserve directory structure
|
||||
{
|
||||
let jc = state.job_config.clone();
|
||||
@@ -127,3 +138,15 @@ pub fn build_output_page(state: &AppState) -> adw::NavigationPage {
|
||||
.child(&clamp)
|
||||
.build()
|
||||
}
|
||||
|
||||
fn format_size(bytes: u64) -> String {
|
||||
if bytes < 1024 {
|
||||
format!("{} B", bytes)
|
||||
} else if bytes < 1024 * 1024 {
|
||||
format!("{:.1} KB", bytes as f64 / 1024.0)
|
||||
} else if bytes < 1024 * 1024 * 1024 {
|
||||
format!("{:.1} MB", bytes as f64 / (1024.0 * 1024.0))
|
||||
} else {
|
||||
format!("{:.1} GB", bytes as f64 / (1024.0 * 1024.0 * 1024.0))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user