feat: docker_recv for all docker commands
This commit is contained in:
+38
-6
@@ -5,12 +5,15 @@ use crossterm::{
|
||||
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
|
||||
};
|
||||
use parking_lot::Mutex;
|
||||
use std::sync::atomic::AtomicBool;
|
||||
use std::{
|
||||
io,
|
||||
sync::{atomic::Ordering, Arc},
|
||||
};
|
||||
use tokio::sync::broadcast::Sender;
|
||||
use std::{
|
||||
sync::atomic::AtomicBool,
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
use tokio::sync::mpsc::Sender;
|
||||
use tracing::error;
|
||||
use tui::{
|
||||
backend::{Backend, CrosstermBackend},
|
||||
@@ -24,7 +27,10 @@ mod gui_state;
|
||||
|
||||
pub use self::color_match::*;
|
||||
pub use self::gui_state::{GuiState, SelectablePanel};
|
||||
use crate::{app_data::AppData, app_error::AppError, input_handler::InputMessages};
|
||||
use crate::{
|
||||
app_data::AppData, app_error::AppError, docker_data::DockerMessage,
|
||||
input_handler::InputMessages,
|
||||
};
|
||||
use draw_blocks::*;
|
||||
|
||||
/// Take control of the terminal in order to draw gui
|
||||
@@ -33,6 +39,8 @@ pub async fn create_ui(
|
||||
sender: Sender<InputMessages>,
|
||||
is_running: Arc<AtomicBool>,
|
||||
gui_state: Arc<Mutex<GuiState>>,
|
||||
docker_sx: Sender<DockerMessage>,
|
||||
update_duration: Duration,
|
||||
) -> Result<()> {
|
||||
enable_raw_mode()?;
|
||||
let mut stdout = io::stdout();
|
||||
@@ -40,7 +48,16 @@ pub async fn create_ui(
|
||||
let backend = CrosstermBackend::new(stdout);
|
||||
let mut terminal = Terminal::new(backend)?;
|
||||
|
||||
let res = run_app(&mut terminal, app_data, sender, is_running, gui_state).await;
|
||||
let res = run_app(
|
||||
&mut terminal,
|
||||
app_data,
|
||||
sender,
|
||||
is_running,
|
||||
gui_state,
|
||||
docker_sx,
|
||||
update_duration,
|
||||
)
|
||||
.await;
|
||||
|
||||
disable_raw_mode().unwrap();
|
||||
execute!(
|
||||
@@ -63,6 +80,8 @@ async fn run_app<B: Backend>(
|
||||
sender: Sender<InputMessages>,
|
||||
is_running: Arc<AtomicBool>,
|
||||
gui_state: Arc<Mutex<GuiState>>,
|
||||
docker_sx: Sender<DockerMessage>,
|
||||
update_duration: Duration,
|
||||
) -> Result<(), AppError> {
|
||||
let input_poll_rate = std::time::Duration::from_millis(75);
|
||||
|
||||
@@ -84,6 +103,7 @@ async fn run_app<B: Backend>(
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let mut now = Instant::now();
|
||||
loop {
|
||||
terminal.draw(|f| ui(f, &app_data, &gui_state)).unwrap();
|
||||
if crossterm::event::poll(input_poll_rate).unwrap() {
|
||||
@@ -91,15 +111,24 @@ async fn run_app<B: Backend>(
|
||||
if let Event::Key(key) = event {
|
||||
sender
|
||||
.send(InputMessages::ButtonPress(key.code))
|
||||
.unwrap_or(0);
|
||||
.await
|
||||
.unwrap_or(());
|
||||
} else if let Event::Mouse(m) = event {
|
||||
sender.send(InputMessages::MouseEvent(m)).unwrap_or(0);
|
||||
sender
|
||||
.send(InputMessages::MouseEvent(m))
|
||||
.await
|
||||
.unwrap_or(());
|
||||
} else if let Event::Resize(_, _) = event {
|
||||
gui_state.lock().clear_area_map();
|
||||
terminal.autoresize().unwrap_or(());
|
||||
}
|
||||
}
|
||||
|
||||
if now.elapsed() >= update_duration {
|
||||
docker_sx.send(DockerMessage::Update).await.unwrap();
|
||||
now = Instant::now();
|
||||
}
|
||||
|
||||
if !is_running.load(Ordering::SeqCst) {
|
||||
break;
|
||||
}
|
||||
@@ -128,6 +157,7 @@ fn ui<B: Backend>(
|
||||
let selected_panel = gui_state.lock().selected_panel;
|
||||
let show_help = gui_state.lock().show_help;
|
||||
let info_text = gui_state.lock().info_box_text.clone();
|
||||
let loading_icon = gui_state.lock().get_loading();
|
||||
|
||||
let whole_layout = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
@@ -189,6 +219,7 @@ fn ui<B: Backend>(
|
||||
f,
|
||||
gui_state,
|
||||
log_index,
|
||||
loading_icon.to_owned(),
|
||||
&selected_panel,
|
||||
);
|
||||
|
||||
@@ -197,6 +228,7 @@ fn ui<B: Backend>(
|
||||
&column_widths,
|
||||
f,
|
||||
has_containers,
|
||||
loading_icon,
|
||||
show_help,
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user