Browse Source

map: implement loading widget while we initialize values

lunar-mining 4 years ago
parent
commit
505ee3c141
2 changed files with 29 additions and 6 deletions
  1. 11 4
      bin/map/src/main.rs
  2. 18 2
      bin/map/src/ui.rs

+ 11 - 4
bin/map/src/main.rs

@@ -216,7 +216,8 @@ async fn poll(client: Map, model: Arc<Model>) -> Result<()> {
             async_util::sleep(2).await;
             async_util::sleep(2).await;
         }
         }
     } else {
     } else {
-        Timer::after(Duration::from_secs(10)).await;
+        // TODO: fix this
+        async_util::sleep(10).await;
         Err(Error::ConnectTimeout)
         Err(Error::ConnectTimeout)
     }
     }
 }
 }
@@ -236,10 +237,16 @@ async fn render<B: Backend>(terminal: &mut Terminal<B>, model: Arc<Model>) -> io
     loop {
     loop {
         view.update(model.info_list.infos.lock().await.clone());
         view.update(model.info_list.infos.lock().await.clone());
         if view.info_list.infos.is_empty() {
         if view.info_list.infos.is_empty() {
-            // TODO: make this a loading widget
             // TODO: this lags forever if IRC is not running. add an error
             // TODO: this lags forever if IRC is not running. add an error
-            println!("Initializing...");
-            async_util::sleep(1).await;
+            let mut progress = 0;
+            while progress < 100 {
+                terminal.draw(|f| {
+                    ui::init_panel(f, progress);
+                })?;
+
+                Timer::after(Duration::from_millis(1)).await;
+                progress = progress + 1;
+            }
             terminal.clear()?;
             terminal.clear()?;
         } else {
         } else {
             terminal.draw(|f| {
             terminal.draw(|f| {

+ 18 - 2
bin/map/src/ui.rs

@@ -2,9 +2,9 @@ use crate::view::View;
 use tui::{
 use tui::{
     backend::Backend,
     backend::Backend,
     layout::{Constraint, Direction, Layout, Rect},
     layout::{Constraint, Direction, Layout, Rect},
-    style::Style,
+    style::{Color, Style},
     text::{Span, Spans},
     text::{Span, Spans},
-    widgets::{Block, Borders, List, ListItem, Paragraph},
+    widgets::{Block, Borders, Gauge, List, ListItem, Paragraph},
     Frame,
     Frame,
 };
 };
 
 
@@ -71,3 +71,19 @@ fn render_info_right<B: Backend>(
         Paragraph::new(span).block(Block::default().borders(Borders::ALL)).style(Style::default());
         Paragraph::new(span).block(Block::default().borders(Borders::ALL)).style(Style::default());
     f.render_widget(graph, slice[1]);
     f.render_widget(graph, slice[1]);
 }
 }
+
+pub fn init_panel<B: Backend>(f: &mut Frame<'_, B>, progress: u16) {
+    let slice = Layout::default()
+        .direction(Direction::Vertical)
+        .margin(2)
+        .constraints([Constraint::Percentage(7), Constraint::Percentage(100)].as_ref())
+        .split(f.size());
+
+    let gauge = Gauge::default()
+        .block(Block::default().borders(Borders::ALL).title("Initializing..."))
+        .gauge_style(Style::default().fg(Color::Cyan))
+        .percent(progress);
+
+    f.render_widget(gauge, slice[0]);
+    // TODO: loading widget
+}