Files
sshell/src/app/home_ops.rs
T

63 lines
2.0 KiB
Rust

use anyhow::Result;
use super::{App, Mode};
impl App {
pub fn request_quit(&mut self) {
self.session.should_quit = true;
}
pub fn enter_action_menu(&mut self) {
self.session.action_menu.cursor = 0;
self.session.mode = Mode::ActionMenu;
}
pub fn enter_quick_select(&mut self) {
if self.entries().is_empty() {
self.toast("no connections available", false);
} else {
self.session.mode = Mode::QuickSelect;
self.session.home.selected = 0;
self.toast("press 1-9 to connect, Tab to sort, Esc to cancel", true);
}
}
pub fn connect_selected(&mut self) -> Result<()> {
if let Some(name) = self.selected_name() {
self.record_use(&name)?;
crate::connection::connect(&name, &self.config)?;
}
Ok(())
}
pub fn enter_search(&mut self) {
self.session.mode = Mode::Search;
self.session.home.search.clear();
self.session.home.selected = 0;
}
pub fn enter_delete_confirm_for_selected(&mut self) {
if self.selected_name().is_some() {
self.session.mode = Mode::DeleteConfirm;
}
}
pub fn enter_import_selector(&mut self) -> Result<()> {
self.session.import.candidates = crate::import::load_candidates(&self.config)?;
self.session.import.selected = vec![false; self.session.import.candidates.len()];
self.session.import.shell_candidates = self.config.local_shell_candidates();
self.session.import.shell_selected = vec![false; self.session.import.shell_candidates.len()];
self.session.import.cursor = 0;
self.session.mode = Mode::ImportSelector;
Ok(())
}
pub fn sync_with_toast(&mut self) {
let result = crate::sync::run_sync(&mut self.config);
match result {
Ok(report) => self.toast(report.to_string(), true),
Err(err) => self.toast(err.to_string(), false),
}
}
}