aboutsummaryrefslogtreecommitdiffstats
path: root/src/platform/paths.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/paths.rs')
-rw-r--r--src/platform/paths.rs48
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 @@
1use std::{fs, path::PathBuf};
2
3use directories::ProjectDirs;
4
5use crate::{config::Config, errors::McError};
6
7fn project_dirs() -> ProjectDirs {
8 ProjectDirs::from("com", "dml", "dml").expect("failed to determine project directories")
9}
10
11/// Root Minecraft directory
12pub fn minecraft_root(_cfg: &Config) -> PathBuf { project_dirs().data_dir().join("minecraft") }
13
14/* ---------------- setup ---------------- */
15
16pub 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
28pub fn version_dir(cfg: &Config, version: &str) -> PathBuf {
29 minecraft_root(cfg).join("versions").join(version)
30}
31
32pub 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
38pub 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
46pub fn natives_dir(cfg: &Config, version: &str) -> PathBuf {
47 version_dir(cfg, version).join("natives")
48}