summaryrefslogtreecommitdiffstats
path: root/src/ui/views/tui_worker_view.rs
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2020-12-11 21:07:13 -0500
committerJiayi Zhao <jeff.no.zhao@gmail.com>2020-12-11 21:07:13 -0500
commit916d72c42cfc7bcb8fc560e17cb3bd75c00757da (patch)
treea8024fc9bd9a48065cd6b65375109482ac9b7983 /src/ui/views/tui_worker_view.rs
parentbf9c102a4cfb85a9fd910195e6372dcd1d062c16 (diff)
add a view for showing worker progress
Diffstat (limited to 'src/ui/views/tui_worker_view.rs')
-rw-r--r--src/ui/views/tui_worker_view.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/ui/views/tui_worker_view.rs b/src/ui/views/tui_worker_view.rs
new file mode 100644
index 0000000..536c45a
--- /dev/null
+++ b/src/ui/views/tui_worker_view.rs
@@ -0,0 +1,55 @@
+use termion::event::Key;
+
+use tui::layout::Rect;
+
+use crate::context::JoshutoContext;
+use crate::ui::widgets::TuiWorker;
+use crate::ui::TuiBackend;
+use crate::util::event::Event;
+use crate::util::worker;
+
+pub struct TuiWorkerView {}
+
+impl TuiWorkerView {
+ pub fn new() -> Self {
+ Self {}
+ }
+
+ pub fn display(&self, context: &mut JoshutoContext, backend: &mut TuiBackend) {
+ context.flush_event();
+ let terminal = backend.terminal_mut();
+
+ loop {
+ let _ = terminal.draw(|frame| {
+ let f_size: Rect = frame.size();
+ if f_size.height == 0 {
+ return;
+ }
+ {
+ let view = TuiWorker::new(&context);
+ frame.render_widget(view, f_size);
+ }
+ });
+
+ if let Ok(event) = context.poll_event() {
+ match event {
+ Event::IOWorkerProgress(res) => {
+ worker::process_worker_progress(context, res);
+ }
+ Event::IOWorkerResult(res) => {
+ worker::process_finished_worker(context, res);
+ }
+ Event::Input(key) => {
+ match key {
+ Key::Esc => {
+ break;
+ }
+ _ => {}
+ }
+ context.flush_event();
+ }
+ };
+ }
+ }
+ }
+}