use super::*;
impl App {
pub fn to_app_state(&self) -> crate::state::AppState {
let mut history = self.cmd_history.clone();
history.truncate(100);
crate::state::AppState {
expanded_items: self.expanded_items.clone(),
last_seen: self.last_seen.clone(),
favorites: self.favorites.clone(),
sort_by_recent: self.sort_by_recent,
tunnel_overrides: self.tunnel_overrides.clone(),
command_history: history,
}
}
pub fn set_status_message(&mut self, msg: impl Into<String>) {
self.status_message = Some((msg.into(), Instant::now()));
}
pub fn set_error(&mut self, msg: impl Into<String>) {
self.app_mode = AppMode::Error(msg.into());
}
pub fn clear_error(&mut self) {
self.app_mode = AppMode::Normal;
}
pub fn open_credential_input(&mut self, is_passphrase: bool) {
if let Some(server) = self.selected_server() {
self.app_mode = AppMode::CredentialInput {
server: Box::new(server.clone()),
mode: self.connection_mode,
verbose: self.verbose_mode,
is_passphrase,
input: String::new(),
};
}
}
pub fn credential_input_push(&mut self, c: char) {
if let AppMode::CredentialInput { input, .. } = &mut self.app_mode {
input.push(c);
}
}
pub fn credential_input_backspace(&mut self) {
if let AppMode::CredentialInput { input, .. } = &mut self.app_mode {
input.pop();
}
}
pub fn cancel_credential_input(&mut self) {
self.app_mode = AppMode::Normal;
}
pub fn submit_credential_input(
&mut self,
) -> Option<(ResolvedServer, crate::config::ConnectionMode, bool, String)> {
let AppMode::CredentialInput {
server,
mode,
verbose,
input,
..
} = &self.app_mode
else {
return None;
};
if input.is_empty() {
return None;
}
let result = ((**server).clone(), *mode, *verbose, input.clone());
self.app_mode = AppMode::Normal;
Some(result)
}
pub fn server_key(server: &ResolvedServer) -> String {
let mut key = String::new();
if !server.namespace.is_empty() {
key.push_str("NS:");
key.push_str(&server.namespace);
key.push(':');
}
if !server.group_name.is_empty() {
key.push_str("Group:");
key.push_str(&server.group_name);
key.push(':');
}
if !server.env_name.is_empty() {
key.push_str("Env:");
key.push_str(&server.env_name);
key.push(':');
}
key.push_str("Server:");
key.push_str(&server.name);
key
}
}