Add Photographer metadata preset and improve quality descriptions

This commit is contained in:
2026-03-06 13:05:07 +02:00
parent 7531de5332
commit 6ef0f14804
2 changed files with 45 additions and 5 deletions

View File

@@ -187,10 +187,10 @@ pub fn build_compress_page(state: &AppState) -> adw::NavigationPage {
fn quality_description(val: u32) -> String { fn quality_description(val: u32) -> String {
match val { match val {
1 => "Web Optimized - smallest files, noticeable quality loss. Best for thumbnails.".into(), 1 => "Web Optimized - ~70-80% smaller files. Noticeable quality loss. Best for thumbnails and web previews.".into(),
2 => "Low - small files, some quality loss. Good for email attachments.".into(), 2 => "Low - ~50-60% smaller files. Some visible quality loss. Good for email attachments and quick sharing.".into(),
3 => "Medium - good balance of quality and size. Recommended for most uses.".into(), 3 => "Medium - ~30-40% smaller files. Good balance of quality and size. Recommended for most uses.".into(),
4 => "High - large files, minimal quality loss. Good for printing.".into(), 4 => "High - ~15-25% smaller files. Minimal quality loss. Good for printing and high-quality output.".into(),
_ => "Maximum - largest files, best possible quality. Archival use.".into(), _ => "Maximum - ~5-10% smaller files. Best possible quality, largest files. Archival and professional use.".into(),
} }
} }

View File

@@ -69,6 +69,17 @@ pub fn build_metadata_page(state: &AppState) -> adw::NavigationPage {
keep_all_row.add_suffix(&keep_all_check); keep_all_row.add_suffix(&keep_all_check);
keep_all_row.set_activatable_widget(Some(&keep_all_check)); keep_all_row.set_activatable_widget(Some(&keep_all_check));
let photographer_row = adw::ActionRow::builder()
.title("Photographer")
.subtitle("Keep copyright and camera model, strip GPS and software")
.activatable(true)
.build();
photographer_row.add_prefix(&gtk::Image::from_icon_name("camera-photo-symbolic"));
let photographer_check = gtk::CheckButton::new();
photographer_check.set_group(Some(&strip_all_check));
photographer_row.add_suffix(&photographer_check);
photographer_row.set_activatable_widget(Some(&photographer_check));
let custom_row = adw::ActionRow::builder() let custom_row = adw::ActionRow::builder()
.title("Custom") .title("Custom")
.subtitle("Choose exactly which metadata categories to strip") .subtitle("Choose exactly which metadata categories to strip")
@@ -83,6 +94,7 @@ pub fn build_metadata_page(state: &AppState) -> adw::NavigationPage {
presets_group.add(&strip_all_row); presets_group.add(&strip_all_row);
presets_group.add(&privacy_row); presets_group.add(&privacy_row);
presets_group.add(&photographer_row);
presets_group.add(&keep_all_row); presets_group.add(&keep_all_row);
presets_group.add(&custom_row); presets_group.add(&custom_row);
content.append(&presets_group); content.append(&presets_group);
@@ -163,6 +175,34 @@ pub fn build_metadata_page(state: &AppState) -> adw::NavigationPage {
} }
}); });
} }
{
let jc = state.job_config.clone();
let cg = custom_group.clone();
let gps_c = gps_row.clone();
let camera_c = camera_row.clone();
let software_c = software_row.clone();
let timestamps_c = timestamps_row.clone();
let copyright_c = copyright_row.clone();
photographer_check.connect_toggled(move |check| {
if check.is_active() {
let mut cfg = jc.borrow_mut();
cfg.metadata_mode = MetadataMode::Custom;
// Photographer: keep copyright + camera model, strip GPS + software
cfg.strip_gps = true;
cfg.strip_camera = false;
cfg.strip_software = true;
cfg.strip_timestamps = false;
cfg.strip_copyright = false;
// Update UI to match
gps_c.set_active(true);
camera_c.set_active(false);
software_c.set_active(true);
timestamps_c.set_active(false);
copyright_c.set_active(false);
cg.set_visible(true);
}
});
}
{ {
let jc = state.job_config.clone(); let jc = state.job_config.clone();
let cg = custom_group.clone(); let cg = custom_group.clone();