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 {
|
||||
#[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)
|
||||
}
|
||||
|
||||
|
@ -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)?;
|
||||
|
@ -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)])
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user