refactor: set_error take gui_state
insert into gui_state status when setting error
This commit is contained in:
+5
-3
@@ -1,11 +1,12 @@
|
|||||||
use bollard::models::ContainerSummary;
|
use bollard::models::ContainerSummary;
|
||||||
|
use parking_lot::Mutex;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
use ratatui::widgets::{ListItem, ListState};
|
use ratatui::widgets::{ListItem, ListState};
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::{time::{SystemTime, UNIX_EPOCH}, sync::Arc};
|
||||||
|
|
||||||
mod container_state;
|
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::*;
|
pub use container_state::*;
|
||||||
|
|
||||||
/// Global app_state, stored in an Arc<Mutex>
|
/// Global app_state, stored in an Arc<Mutex>
|
||||||
@@ -389,7 +390,8 @@ impl AppData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// insert single app_state error
|
/// 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);
|
self.error = Some(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -333,8 +333,7 @@ impl DockerData {
|
|||||||
error: DockerControls,
|
error: DockerControls,
|
||||||
gui_state: &Arc<Mutex<GuiState>>,
|
gui_state: &Arc<Mutex<GuiState>>,
|
||||||
) {
|
) {
|
||||||
app_data.lock().set_error(AppError::DockerCommand(error));
|
app_data.lock().set_error(AppError::DockerCommand(error), gui_state, Status::Error);
|
||||||
gui_state.lock().status_push(Status::Error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle incoming messages, container controls & all container information update
|
/// Handle incoming messages, container controls & all container information update
|
||||||
|
|||||||
@@ -95,16 +95,14 @@ impl InputHandler {
|
|||||||
} else {
|
} else {
|
||||||
self.app_data
|
self.app_data
|
||||||
.lock()
|
.lock()
|
||||||
.set_error(AppError::MouseCapture(false));
|
.set_error(AppError::MouseCapture(false), &self.gui_state, Status::Error);
|
||||||
self.gui_state.lock().status_push(Status::Error);
|
|
||||||
}
|
}
|
||||||
} else if Ui::enable_mouse_capture().is_ok() {
|
} else if Ui::enable_mouse_capture().is_ok() {
|
||||||
self.gui_state
|
self.gui_state
|
||||||
.lock()
|
.lock()
|
||||||
.set_info_box("✓ mouse capture enabled".to_owned());
|
.set_info_box("✓ mouse capture enabled".to_owned());
|
||||||
} else {
|
} else {
|
||||||
self.app_data.lock().set_error(AppError::MouseCapture(true));
|
self.app_data.lock().set_error(AppError::MouseCapture(true), &self.gui_state, Status::Error);
|
||||||
self.gui_state.lock().status_push(Status::Error);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// If the info box sleep handle is currently being executed, as in 'm' is pressed twice within a 4000ms window
|
// If the info box sleep handle is currently being executed, as in 'm' is pressed twice within a 4000ms window
|
||||||
|
|||||||
+4
-7
@@ -105,12 +105,10 @@ async fn docker_init(
|
|||||||
is_running,
|
is_running,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
app_data.lock().set_error(AppError::DockerConnect);
|
app_data.lock().set_error(AppError::DockerConnect, gui_state, Status::DockerConnect);
|
||||||
gui_state.lock().status_push(Status::DockerConnect);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
app_data.lock().set_error(AppError::DockerConnect);
|
app_data.lock().set_error(AppError::DockerConnect, gui_state, Status::DockerConnect);
|
||||||
gui_state.lock().status_push(Status::DockerConnect);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +145,6 @@ async fn main() {
|
|||||||
let gui_state = Arc::new(Mutex::new(GuiState::default()));
|
let gui_state = Arc::new(Mutex::new(GuiState::default()));
|
||||||
let is_running = Arc::new(AtomicBool::new(true));
|
let is_running = Arc::new(AtomicBool::new(true));
|
||||||
let (docker_sx, docker_rx) = tokio::sync::mpsc::channel(32);
|
let (docker_sx, docker_rx) = tokio::sync::mpsc::channel(32);
|
||||||
let (input_sx, input_rx) = tokio::sync::mpsc::channel(32);
|
|
||||||
|
|
||||||
docker_init(
|
docker_init(
|
||||||
&app_data,
|
&app_data,
|
||||||
@@ -159,9 +156,9 @@ async fn main() {
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
handler_init(&app_data, &docker_sx, &gui_state, input_rx, &is_running);
|
|
||||||
|
|
||||||
if args.gui {
|
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;
|
Ui::create(app_data, docker_sx, gui_state, is_running, input_sx).await;
|
||||||
} else {
|
} else {
|
||||||
info!("in debug mode");
|
info!("in debug mode");
|
||||||
|
|||||||
Reference in New Issue
Block a user