Add Photographer metadata preset and improve quality descriptions
This commit is contained in:
@@ -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(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(>k::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();
|
||||||
|
|||||||
Reference in New Issue
Block a user