use std::env;
use tuirealm::terminal::TerminalAdapter;
use super::SetupActivity;
impl SetupActivity {
pub(super) fn save_config(&mut self) -> Result<(), String> {
match self.config().write_config() {
Ok(_) => Ok(()),
Err(err) => {
error!("Could not save configuration: {}", err);
Err(format!("Could not save configuration: {err}"))
}
}
}
pub(super) fn reset_config_changes(&mut self) -> Result<(), String> {
self.config_mut()
.read_config()
.map_err(|e| format!("Could not reload configuration: {e}"))
}
pub(super) fn save_theme(&mut self) -> Result<(), String> {
self.theme_provider()
.save()
.map_err(|e| format!("Could not save theme: {e}"))
}
pub(super) fn reset_theme_changes(&mut self) -> Result<(), String> {
self.theme_provider()
.load()
.map_err(|e| format!("Could not restore theme: {e}"))
}
pub(super) fn delete_ssh_key(&mut self, host: &str, username: &str) -> Result<(), String> {
match self.config_mut().del_ssh_key(host, username) {
Ok(_) => Ok(()),
Err(err) => Err(format!(
"Could not delete ssh key \"{host}@{username}\": {err}"
)),
}
}
pub(super) fn edit_ssh_key(&mut self, idx: usize) -> Result<(), String> {
match self.context.as_mut() {
None => Ok(()),
Some(ctx) => {
unsafe {
env::set_var("EDITOR", ctx.config().get_text_editor());
}
if let Err(err) = ctx.terminal().disable_raw_mode() {
error!("Failed to disable raw mode: {}", err);
}
if let Err(err) = ctx.terminal().leave_alternate_screen() {
error!("Could not leave alternate screen: {}", err);
}
if let Err(err) = self.app.lock_ports() {
error!("Failed to lock ports: {err}");
}
let result: Result<(), String> = match ctx.config().iter_ssh_keys().nth(idx) {
Some(key) => {
match ctx.config().get_ssh_key(key) {
None => Ok(()),
Some((_, _, key_path)) => match edit::edit_file(key_path.as_path()) {
Ok(_) => Ok(()),
Err(err) => Err(format!("Could not edit ssh key: {err}")),
},
}
}
None => Ok(()),
};
if let Err(err) = ctx.terminal().clear_screen() {
error!("Could not clear screen screen: {}", err);
}
if let Err(err) = ctx.terminal().enter_alternate_screen() {
error!("Could not enter alternate screen: {}", err);
}
if let Err(err) = ctx.terminal().enable_raw_mode() {
error!("Failed to enter raw mode: {}", err);
}
if let Err(err) = self.app.unlock_ports() {
error!("Failed to unlock ports: {err}");
}
result
}
}
}
pub(super) fn add_ssh_key(
&mut self,
host: &str,
username: &str,
rsa_key: &str,
) -> Result<(), String> {
self.config_mut()
.add_ssh_key(host, username, rsa_key)
.map_err(|e| format!("Could not add SSH key: {e}"))
}
}