use std::path::Path;
use std::sync::Arc;
use crate::config::{MenuConfig, MenuExt};
use crate::view::theme::ThemeRegistry;
#[derive(Default)]
pub struct ExpandedMenusCache {
cached: Option<(Arc<ThemeRegistry>, MenuConfig)>,
}
impl ExpandedMenusCache {
pub fn update(&mut self, registry: &Arc<ThemeRegistry>, base: &MenuConfig, themes_dir: &Path) {
if let Some((cached_reg, _)) = &self.cached {
if Arc::ptr_eq(cached_reg, registry) {
return;
}
}
let mut menus = base.clone();
for menu in &mut menus.menus {
menu.expand_dynamic_items(themes_dir);
}
self.cached = Some((Arc::clone(registry), menus));
}
pub fn get(&self) -> Option<&MenuConfig> {
self.cached.as_ref().map(|(_, m)| m)
}
pub fn invalidate(&mut self) {
self.cached = None;
}
}