aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src-tauri/src/main.rs1
-rw-r--r--src-tauri/src/northstar/profile.rs17
-rw-r--r--src-vue/src/i18n/lang/en.json6
-rw-r--r--src-vue/src/views/SettingsView.vue35
4 files changed, 58 insertions, 1 deletions
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 66bb98d2..47cfee6a 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -160,6 +160,7 @@ fn main() {
get_available_northstar_versions,
northstar::profile::fetch_profiles,
northstar::profile::validate_profile,
+ northstar::profile::delete_profile,
])
.run(tauri::generate_context!())
{
diff --git a/src-tauri/src/northstar/profile.rs b/src-tauri/src/northstar/profile.rs
index 78e734d0..b0c6c418 100644
--- a/src-tauri/src/northstar/profile.rs
+++ b/src-tauri/src/northstar/profile.rs
@@ -74,3 +74,20 @@ pub fn validate_profile(game_install: GameInstall, profile: String) -> bool {
profile_dir.is_dir()
}
+
+#[tauri::command]
+pub fn delete_profile(game_install: GameInstall, profile: String) -> Result<(), String> {
+ // Check if the Profile actually exists
+ if !validate_profile(game_install.clone(), profile.clone()) {
+ return Err(format!("{} is not a valid Profile", profile));
+ }
+
+ log::info!("Deleting Profile {}", profile);
+
+ let profile_path = format!("{}/{}", game_install.game_path, profile);
+
+ match std::fs::remove_dir_all(profile_path) {
+ Ok(()) => Ok(()),
+ Err(err) => Err(format!("Failed to delete Profile: {}", err)),
+ }
+}
diff --git a/src-vue/src/i18n/lang/en.json b/src-vue/src/i18n/lang/en.json
index 2b056655..2bf18c2e 100644
--- a/src-vue/src/i18n/lang/en.json
+++ b/src-vue/src/i18n/lang/en.json
@@ -11,6 +11,7 @@
"yes": "Yes",
"no": "No",
"error": "Error",
+ "confirm": "Confirm",
"cancel": "Cancel",
"informationShort": "Info",
"downloading": "Downloading",
@@ -115,7 +116,10 @@
"edit": "Edit Profiles",
"dialog": {
- "title": "Profiles"
+ "title": "Profiles",
+ "delete_confirm": "Are you sure to delete this profile?",
+ "delete": "Delete",
+ "clone": "Clone"
}
},
diff --git a/src-vue/src/views/SettingsView.vue b/src-vue/src/views/SettingsView.vue
index 2219498c..70bffbc5 100644
--- a/src-vue/src/views/SettingsView.vue
+++ b/src-vue/src/views/SettingsView.vue
@@ -6,6 +6,23 @@
>
<el-table :data="availableProfiles" >
<el-table-column prop="name" label="Name" />
+ <el-table-column align="right">
+ <template #default="scope">
+ <el-popconfirm
+ v-if="scope.row.name != 'R2Northstar'"
+ :title="$t('settings.profile.dialog.delete_confirm')"
+ :confirm-button-text="$t('generic.yes')"
+ :cancel-button-text="$t('generic.no')"
+ @confirm="deleteProfile(scope.row.name)"
+ >
+ <template #reference>
+ <el-button type="danger">
+ {{ $t('settings.profile.dialog.delete') }}
+ </el-button>
+ </template>
+ </el-popconfirm>
+ </template>
+ </el-table-column>
</el-table>
</el-dialog>
@@ -257,6 +274,24 @@ export default defineComponent({
showErrorNotification(error);
});
},
+ async deleteProfile(profile: string) {
+ let store = this.$store;
+ await invoke("delete_profile", {
+ gameInstall: store.state.game_install,
+ profile: profile,
+ }).then(async (message) => {
+ if (profile == store.state.game_install.profile)
+ {
+ // trying to delete the active profile, lets switch to the default profile
+ await this.switchProfile("R2Northstar");
+ }
+ store.commit('fetchProfiles');
+ showNotification('Success');
+ }).catch((error) => {
+ console.error(error);
+ showErrorNotification(error);
+ });
+ },
},
mounted() {
document.querySelector('input')!.disabled = true;