Take DB path from cli arg, marker emoji for currently selected task

This commit is contained in:
Joseph Ferano 2023-06-07 13:26:39 +07:00
parent 88990089c2
commit e7564f8f82
3 changed files with 11 additions and 7 deletions

View File

@ -42,7 +42,7 @@ pub struct Project {
pub enum KanbanError {
#[error("There is something wrong with the json schema, it doesn't match Project struct")]
BadJson,
#[error("Some form of IO error occured: {0}")]
#[error("IO - {0}")]
Io(#[from] std::io::Error),
}
@ -167,8 +167,8 @@ impl Project {
serde_json::from_str(json).map_err(|_| KanbanError::BadJson)
}
pub fn load() -> Result<Self, KanbanError> {
let json = std::fs::read_to_string("kanban-tui.json")?;
pub fn load(filepath: String) -> Result<Self, KanbanError> {
let json = std::fs::read_to_string(filepath)?;
Self::load_from_json(&json)
}

View File

@ -6,19 +6,20 @@ use crossterm::{
event::*,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use std::io;
use std::{io, env};
use tui::backend::CrosstermBackend;
use tui::Terminal;
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()?;
let mut stdout = io::stdout();
crossterm::execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
let mut state = AppState::new(Project::load()?);
while !state.quit {
terminal.draw(|f| kanban_tui::draw(f, &mut state))?;
kanban_tui::handle_input(&mut state)?;

View File

@ -26,12 +26,15 @@ fn draw_tasks<B: Backend>(f: &mut Frame<B>, area: &Rect, state: &AppState) {
let mut style = Style::default();
let col_idx = state.project.selected_column_idx;
let task_idx = state.project.get_selected_column().selected_task_idx;
let item_txt;
if i == col_idx && j == task_idx {
style = style.fg(Color::White).add_modifier(Modifier::BOLD);
item_txt = format!("{} 👈", task.title);
} else {
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;
ListItem::new(vec![Spans::from(s)])
})