Take DB path from cli arg, marker emoji for currently selected task
This commit is contained in:
parent
88990089c2
commit
e7564f8f82
@ -42,7 +42,7 @@ pub struct Project {
|
|||||||
pub enum KanbanError {
|
pub enum KanbanError {
|
||||||
#[error("There is something wrong with the json schema, it doesn't match Project struct")]
|
#[error("There is something wrong with the json schema, it doesn't match Project struct")]
|
||||||
BadJson,
|
BadJson,
|
||||||
#[error("Some form of IO error occured: {0}")]
|
#[error("IO - {0}")]
|
||||||
Io(#[from] std::io::Error),
|
Io(#[from] std::io::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,8 +167,8 @@ impl Project {
|
|||||||
serde_json::from_str(json).map_err(|_| KanbanError::BadJson)
|
serde_json::from_str(json).map_err(|_| KanbanError::BadJson)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load() -> Result<Self, KanbanError> {
|
pub fn load(filepath: String) -> Result<Self, KanbanError> {
|
||||||
let json = std::fs::read_to_string("kanban-tui.json")?;
|
let json = std::fs::read_to_string(filepath)?;
|
||||||
Self::load_from_json(&json)
|
Self::load_from_json(&json)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,19 +6,20 @@ use crossterm::{
|
|||||||
event::*,
|
event::*,
|
||||||
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
|
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
|
||||||
};
|
};
|
||||||
use std::io;
|
use std::{io, env};
|
||||||
use tui::backend::CrosstermBackend;
|
use tui::backend::CrosstermBackend;
|
||||||
use tui::Terminal;
|
use tui::Terminal;
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
fn main() -> anyhow::Result<()> {
|
||||||
|
let pattern = env::args().nth(1).expect("Path to task database not provided");
|
||||||
|
let mut state = AppState::new(Project::load(pattern)?);
|
||||||
|
|
||||||
enable_raw_mode()?;
|
enable_raw_mode()?;
|
||||||
let mut stdout = io::stdout();
|
let mut stdout = io::stdout();
|
||||||
crossterm::execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
|
crossterm::execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
|
||||||
let backend = CrosstermBackend::new(stdout);
|
let backend = CrosstermBackend::new(stdout);
|
||||||
let mut terminal = Terminal::new(backend)?;
|
let mut terminal = Terminal::new(backend)?;
|
||||||
|
|
||||||
let mut state = AppState::new(Project::load()?);
|
|
||||||
|
|
||||||
while !state.quit {
|
while !state.quit {
|
||||||
terminal.draw(|f| kanban_tui::draw(f, &mut state))?;
|
terminal.draw(|f| kanban_tui::draw(f, &mut state))?;
|
||||||
kanban_tui::handle_input(&mut state)?;
|
kanban_tui::handle_input(&mut state)?;
|
||||||
|
@ -26,12 +26,15 @@ fn draw_tasks<B: Backend>(f: &mut Frame<B>, area: &Rect, state: &AppState) {
|
|||||||
let mut style = Style::default();
|
let mut style = Style::default();
|
||||||
let col_idx = state.project.selected_column_idx;
|
let col_idx = state.project.selected_column_idx;
|
||||||
let task_idx = state.project.get_selected_column().selected_task_idx;
|
let task_idx = state.project.get_selected_column().selected_task_idx;
|
||||||
|
let item_txt;
|
||||||
if i == col_idx && j == task_idx {
|
if i == col_idx && j == task_idx {
|
||||||
style = style.fg(Color::White).add_modifier(Modifier::BOLD);
|
style = style.fg(Color::White).add_modifier(Modifier::BOLD);
|
||||||
|
item_txt = format!("{} 👈", task.title);
|
||||||
} else {
|
} else {
|
||||||
style = style.fg(Color::White);
|
style = style.fg(Color::White);
|
||||||
|
item_txt = task.title.clone();
|
||||||
}
|
}
|
||||||
let mut s = Span::raw(task.title.as_str());
|
let mut s = Span::raw(item_txt);
|
||||||
s.style = style;
|
s.style = style;
|
||||||
ListItem::new(vec![Spans::from(s)])
|
ListItem::new(vec![Spans::from(s)])
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user