diff options
Diffstat (limited to 'src/platform/paths.rs')
| -rw-r--r-- | src/platform/paths.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/platform/paths.rs b/src/platform/paths.rs new file mode 100644 index 0000000..47aae9a --- /dev/null +++ b/src/platform/paths.rs | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | use std::{fs, path::PathBuf}; | ||
| 2 | |||
| 3 | use directories::ProjectDirs; | ||
| 4 | |||
| 5 | use crate::{config::Config, errors::McError}; | ||
| 6 | |||
| 7 | fn project_dirs() -> ProjectDirs { | ||
| 8 | ProjectDirs::from("com", "dml", "dml").expect("failed to determine project directories") | ||
| 9 | } | ||
| 10 | |||
| 11 | /// Root Minecraft directory | ||
| 12 | pub fn minecraft_root(_cfg: &Config) -> PathBuf { project_dirs().data_dir().join("minecraft") } | ||
| 13 | |||
| 14 | /* ---------------- setup ---------------- */ | ||
| 15 | |||
| 16 | pub fn ensure_dirs(cfg: &Config) -> Result<(), McError> { | ||
| 17 | let root = minecraft_root(cfg); | ||
| 18 | |||
| 19 | fs::create_dir_all(root.join("versions"))?; | ||
| 20 | fs::create_dir_all(root.join("libraries"))?; | ||
| 21 | fs::create_dir_all(root.join("assets"))?; | ||
| 22 | |||
| 23 | Ok(()) | ||
| 24 | } | ||
| 25 | |||
| 26 | /* ---------------- versions ---------------- */ | ||
| 27 | |||
| 28 | pub fn version_dir(cfg: &Config, version: &str) -> PathBuf { | ||
| 29 | minecraft_root(cfg).join("versions").join(version) | ||
| 30 | } | ||
| 31 | |||
| 32 | pub fn client_jar(cfg: &Config, version: &str) -> Result<PathBuf, McError> { | ||
| 33 | Ok(version_dir(cfg, version).join(format!("{}.jar", version))) | ||
| 34 | } | ||
| 35 | |||
| 36 | /* ---------------- libraries ---------------- */ | ||
| 37 | |||
| 38 | pub fn library_file(cfg: &Config, rel_path: &str) -> Result<PathBuf, McError> { | ||
| 39 | Ok(minecraft_root(cfg) | ||
| 40 | .join("libraries") | ||
| 41 | .join(rel_path)) | ||
| 42 | } | ||
| 43 | |||
| 44 | /* ---------------- natives ---------------- */ | ||
| 45 | |||
| 46 | pub fn natives_dir(cfg: &Config, version: &str) -> PathBuf { | ||
| 47 | version_dir(cfg, version).join("natives") | ||
| 48 | } | ||
