use anyhow::Result;
use std::{fs, path::PathBuf};
use tracing::{debug, instrument};
pub fn get_data_dir() -> Result<PathBuf> {
if let Ok(env_dir) = std::env::var("_QUICKSWITCH_DATA_DIR")
&& !env_dir.trim().is_empty() {
let data_dir = PathBuf::from(env_dir);
if !data_dir.exists() {
fs::create_dir_all(&data_dir)?;
}
return Ok(data_dir);
}
let data_dir = get_default_data_dir()?;
if !data_dir.exists() {
fs::create_dir_all(&data_dir)?;
}
Ok(data_dir)
}
fn get_default_data_dir() -> Result<PathBuf> {
#[cfg(windows)]
{
if let Ok(appdata) = std::env::var("APPDATA") {
Ok(PathBuf::from(appdata).join("quickswitch"))
} else {
Ok(std::env::temp_dir().join("quickswitch"))
}
}
#[cfg(not(windows))]
{
if let Ok(home) = std::env::var("HOME") {
Ok(PathBuf::from(home)
.join(".local")
.join("share")
.join("quickswitch"))
} else if let Ok(xdg_data_home) = std::env::var("XDG_DATA_HOME") {
Ok(PathBuf::from(xdg_data_home).join("quickswitch"))
} else {
Ok(std::env::temp_dir().join("quickswitch"))
}
}
}
#[derive(Debug)]
pub struct HistoryConfig {
pub max_entries: usize,
pub sort_mode: crate::utils::HistorySortMode,
pub time_decay_days: u32,
pub min_frequency_threshold: u32,
}
impl Default for HistoryConfig {
#[instrument]
fn default() -> Self {
let config = Self {
max_entries: 100,
sort_mode: crate::utils::HistorySortMode::FrequencyRecent,
time_decay_days: 30,
min_frequency_threshold: 1,
};
debug!(?config, "Created default HistoryConfig");
config
}
}
pub fn get_history_config() -> HistoryConfig {
HistoryConfig::default()
}