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), } } }