Refactoring Install paths for a frontend experience

This commit is contained in:
Kr4ight
2026-04-05 17:37:21 +02:00
parent 7167211f06
commit d71c0c437d
4 changed files with 73 additions and 44 deletions
+44 -5
View File
@@ -1,7 +1,7 @@
use std::path::PathBuf;
use std::path::{Path, PathBuf};
use serde::Deserialize;
use tauri::State;
use tauri::{AppHandle, Emitter, State};
use tokio::fs;
use crate::{launcher::LAUNCHER_DIR, save_state, LauncherSettings, Mod, SharedState};
@@ -118,9 +118,7 @@ pub async fn remove_mod(version: String, file_name: String) -> Result<(), String
}
// move file
fs::remove_file(&source)
.await
.map_err(|e| e.to_string())?;
fs::remove_file(&source).await.map_err(|e| e.to_string())?;
Ok(())
}
@@ -289,3 +287,44 @@ pub fn update_version(state: State<SharedState>, version: String) {
save_state(&state);
}
#[tauri::command]
pub async fn install_paths(
app: &AppHandle,
state: &SharedState,
paths: &Vec<String>,
) -> Result<(), String> {
for path in paths {
let file = Path::new(&path)
.file_name()
.and_then(|name| name.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 = if path.ends_with(".jar") {
Some("mods")
} else {
None
};
if let Some(mc_child) = mc_child {
match fs::copy(path, version_dir.join(mc_child).join(file)).await {
Ok(_) => {
app.emit("path-installed", path.to_string())
.map_err(|e| e.to_string())?;
}
Err(e) => {
println!("Error: failed to copy mod {file:?}: {e}")
}
}
}
}
Ok(())
}