Support per-format conversion mapping in processing pipeline

Build FormatMapping when per-format overrides are set in the convert
step advanced options, falling back to SingleFormat when no overrides
are configured.
This commit is contained in:
2026-03-06 14:51:17 +02:00
parent 2c28c092d4
commit 23c1f33d32

View File

@@ -1147,8 +1147,50 @@ fn run_processing(_window: &adw::ApplicationWindow, ui: &WizardUi) {
} }
} }
if cfg.convert_enabled && let Some(fmt) = cfg.convert_format { if cfg.convert_enabled {
job.convert = Some(pixstrip_core::operations::ConvertConfig::SingleFormat(fmt)); // Check if any per-format mappings are set (non-zero = overridden)
let has_mapping = cfg.format_mapping_jpeg > 0
|| cfg.format_mapping_png > 0
|| cfg.format_mapping_webp > 0
|| cfg.format_mapping_tiff > 0;
if has_mapping {
let mapping_to_format = |idx: u32, default: Option<pixstrip_core::types::ImageFormat>| -> Option<pixstrip_core::types::ImageFormat> {
match idx {
1 => Some(pixstrip_core::types::ImageFormat::Jpeg),
2 => Some(pixstrip_core::types::ImageFormat::Png),
3 => Some(pixstrip_core::types::ImageFormat::WebP),
4 => Some(pixstrip_core::types::ImageFormat::Avif),
5 => None, // Keep Original
_ => default, // "Same as above" - use global format
}
};
let global = cfg.convert_format;
let mut map = Vec::new();
// For each input format, determine output
let input_formats = [
(pixstrip_core::types::ImageFormat::Jpeg, cfg.format_mapping_jpeg),
(pixstrip_core::types::ImageFormat::Png, cfg.format_mapping_png),
(pixstrip_core::types::ImageFormat::WebP, cfg.format_mapping_webp),
(pixstrip_core::types::ImageFormat::Tiff, cfg.format_mapping_tiff),
];
for (input_fmt, mapping_idx) in input_formats {
if let Some(output_fmt) = mapping_to_format(mapping_idx, global) {
if output_fmt != input_fmt {
map.push((input_fmt, output_fmt));
}
}
}
if !map.is_empty() {
job.convert = Some(pixstrip_core::operations::ConvertConfig::FormatMapping(map));
}
} else if let Some(fmt) = cfg.convert_format {
job.convert = Some(pixstrip_core::operations::ConvertConfig::SingleFormat(fmt));
}
} }
if cfg.compress_enabled { if cfg.compress_enabled {