From 48bfce134d94f620ca2c704adbc6e342714014f1 Mon Sep 17 00:00:00 2001 From: GeckoEidechse Date: Wed, 19 Jul 2023 17:04:36 +0200 Subject: feat: Add ability to delete a Thunderstore package --- src-tauri/src/mod_management/mod.rs | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src-tauri/src/mod_management/mod.rs b/src-tauri/src/mod_management/mod.rs index 2ac26ede..d0ce3476 100644 --- a/src-tauri/src/mod_management/mod.rs +++ b/src-tauri/src/mod_management/mod.rs @@ -548,11 +548,63 @@ pub fn delete_northstar_mod(game_install: GameInstall, nsmod_name: String) -> Re Err(format!("Mod {nsmod_name} not found to be installed")) } +/// Deletes a given Thunderstore package +fn delete_package_folder(ts_package_directory: &str) -> Result<(), String> { + let ns_mod_dir_path = std::path::Path::new(&ts_package_directory); + + // Safety check: Check whether `manifest.json` exists and exit early if not + // If it does not exist, we might not be dealing with a Thunderstore package + let mod_json_path = ns_mod_dir_path.join("manifest.json"); + if !mod_json_path.exists() { + // If it doesn't exist, return an error + return Err(format!( + "manifest.json does not exist in {}", + ts_package_directory + )); + } + + match std::fs::remove_dir_all(ts_package_directory) { + Ok(()) => Ok(()), + Err(err) => Err(format!("Failed deleting package: {err}")), + } +} + /// Deletes all NorthstarMods related to a Thunderstore mod #[tauri::command] pub fn delete_thunderstore_mod( game_install: GameInstall, thunderstore_mod_string: String, ) -> Result<(), String> { + // Check packages + let packages_folder = format!("{}/R2Northstar/packages", game_install.game_path); + if std::path::Path::new(&packages_folder).exists() { + println!( + "Directory {} exists. Listing subdirectories...", + packages_folder + ); + for entry in fs::read_dir(packages_folder).unwrap() { + let entry = entry.unwrap(); + + // Check if it's a folder and skip if otherwise + if !entry.file_type().unwrap().is_dir() { + log::warn!("Skipping \"{}\", not a file", entry.path().display()); + continue; + } + + let entry_path = entry.path(); + let package_folder_ts_string = entry_path.file_name().unwrap().to_string_lossy(); + dbg!(package_folder_ts_string.clone()); + + if package_folder_ts_string != thunderstore_mod_string { + // Not the mod folder we are looking for, try the next one\ + continue; + } + + // All checks passed, this is the matching mod + return delete_package_folder(&entry.path().display().to_string()); + } + } + + // Try legacy mod installs as fallback legacy::delete_thunderstore_mod(game_install, thunderstore_mod_string) } -- cgit v1.2.3 From 0d06d88aaf59a9496fbaf9a8a94a17eccb836ed7 Mon Sep 17 00:00:00 2001 From: GeckoEidechse Date: Wed, 19 Jul 2023 22:18:14 +0200 Subject: fix: Remove debug prints --- src-tauri/src/mod_management/mod.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src-tauri/src/mod_management/mod.rs b/src-tauri/src/mod_management/mod.rs index d0ce3476..b28671c8 100644 --- a/src-tauri/src/mod_management/mod.rs +++ b/src-tauri/src/mod_management/mod.rs @@ -578,10 +578,6 @@ pub fn delete_thunderstore_mod( // Check packages let packages_folder = format!("{}/R2Northstar/packages", game_install.game_path); if std::path::Path::new(&packages_folder).exists() { - println!( - "Directory {} exists. Listing subdirectories...", - packages_folder - ); for entry in fs::read_dir(packages_folder).unwrap() { let entry = entry.unwrap(); @@ -593,7 +589,6 @@ pub fn delete_thunderstore_mod( let entry_path = entry.path(); let package_folder_ts_string = entry_path.file_name().unwrap().to_string_lossy(); - dbg!(package_folder_ts_string.clone()); if package_folder_ts_string != thunderstore_mod_string { // Not the mod folder we are looking for, try the next one\ -- cgit v1.2.3