refactor: set_error take gui_state

insert into gui_state status when setting error
This commit is contained in:
Jack Wills
2023-08-26 12:40:53 +00:00
parent e49219752d
commit 62c78dfaa5
4 changed files with 14 additions and 18 deletions
+5 -3
View File
@@ -1,11 +1,12 @@
use bollard::models::ContainerSummary;
use parking_lot::Mutex;
use core::fmt;
use ratatui::widgets::{ListItem, ListState};
use std::time::{SystemTime, UNIX_EPOCH};
use std::{time::{SystemTime, UNIX_EPOCH}, sync::Arc};
mod container_state;
use crate::{app_error::AppError, parse_args::CliArgs, ui::log_sanitizer, ENTRY_POINT};
use crate::{app_error::AppError, parse_args::CliArgs, ui::{log_sanitizer, Status, GuiState}, ENTRY_POINT};
pub use container_state::*;
/// Global app_state, stored in an Arc<Mutex>
@@ -389,7 +390,8 @@ impl AppData {
}
/// insert single app_state error
pub fn set_error(&mut self, error: AppError) {
pub fn set_error(&mut self, error: AppError, gui_state: &Arc<Mutex<GuiState>>, status: Status) {
gui_state.lock().status_push(status);
self.error = Some(error);
}
+1 -2
View File
@@ -333,8 +333,7 @@ impl DockerData {
error: DockerControls,
gui_state: &Arc<Mutex<GuiState>>,
) {
app_data.lock().set_error(AppError::DockerCommand(error));
gui_state.lock().status_push(Status::Error);
app_data.lock().set_error(AppError::DockerCommand(error), gui_state, Status::Error);
}
/// Handle incoming messages, container controls & all container information update
+2 -4
View File
@@ -95,16 +95,14 @@ impl InputHandler {
} else {
self.app_data
.lock()
.set_error(AppError::MouseCapture(false));
self.gui_state.lock().status_push(Status::Error);
.set_error(AppError::MouseCapture(false), &self.gui_state, Status::Error);
}
} else if Ui::enable_mouse_capture().is_ok() {
self.gui_state
.lock()
.set_info_box("✓ mouse capture enabled".to_owned());
} else {
self.app_data.lock().set_error(AppError::MouseCapture(true));
self.gui_state.lock().status_push(Status::Error);
self.app_data.lock().set_error(AppError::MouseCapture(true), &self.gui_state, Status::Error);
};
// If the info box sleep handle is currently being executed, as in 'm' is pressed twice within a 4000ms window
+4 -7
View File
@@ -105,12 +105,10 @@ async fn docker_init(
is_running,
));
} else {
app_data.lock().set_error(AppError::DockerConnect);
gui_state.lock().status_push(Status::DockerConnect);
app_data.lock().set_error(AppError::DockerConnect, gui_state, Status::DockerConnect);
}
} else {
app_data.lock().set_error(AppError::DockerConnect);
gui_state.lock().status_push(Status::DockerConnect);
app_data.lock().set_error(AppError::DockerConnect, gui_state, Status::DockerConnect);
}
}
@@ -147,7 +145,6 @@ async fn main() {
let gui_state = Arc::new(Mutex::new(GuiState::default()));
let is_running = Arc::new(AtomicBool::new(true));
let (docker_sx, docker_rx) = tokio::sync::mpsc::channel(32);
let (input_sx, input_rx) = tokio::sync::mpsc::channel(32);
docker_init(
&app_data,
@@ -159,9 +156,9 @@ async fn main() {
)
.await;
handler_init(&app_data, &docker_sx, &gui_state, input_rx, &is_running);
if args.gui {
let (input_sx, input_rx) = tokio::sync::mpsc::channel(32);
handler_init(&app_data, &docker_sx, &gui_state, input_rx, &is_running);
Ui::create(app_data, docker_sx, gui_state, is_running, input_sx).await;
} else {
info!("in debug mode");