1use std::{fs, path::PathBuf};
2
3use anyhow::Result;
4
5pub struct OxidePaths {
6 pub home: PathBuf,
7 pub config: PathBuf,
8 pub version_check: PathBuf,
9 pub cache: PathBuf,
10 pub templates: PathBuf,
11 pub auth: PathBuf,
12 pub addons: PathBuf,
13 pub addons_index: PathBuf,
14}
15
16impl OxidePaths {
17 pub fn new() -> Result<Self> {
18 let home_dir =
19 dirs::home_dir().ok_or_else(|| anyhow::anyhow!("Could not find home directory"))?;
20
21 let oxide_home = home_dir.join(".oxide");
22
23 Ok(Self {
24 home: oxide_home.clone(),
25 config: oxide_home.join("config.json"),
26 version_check: oxide_home.join("version_check.json"),
27 cache: oxide_home.join("cache"),
28 templates: oxide_home.join("cache").join("templates"),
29 auth: oxide_home.join("auth.json"),
30 addons: oxide_home.join("cache").join("addons"),
31 addons_index: oxide_home
32 .join("cache")
33 .join("addons")
34 .join("oxide-addons.json"),
35 })
36 }
37
38 pub fn ensure_directories(&self) -> Result<()> {
39 fs::create_dir_all(&self.home)?;
40 fs::create_dir_all(&self.cache)?;
41 fs::create_dir_all(&self.templates)?;
42 fs::create_dir_all(&self.addons)?;
43 Ok(())
44 }
45}