aboutsummaryrefslogtreecommitdiffstats
path: root/src/platform
diff options
context:
space:
mode:
authorFilip Wandzio <contact@philw.dev>2026-01-22 23:14:08 +0100
committerFilip Wandzio <contact@philw.dev>2026-01-22 23:14:08 +0100
commit72ddd7b7704f2087a52c9c0552446682918c513b (patch)
treee5134f215ea82c1fc8eda17b34e426a7b1dfafc6 /src/platform
downloaddml-72ddd7b7704f2087a52c9c0552446682918c513b.tar.gz
dml-72ddd7b7704f2087a52c9c0552446682918c513b.zip
Implement basic game files download logic
Implement core clap arguments Respect XDG_BASE_DIR Currently library extraction is broken because it assumes every instace has it's own library folder. This should be refactored so instances share libraries Signed-off-by: Filip Wandzio <contact@philw.dev>
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/mod.rs1
-rw-r--r--src/platform/paths.rs48
2 files changed, 49 insertions, 0 deletions
diff --git a/src/platform/mod.rs b/src/platform/mod.rs
new file mode 100644
index 0000000..8118b29
--- /dev/null
+++ b/src/platform/mod.rs
@@ -0,0 +1 @@
pub mod paths;
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}