#[cfg(target_arch = "wasm32")]
use std::{
fs,
path::{Path, PathBuf},
time::{Duration, SystemTime},
};
#[cfg(target_arch = "wasm32")]
use zed_extension_api as zed;
#[cfg(target_arch = "wasm32")]
use crate::{context_engine::ContextEngine, state_writer};
#[cfg(target_arch = "wasm32")]
const MIN_REFRESH_INTERVAL: Duration = Duration::from_secs(20);
#[cfg(target_arch = "wasm32")]
pub fn refresh(worktree: &zed::Worktree) {
let _ = try_refresh(worktree);
}
#[cfg(target_arch = "wasm32")]
fn try_refresh(worktree: &zed::Worktree) -> Result<(), String> {
let root = PathBuf::from(worktree.root_path());
let state_path = root.join(".context-bar").join("state.json");
if is_fresh(&state_path) {
return Ok(());
}
let snapshot = ContextEngine::generate(worktree)?;
state_writer::write(&root, &snapshot)?;
Ok(())
}
#[cfg(target_arch = "wasm32")]
fn is_fresh(state_path: &Path) -> bool {
let Ok(metadata) = fs::metadata(state_path) else {
return false;
};
let Ok(modified) = metadata.modified() else {
return false;
};
SystemTime::now()
.duration_since(modified)
.map(|age| age < MIN_REFRESH_INTERVAL)
.unwrap_or(false)
}