use crate::dirs::system::apple_shared::{
get_bundled_asset, get_exe_path, get_macos_dir, get_macos_dir_fail_if_sandbox,
NS_APPLICATION_SUPPORT_DIRECTORY, NS_CACHES_DIRECTORY, NS_DOCUMENT_DIRECTORY,
NS_DOWNLOADS_DIRECTORY, NS_LIBRARY_DIRECTORY, NS_USER_DIRECTORY,
};
use std::path::PathBuf;
pub fn get_app_cache() -> Option<PathBuf> {
get_macos_dir(NS_CACHES_DIRECTORY).map(PathBuf::from)
}
pub fn get_app_config() -> Option<PathBuf> {
get_macos_dir(NS_LIBRARY_DIRECTORY).map(|path| PathBuf::from(path).join("Preferences"))
}
pub fn get_app_data() -> Option<PathBuf> {
get_macos_dir(NS_APPLICATION_SUPPORT_DIRECTORY).map(PathBuf::from)
}
pub fn get_app_logs() -> Option<PathBuf> {
get_macos_dir(NS_LIBRARY_DIRECTORY).map(|path| PathBuf::from(path).join("Logs"))
}
pub fn get_app_documents() -> Option<PathBuf> {
if let Some(dir) = get_macos_dir(NS_DOCUMENT_DIRECTORY) {
if dir.contains("Library/Containers/") {
Some(PathBuf::from(dir))
} else {
None
}
} else {
None
}
}
pub fn get_user_home() -> Option<PathBuf> {
get_macos_dir(NS_USER_DIRECTORY).map(PathBuf::from)
}
pub fn get_user_documents() -> Option<PathBuf> {
get_macos_dir_fail_if_sandbox(NS_DOCUMENT_DIRECTORY)
}
pub fn get_user_downloads() -> Option<PathBuf> {
get_macos_dir_fail_if_sandbox(NS_DOWNLOADS_DIRECTORY)
}
pub fn get_app_bundled_asset(file_name: &str) -> Option<PathBuf> {
get_bundled_asset(file_name).or_else(|| {
get_exe_path().map(|v| {
v.parent()
.map(|v| v.join("Assets").join(file_name))
.unwrap_or_default()
})
})
}