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 { 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)
} }

View File

@ -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)?;

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 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)])
}) })