Add session memory, resize mode tabs, improved output summary
This commit is contained in:
@@ -124,39 +124,46 @@ fn setup_shortcuts(app: &adw::Application) {
|
||||
}
|
||||
|
||||
fn build_ui(app: &adw::Application) {
|
||||
// Restore last-used wizard settings from session
|
||||
let sess = pixstrip_core::storage::SessionStore::new();
|
||||
let sess_state = sess.load().unwrap_or_default();
|
||||
let cfg_store = pixstrip_core::storage::ConfigStore::new();
|
||||
let app_cfg = cfg_store.load().unwrap_or_default();
|
||||
let remember = app_cfg.remember_settings;
|
||||
|
||||
let app_state = AppState {
|
||||
wizard: Rc::new(RefCell::new(WizardState::new())),
|
||||
loaded_files: Rc::new(RefCell::new(Vec::new())),
|
||||
output_dir: Rc::new(RefCell::new(None)),
|
||||
job_config: Rc::new(RefCell::new(JobConfig {
|
||||
resize_enabled: true,
|
||||
resize_width: 1200,
|
||||
resize_height: 0,
|
||||
resize_enabled: if remember { sess_state.resize_enabled.unwrap_or(true) } else { true },
|
||||
resize_width: if remember { sess_state.resize_width.unwrap_or(1200) } else { 1200 },
|
||||
resize_height: if remember { sess_state.resize_height.unwrap_or(0) } else { 0 },
|
||||
allow_upscale: false,
|
||||
rotation: 0,
|
||||
flip: 0,
|
||||
convert_enabled: false,
|
||||
convert_enabled: if remember { sess_state.convert_enabled.unwrap_or(false) } else { false },
|
||||
convert_format: None,
|
||||
compress_enabled: true,
|
||||
compress_enabled: if remember { sess_state.compress_enabled.unwrap_or(true) } else { true },
|
||||
quality_preset: pixstrip_core::types::QualityPreset::Medium,
|
||||
jpeg_quality: 85,
|
||||
png_level: 3,
|
||||
webp_quality: 80,
|
||||
metadata_enabled: true,
|
||||
metadata_enabled: if remember { sess_state.metadata_enabled.unwrap_or(true) } else { true },
|
||||
metadata_mode: MetadataMode::StripAll,
|
||||
strip_gps: true,
|
||||
strip_camera: true,
|
||||
strip_software: true,
|
||||
strip_timestamps: true,
|
||||
strip_copyright: true,
|
||||
watermark_enabled: false,
|
||||
watermark_enabled: if remember { sess_state.watermark_enabled.unwrap_or(false) } else { false },
|
||||
watermark_text: String::new(),
|
||||
watermark_image_path: None,
|
||||
watermark_position: 8, // BottomRight
|
||||
watermark_opacity: 0.5,
|
||||
watermark_font_size: 24.0,
|
||||
watermark_use_image: false,
|
||||
rename_enabled: false,
|
||||
rename_enabled: if remember { sess_state.rename_enabled.unwrap_or(false) } else { false },
|
||||
rename_prefix: String::new(),
|
||||
rename_suffix: String::new(),
|
||||
rename_counter_start: 1,
|
||||
@@ -254,21 +261,43 @@ fn build_ui(app: &adw::Application) {
|
||||
window.maximize();
|
||||
}
|
||||
|
||||
// Save window size on close
|
||||
window.connect_close_request(|win| {
|
||||
let session = pixstrip_core::storage::SessionStore::new();
|
||||
let mut state = session.load().unwrap_or_default();
|
||||
state.window_maximized = win.is_maximized();
|
||||
if !win.is_maximized() {
|
||||
let (w, h) = (win.default_size().0, win.default_size().1);
|
||||
if w > 0 && h > 0 {
|
||||
state.window_width = Some(w);
|
||||
state.window_height = Some(h);
|
||||
// Save window size and wizard settings on close
|
||||
{
|
||||
let app_state_for_close = app_state.clone();
|
||||
window.connect_close_request(move |win| {
|
||||
let session = pixstrip_core::storage::SessionStore::new();
|
||||
let mut state = session.load().unwrap_or_default();
|
||||
state.window_maximized = win.is_maximized();
|
||||
if !win.is_maximized() {
|
||||
let (w, h) = (win.default_size().0, win.default_size().1);
|
||||
if w > 0 && h > 0 {
|
||||
state.window_width = Some(w);
|
||||
state.window_height = Some(h);
|
||||
}
|
||||
}
|
||||
}
|
||||
let _ = session.save(&state);
|
||||
glib::Propagation::Proceed
|
||||
});
|
||||
|
||||
// Save last-used wizard settings if remember_settings is enabled
|
||||
let config_store = pixstrip_core::storage::ConfigStore::new();
|
||||
let config = config_store.load().unwrap_or_default();
|
||||
if config.remember_settings {
|
||||
let cfg = app_state_for_close.job_config.borrow();
|
||||
state.resize_enabled = Some(cfg.resize_enabled);
|
||||
state.resize_width = Some(cfg.resize_width);
|
||||
state.resize_height = Some(cfg.resize_height);
|
||||
state.convert_enabled = Some(cfg.convert_enabled);
|
||||
state.convert_format = cfg.convert_format.map(|f| format!("{:?}", f));
|
||||
state.compress_enabled = Some(cfg.compress_enabled);
|
||||
state.quality_preset = Some(format!("{:?}", cfg.quality_preset));
|
||||
state.metadata_enabled = Some(cfg.metadata_enabled);
|
||||
state.metadata_mode = Some(format!("{:?}", cfg.metadata_mode));
|
||||
state.watermark_enabled = Some(cfg.watermark_enabled);
|
||||
state.rename_enabled = Some(cfg.rename_enabled);
|
||||
}
|
||||
|
||||
let _ = session.save(&state);
|
||||
glib::Propagation::Proceed
|
||||
});
|
||||
}
|
||||
|
||||
let ui = WizardUi {
|
||||
nav_view,
|
||||
|
||||
Reference in New Issue
Block a user