From a393e0a2f2c3678a3ea869dc1417fa269f2b1040 Mon Sep 17 00:00:00 2001 From: Filip Wandzio Date: Sat, 24 Jan 2026 08:29:14 +0100 Subject: Resolve audio not loading bug Ensure all assets are downloading for each version Temporarily disable minecraft versions older than 1.8 because of the asset/manifest loading issues Implement basic documentation of modules Implement basic async/multithreading for downloading assets --- src/platform/mod.rs | 10 ++++++++++ src/platform/paths.rs | 36 ++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 20 deletions(-) (limited to 'src/platform') diff --git a/src/platform/mod.rs b/src/platform/mod.rs index 8118b29..24619ff 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -1 +1,11 @@ +//! Platform-specific helpers for the DML launcher. +//! +//! This module provides utilities for handling file paths and directories +//! across operating systems. It includes functions to get standard locations +//! for Minecraft game data, assets, libraries, and version directories. +//! +//! # Submodules +//! - `paths`: Functions to construct paths for Minecraft data, assets, +//! libraries, and versions. + pub mod paths; diff --git a/src/platform/paths.rs b/src/platform/paths.rs index 47aae9a..b430f09 100644 --- a/src/platform/paths.rs +++ b/src/platform/paths.rs @@ -1,48 +1,44 @@ -use std::{fs, path::PathBuf}; - -use directories::ProjectDirs; +use std::{fs::create_dir_all, path::PathBuf}; use crate::{config::Config, errors::McError}; -fn project_dirs() -> ProjectDirs { - ProjectDirs::from("com", "dml", "dml").expect("failed to determine project directories") +/// ~/.local/share/dml/minecraft +pub fn minecraft_root(cfg: &Config) -> PathBuf { + cfg.data_dir.join("minecraft") } -/// Root Minecraft directory -pub fn minecraft_root(_cfg: &Config) -> PathBuf { project_dirs().data_dir().join("minecraft") } - -/* ---------------- setup ---------------- */ +pub fn assets_dir(cfg: &Config) -> PathBuf { + minecraft_root(cfg).join("assets") +} +pub fn game_dir(cfg: &Config) -> PathBuf { minecraft_root(cfg) } pub fn ensure_dirs(cfg: &Config) -> Result<(), McError> { let root = minecraft_root(cfg); - - fs::create_dir_all(root.join("versions"))?; - fs::create_dir_all(root.join("libraries"))?; - fs::create_dir_all(root.join("assets"))?; + create_dir_all(&root)?; + create_dir_all(root.join("versions"))?; + create_dir_all(root.join("libraries"))?; + create_dir_all(assets_dir(cfg))?; + create_dir_all(assets_dir(cfg).join("indexes"))?; + create_dir_all(assets_dir(cfg).join("objects"))?; + create_dir_all(root.join("saves"))?; Ok(()) } -/* ---------------- versions ---------------- */ - pub fn version_dir(cfg: &Config, version: &str) -> PathBuf { minecraft_root(cfg).join("versions").join(version) } pub fn client_jar(cfg: &Config, version: &str) -> Result { - Ok(version_dir(cfg, version).join(format!("{}.jar", version))) + Ok(version_dir(cfg, version).join(format!("{version}.jar"))) } -/* ---------------- libraries ---------------- */ - pub fn library_file(cfg: &Config, rel_path: &str) -> Result { Ok(minecraft_root(cfg) .join("libraries") .join(rel_path)) } -/* ---------------- natives ---------------- */ - pub fn natives_dir(cfg: &Config, version: &str) -> PathBuf { version_dir(cfg, version).join("natives") } -- cgit v1.2.3