use super::wiring::open_offer;
use crate::{
BatchModel, MainWindow,
settings::{ImportPreviewChoice, SettingsPersister},
};
use slint::ComponentHandle;
use std::sync::Arc;
#[must_use]
pub const fn choice_code(choice: ImportPreviewChoice) -> i32 {
match choice {
ImportPreviewChoice::Ask => 0,
ImportPreviewChoice::Full => 1,
ImportPreviewChoice::Solid => 2,
ImportPreviewChoice::Skip => 3,
}
}
pub fn show_saved_choice(ui: &MainWindow, settings_store: &Arc<SettingsPersister>) {
let choice = settings_store.snapshot().settings.import_preview_choice;
ui.global::<BatchModel>()
.set_preview_import_choice(choice_code(choice));
}
pub fn remember_choice(
ui: &MainWindow,
settings_store: &Arc<SettingsPersister>,
choice: ImportPreviewChoice,
) {
settings_store.update(|s| s.settings.import_preview_choice = choice);
ui.global::<BatchModel>()
.set_preview_import_choice(choice_code(choice));
}
pub fn offer_import_previews(ui: &MainWindow, ids: &[i64]) {
if ids.is_empty() {
return;
}
let model = ui.global::<BatchModel>();
match model.get_preview_import_choice() {
1 | 2 => {
open_offer(ui, ids, true);
model.set_preview_remember_choice(false);
if model.get_preview_import_choice() == 1 {
model.invoke_preview_generate_confirmed();
} else {
model.invoke_preview_generate_solid_confirmed();
}
}
3 => {}
_ => open_offer(ui, ids, true),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_choice_has_its_own_code() {
let codes = [
ImportPreviewChoice::Ask,
ImportPreviewChoice::Full,
ImportPreviewChoice::Solid,
ImportPreviewChoice::Skip,
]
.map(choice_code);
assert_eq!(codes, [0, 1, 2, 3]);
}
}