Skip to content

Commit 22a7ecf

Browse files
committed
feat: Renderer including Terminal and Panes
1 parent 0423814 commit 22a7ecf

File tree

6 files changed

+146
-130
lines changed

6 files changed

+146
-130
lines changed

src/main.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@ mod editor;
1919
use editor::Editor;
2020
mod json;
2121
use json::JsonProvider;
22-
mod search;
23-
use search::{IncrementalSearcher, SearchProvider};
2422
mod processor;
2523
use processor::{
2624
init::ViewInitializer, monitor::ContextMonitor, spinner::SpinnerSpawner, Context, Processor,
2725
ViewProvider, Visualizer,
2826
};
2927
mod prompt;
30-
use prompt::{PaneIndex, EMPTY_PANE, PANE_SIZE};
28+
mod render;
29+
use render::{PaneIndex, Renderer, EMPTY_PANE};
30+
mod search;
31+
use search::{IncrementalSearcher, SearchProvider};
3132

3233
/// JSON navigator and interactive filter leveraging jq
3334
#[derive(Parser)]
@@ -208,6 +209,7 @@ async fn main() -> anyhow::Result<()> {
208209
},
209210
100,
210211
50000,
212+
args.no_hint,
211213
)
212214
.await?;
213215

src/processor.rs

+21-18
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ use std::sync::Arc;
22

33
use async_trait::async_trait;
44
use crossterm::event::Event;
5-
use promkit::{pane::Pane, terminal::Terminal};
5+
use promkit::pane::Pane;
66
use tokio::{sync::Mutex, task::JoinHandle};
77

8-
use crate::{PaneIndex, EMPTY_PANE, PANE_SIZE};
8+
use crate::{PaneIndex, Renderer, EMPTY_PANE};
99
pub(crate) mod init;
1010
pub(crate) mod monitor;
1111
pub(crate) mod spinner;
@@ -63,8 +63,7 @@ impl Processor {
6363
&self,
6464
query: String,
6565
shared_visualizer: Arc<Mutex<impl Visualizer>>,
66-
shared_terminal: Arc<Mutex<Terminal>>,
67-
shared_panes: Arc<Mutex<[Pane; PANE_SIZE]>>,
66+
shared_renderer: Arc<Mutex<Renderer>>,
6867
) -> JoinHandle<()> {
6968
let shared = self.shared.clone();
7069
tokio::spawn(async move {
@@ -83,14 +82,22 @@ impl Processor {
8382
};
8483

8584
{
86-
let mut panes = shared_panes.lock().await;
85+
// TODO: error handling
86+
let _ = shared_renderer.lock().await.update_and_draw([
87+
(
88+
PaneIndex::ProcessorGuide,
89+
maybe_guide.unwrap_or(EMPTY_PANE.to_owned()),
90+
),
91+
(
92+
PaneIndex::Processor,
93+
maybe_resp.unwrap_or(EMPTY_PANE.to_owned()),
94+
),
95+
]);
96+
}
97+
98+
{
8799
let mut shared_state = shared.lock().await;
88-
let mut terminal = shared_terminal.lock().await;
89-
panes[PaneIndex::ProcessorGuide as usize] =
90-
maybe_guide.unwrap_or(EMPTY_PANE.to_owned());
91-
panes[PaneIndex::Processor as usize] = maybe_resp.unwrap_or(EMPTY_PANE.to_owned());
92100
shared_state.state = State::Idle;
93-
let _ = terminal.draw(&*panes);
94101
}
95102
})
96103
}
@@ -100,8 +107,7 @@ impl Processor {
100107
shared_visualizer: Arc<Mutex<impl Visualizer>>,
101108
area: (u16, u16),
102109
query: String,
103-
shared_terminal: Arc<Mutex<Terminal>>,
104-
shared_panes: Arc<Mutex<[Pane; PANE_SIZE]>>,
110+
shared_renderer: Arc<Mutex<Renderer>>,
105111
) {
106112
{
107113
let mut shared_state = self.shared.lock().await;
@@ -111,8 +117,7 @@ impl Processor {
111117
}
112118
}
113119

114-
let process_task =
115-
self.spawn_process_task(query, shared_visualizer, shared_terminal, shared_panes);
120+
let process_task = self.spawn_process_task(query, shared_visualizer, shared_renderer);
116121

117122
{
118123
let mut shared_state = self.shared.lock().await;
@@ -124,8 +129,7 @@ impl Processor {
124129
&self,
125130
shared_visualizer: Arc<Mutex<impl Visualizer>>,
126131
query: String,
127-
shared_terminal: Arc<Mutex<Terminal>>,
128-
shared_panes: Arc<Mutex<[Pane; PANE_SIZE]>>,
132+
shared_renderer: Arc<Mutex<Renderer>>,
129133
) {
130134
{
131135
let mut shared_state = self.shared.lock().await;
@@ -134,8 +138,7 @@ impl Processor {
134138
}
135139
}
136140

137-
let process_task =
138-
self.spawn_process_task(query, shared_visualizer, shared_terminal, shared_panes);
141+
let process_task = self.spawn_process_task(query, shared_visualizer, shared_renderer);
139142

140143
{
141144
let mut shared_state = self.shared.lock().await;

src/processor/init.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
use std::sync::Arc;
22

3-
use promkit::{pane::Pane, terminal::Terminal};
43
use tokio::sync::Mutex;
54

65
use super::{Context, State, ViewProvider, Visualizer};
7-
use crate::{PaneIndex, PANE_SIZE};
6+
use crate::{PaneIndex, Renderer};
87

98
pub struct ViewInitializer {
109
shared: Arc<Mutex<Context>>,
@@ -20,8 +19,7 @@ impl ViewInitializer {
2019
provider: &'a mut T,
2120
item: &'static str,
2221
area: (u16, u16),
23-
shared_terminal: Arc<Mutex<Terminal>>,
24-
shared_panes: Arc<Mutex<[Pane; PANE_SIZE]>>,
22+
shared_renderer: Arc<Mutex<Renderer>>,
2523
) -> anyhow::Result<impl Visualizer + 'a> {
2624
{
2725
let mut shared_state = self.shared.lock().await;
@@ -35,13 +33,15 @@ impl ViewInitializer {
3533
let pane = visualizer.create_init_pane(area).await;
3634

3735
{
38-
let mut panes = shared_panes.lock().await;
36+
// TODO: error handling
37+
let _ = shared_renderer
38+
.lock()
39+
.await
40+
.update_and_draw([(PaneIndex::Processor, pane)]);
41+
}
42+
{
3943
let mut shared_state = self.shared.lock().await;
40-
let mut terminal = shared_terminal.lock().await;
41-
panes[PaneIndex::Processor as usize] = pane;
4244
shared_state.state = State::Idle;
43-
// TODO: error handling
44-
let _ = terminal.draw(&*panes);
4545
}
4646

4747
Ok(visualizer)

src/processor/spinner.rs

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use std::sync::Arc;
22

3-
use promkit::{pane::Pane, terminal::Terminal};
3+
use promkit::pane::Pane;
44
use tokio::{sync::Mutex, task::JoinHandle, time::Duration};
55

66
use super::{Context, State};
7-
use crate::PaneIndex;
7+
use crate::{PaneIndex, Renderer};
88

99
const LOADING_FRAMES: [&str; 10] = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
1010

@@ -19,8 +19,7 @@ impl SpinnerSpawner {
1919

2020
pub fn spawn_spin_task(
2121
&self,
22-
spin_panes: Arc<Mutex<[Pane]>>,
23-
spin_terminal: Arc<Mutex<Terminal>>,
22+
shared_renderer: Arc<Mutex<Renderer>>,
2423
spin_duration: Duration,
2524
) -> JoinHandle<()> {
2625
let shared = self.shared.clone();
@@ -39,18 +38,18 @@ impl SpinnerSpawner {
3938

4039
frame_index = (frame_index + 1) % LOADING_FRAMES.len();
4140

42-
let loading_pane = Pane::new(
41+
let pane = Pane::new(
4342
vec![promkit::grapheme::StyledGraphemes::from(
4443
LOADING_FRAMES[frame_index],
4544
)],
4645
0,
4746
);
4847
{
49-
let mut panes = spin_panes.lock().await;
50-
let mut terminal = spin_terminal.lock().await;
51-
panes[PaneIndex::Processor as usize] = loading_pane;
5248
// TODO: error handling
53-
let _ = terminal.draw(&panes);
49+
let _ = shared_renderer
50+
.lock()
51+
.await
52+
.update_and_draw([(PaneIndex::Processor, pane)]);
5453
}
5554
}
5655
})

0 commit comments

Comments
 (0)