From e7564f8f826cb37d36f220217b5f33f809da1484 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Wed, 7 Jun 2023 13:26:39 +0700 Subject: [PATCH] Take DB path from cli arg, marker emoji for currently selected task --- src/app.rs | 6 +++--- src/main.rs | 7 ++++--- src/ui.rs | 5 ++++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/app.rs b/src/app.rs index 13d38c2..221b8e2 100644 --- a/src/app.rs +++ b/src/app.rs @@ -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 { - let json = std::fs::read_to_string("kanban-tui.json")?; + pub fn load(filepath: String) -> Result { + let json = std::fs::read_to_string(filepath)?; Self::load_from_json(&json) } diff --git a/src/main.rs b/src/main.rs index 8b3148f..efcf035 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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)?; diff --git a/src/ui.rs b/src/ui.rs index e895e56..71fc4d5 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -26,12 +26,15 @@ fn draw_tasks(f: &mut Frame, 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)]) })