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