use crate::MainWindow;
use indicatrix_vault::db::sqlite::Database;
use slint::Weak;
use std::{
sync::{Mutex, PoisonError},
thread,
};
fn scan_missing_preview_ids(db: &Mutex<Database>, preview_size: u32, preview_spp: u32) -> Vec<i64> {
db.lock()
.unwrap_or_else(PoisonError::into_inner)
.entry_ids_missing_previews(|material| {
crate::bridge::preview_render::cache_fingerprint(
crate::bridge::preview_render::CacheKind::Preview {
size: preview_size,
spp: preview_spp,
max_bounces: super::engine::PREVIEW_MAX_BOUNCES,
},
material,
)
})
.unwrap_or_default()
}
pub(super) fn spawn_missing_preview_scan(
ui_weak: Weak<MainWindow>,
db: std::sync::Arc<Mutex<Database>>,
preview_size: u32,
preview_spp: u32,
on_result: impl FnOnce(&MainWindow, Vec<i64>) + Send + 'static,
) {
thread::spawn(move || {
let ids = scan_missing_preview_ids(&db, preview_size, preview_spp);
let _ = ui_weak.upgrade_in_event_loop(move |ui| on_result(&ui, ids));
});
}