diff options
author | GeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com> | 2024-01-21 13:02:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-21 13:02:43 +0100 |
commit | dc2a6d7bcee85481f3e53daffdb00436af01c309 (patch) | |
tree | 722ea33161735cc2efd1f94b51df88b939ff6d19 /src-tauri | |
parent | 4d930dc7f38ebe4874e007628ff9b733d7b64e5b (diff) | |
download | FlightCore-dc2a6d7bcee85481f3e53daffdb00436af01c309.tar.gz FlightCore-dc2a6d7bcee85481f3e53daffdb00436af01c309.zip |
feat: Add option to clone existing profile (#761)
* add dev button to refetch profiles
* add dialog box with a table of all profiles
* add button to delete non default profiles to dialog box
* add button to clone profile to dialog box
* style: Add trailing comma
* docs: Add doc comment explaining function
* fix: Remove leftover testing code
* fix: Delete duplicate function registration
* chore: Sort Tauri function registrations alphabetically
---------
Co-authored-by: Jan200101 <sentrycraft123@gmail.com>
Diffstat (limited to 'src-tauri')
-rw-r--r-- | src-tauri/src/main.rs | 1 | ||||
-rw-r--r-- | src-tauri/src/northstar/profile.rs | 28 | ||||
-rw-r--r-- | src-tauri/src/util.rs | 1 |
3 files changed, 29 insertions, 1 deletions
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a2e293b0..1fc55678 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -138,6 +138,7 @@ fn main() { northstar::install::install_northstar_wrapper, northstar::install::update_northstar, northstar::launch_northstar, + northstar::profile::clone_profile, northstar::profile::delete_profile, northstar::profile::fetch_profiles, northstar::profile::validate_profile, diff --git a/src-tauri/src/northstar/profile.rs b/src-tauri/src/northstar/profile.rs index b0c6c418..26a32d6b 100644 --- a/src-tauri/src/northstar/profile.rs +++ b/src-tauri/src/northstar/profile.rs @@ -1,3 +1,4 @@ +use crate::util::copy_dir_all; use crate::GameInstall; // These folders are part of Titanfall 2 and @@ -91,3 +92,30 @@ pub fn delete_profile(game_install: GameInstall, profile: String) -> Result<(), Err(err) => Err(format!("Failed to delete Profile: {}", err)), } } + +/// Clones a profile by simply duplicating the folder under a new name +#[tauri::command] +pub fn clone_profile( + game_install: GameInstall, + old_profile: String, + new_profile: String, +) -> Result<(), String> { + // Check if the old Profile already exists + if !validate_profile(game_install.clone(), old_profile.clone()) { + return Err(format!("{} is not a valid Profile", old_profile)); + } + + // Check that new Profile does not already exist + if validate_profile(game_install.clone(), new_profile.clone()) { + return Err(format!("{} already exists", new_profile)); + } + + log::info!("Cloning Profile {} to {}", old_profile, new_profile); + + let old_profile_path = format!("{}/{}", game_install.game_path, old_profile); + let new_profile_path = format!("{}/{}", game_install.game_path, new_profile); + + copy_dir_all(old_profile_path, new_profile_path).unwrap(); + + Ok(()) +} diff --git a/src-tauri/src/util.rs b/src-tauri/src/util.rs index 15511d21..ad09eec2 100644 --- a/src-tauri/src/util.rs +++ b/src-tauri/src/util.rs @@ -188,7 +188,6 @@ pub fn check_northstar_running() -> bool { } /// Copies a folder and all its contents to a new location -#[allow(dead_code)] pub fn copy_dir_all( src: impl AsRef<std::path::Path>, dst: impl AsRef<std::path::Path>, |