Drag and drop to install #12

This commit is contained in:
Kr4ight
2026-04-05 17:05:51 +02:00
parent c0141eed35
commit 167bb33144
3 changed files with 64 additions and 7 deletions
+35 -4
View File
@@ -2,11 +2,11 @@ pub mod commands;
pub mod launcher;
use serde::{Deserialize, Serialize};
use std::{fs, path::PathBuf, sync::Mutex};
use std::{fs, path::PathBuf, sync::{Arc, Mutex}};
use crate::launcher::LAUNCHER_DIR;
type SharedState = Mutex<AppState>;
pub type SharedState = Arc<Mutex<AppState>>;
// --- Types ---
#[derive(Clone, Serialize, Deserialize)]
@@ -61,7 +61,7 @@ pub fn load_state() -> SharedState {
if path.exists() {
match fs::read_to_string(&path) {
Ok(content) => match serde_json::from_str::<AppState>(&content) {
Ok(state) => return Mutex::new(state),
Ok(state) => return Arc::new(Mutex::new(state)),
Err(err) => {
eprintln!("Failed to parse config, using default: {err}");
}
@@ -73,7 +73,7 @@ pub fn load_state() -> SharedState {
}
// If missing or failed → create default
let default = Mutex::new(AppState::default());
let default = Arc::new(Mutex::new(AppState::default()));
save_state(&default);
default
@@ -101,3 +101,34 @@ pub fn save_state(state: &SharedState) {
}
}
}
pub fn install_paths(state: &SharedState, paths: &Vec<PathBuf>) {
for path in paths {
if path.is_file() {
let file = path.file_name().unwrap_or_default().to_str().unwrap_or_default();
if file.is_empty() {
println!("Error: Unable to obtain file");
continue;
}
let version_dir = LAUNCHER_DIR.data_dir().join(&state.lock().unwrap().version);
let mc_child = match path.extension().unwrap_or_default().to_str().unwrap_or_default() {
// Mod
"jar" => Some("mods"),
// Etc (won't install)
_ => None
};
if let Some(mc_child) = mc_child {
match fs::copy(path, version_dir.join(mc_child).join(file)) {
Ok(_) => {}
Err(e) => {
println!("Error: failed to copy mod {file:?}: {e}")
}
}
}
}
}
}