use std::{path::PathBuf, sync::OnceLock};
use directories::BaseDirs;
static DATA_DIR: OnceLock<PathBuf> = OnceLock::new();
pub fn set_data_dir(dir: PathBuf) -> bool {
DATA_DIR.set(dir).is_ok()
}
pub(crate) fn storage_dir() -> PathBuf {
match DATA_DIR.get() {
Some(dir) => dir.join("assets"),
None => BaseDirs::new()
.map(|dirs| dirs.data_dir().join("gled2"))
.unwrap_or_else(|| PathBuf::from("gled2")),
}
}
pub fn tls_dir() -> PathBuf {
match DATA_DIR.get() {
Some(dir) => dir.join("tls"),
None => BaseDirs::new()
.map(|dirs| dirs.config_dir().join("gled").join("tls"))
.unwrap_or_else(|| PathBuf::from("gled-tls")),
}
}
pub(crate) fn gpu_choice_file() -> Option<PathBuf> {
match DATA_DIR.get() {
Some(dir) => Some(dir.join("gpu_choice.json")),
None => BaseDirs::new().map(|dirs| dirs.config_dir().join("gled").join("gpu_choice.json")),
}
}
pub fn known_servers_file() -> Option<PathBuf> {
BaseDirs::new().map(|dirs| dirs.config_dir().join("gled").join("known_servers.json"))
}
pub(crate) fn persistent_state_file() -> Option<PathBuf> {
match DATA_DIR.get() {
Some(dir) => Some(dir.join("settings.json")),
None => home::home_dir().map(|path| path.join(".gled")),
}
}