diff --git a/core/src/components/select_ticket.rs b/core/src/components/select_ticket.rs index da15709..f15544f 100644 --- a/core/src/components/select_ticket.rs +++ b/core/src/components/select_ticket.rs @@ -81,7 +81,13 @@ impl Component for TicketSelection { } result } - KeyCode::Enter | KeyCode::Esc => Some(Action::SetMode(Mode::ScanDisks)), + KeyCode::Enter => Some(Action::SetMode(Mode::ScanDisks)), + KeyCode::Esc => { + if let Ok(mut osticket) = self.osticket_arc.lock() { + osticket.disable(); + } + Some(Action::NextScreen) + } _ => None, }, Some(Event::Mouse(_)) => None, diff --git a/core/src/osticket.rs b/core/src/osticket.rs index 97666d8..1ea9111 100644 --- a/core/src/osticket.rs +++ b/core/src/osticket.rs @@ -27,6 +27,7 @@ pub enum ReportType { #[derive(Debug, Default)] pub struct OsTicket { pub connected: bool, + pub disabled: bool, pub server_url: String, pub report: Vec, pub tech_note: String, @@ -37,22 +38,36 @@ impl OsTicket { pub fn new(ost_server: &str) -> Self { Self { connected: false, + disabled: false, server_url: ost_server.to_string(), ..Default::default() } } - pub fn set_db_pool(&mut self, pool: Option>) { - self.ticket.pool = pool; - if self.ticket.pool.is_some() { - self.connected = true - } + pub fn disable(&mut self) { + self.connected = false; + self.disabled = true; } pub fn get_report(&self) -> String { self.report.join("\n") } + pub fn set_db_pool(&mut self, pool: Option>) { + if self.disabled { + return; + } + match pool { + Some(pool) => { + self.connected = true; + self.ticket.pool = Some(pool); + } + None => { + self.disable(); + } + } + } + pub fn update_report(&mut self, disk: &Disk, report_type: ReportType) { // Header if self.report.is_empty() { diff --git a/deja_vu/src/app.rs b/deja_vu/src/app.rs index 44d27d4..0eeae9e 100644 --- a/deja_vu/src/app.rs +++ b/deja_vu/src/app.rs @@ -71,7 +71,6 @@ pub struct App { should_suspend: bool, tick_rate: f64, // osTicket - connected: bool, osticket_arc: Arc>, // App cur_mode: Mode, @@ -109,7 +108,6 @@ impl App { should_suspend: false, tick_rate, // osTicket - connected: false, osticket_arc, // App state: State::new(disk_list_arc), @@ -405,13 +403,6 @@ impl App { if let Some(task) = self.tasks.poll()? { self.handle_task(&task)?; } - if self.cur_mode == Mode::SelectTicket - && !self.connected - && let Ok(osticket) = self.osticket_arc.try_lock() - && osticket.ticket.pool.is_some() - { - self.connected = true; - } } Action::Quit => self.should_quit = true, Action::Suspend => self.should_suspend = true, @@ -441,6 +432,7 @@ impl App { Action::PostResponse { color, ref text } => { if let Ok(osticket) = self.osticket_arc.lock() && osticket.connected + && !osticket.disabled { let result = osticket.ticket.post_response(color, &text).await; match result { @@ -484,6 +476,7 @@ impl App { if two.is_some() && let Ok(mut osticket) = self.osticket_arc.lock() && osticket.connected + && !osticket.disabled { // Update osTicket report info!("Updating OST Report (Before)..."); @@ -511,6 +504,7 @@ impl App { if two.is_some() && let Ok(mut osticket) = self.osticket_arc.lock() && osticket.connected + && !osticket.disabled { // Update osTicket report info!("Updating OST Report (After)..."); @@ -843,8 +837,8 @@ fn build_right_items(app: &App) -> Action { let mut items = Vec::new(); let mut labels: Vec> = Vec::new(); let mut start_index = 0; - if app.connected - && let Ok(osticket) = app.osticket_arc.lock() + if let Ok(osticket) = app.osticket_arc.lock() + && !osticket.disabled && let Some(name) = &osticket.ticket.name { items.push(vec![DVLine {