pub(crate) mod panel;
pub(crate) mod records;
pub(crate) mod store;
pub(crate) mod update;
use std::path::PathBuf;
pub(crate) fn default_records_dir() -> PathBuf {
if let Some(dir) = std::env::var_os("PAR_TERM_AGENT_USAGE_RECORDS_DIR") {
return PathBuf::from(dir);
}
#[cfg(target_os = "windows")]
{
dirs::data_local_dir()
.map(|d| d.join("par-term").join("agents").join("usage"))
.unwrap_or_else(|| PathBuf::from("agents").join("usage"))
}
#[cfg(not(target_os = "windows"))]
{
dirs::home_dir()
.map(|h| {
h.join(".local")
.join("state")
.join("par-term")
.join("agents")
.join("usage")
})
.unwrap_or_else(|| {
PathBuf::from(".local")
.join("state")
.join("par-term")
.join("agents")
.join("usage")
})
}
}
pub(crate) fn expand_tilde(path: &str) -> PathBuf {
match path.strip_prefix("~/") {
Some(rest) => match dirs::home_dir() {
Some(home) => home.join(rest),
None => PathBuf::from(path),
},
None => PathBuf::from(path),
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::ffi::OsString;
unsafe fn restore(key: &str, saved: Option<&OsString>) {
match saved {
Some(v) => unsafe { std::env::set_var(key, v) },
None => unsafe { std::env::remove_var(key) },
}
}
#[test]
#[cfg(not(target_os = "windows"))]
fn env_override_wins_and_unix_default_follows() {
let key = "PAR_TERM_AGENT_USAGE_RECORDS_DIR";
let saved = std::env::var_os(key);
let overridden = {
unsafe { std::env::set_var(key, "/tmp/agent-usage-override-test") };
let resolved = default_records_dir();
unsafe { restore(key, saved.as_ref()) };
resolved
};
assert_eq!(overridden, PathBuf::from("/tmp/agent-usage-override-test"));
let defaulted = {
unsafe { std::env::remove_var(key) };
let resolved = default_records_dir();
unsafe { restore(key, saved.as_ref()) };
resolved
};
let expected = dirs::home_dir()
.expect("home resolves in tests")
.join(".local")
.join("state")
.join("par-term")
.join("agents")
.join("usage");
assert_eq!(defaulted, expected);
}
}