Simplified dbpath cli argument handling
This commit is contained in:
parent
d7eb3fb47a
commit
293113949b
80
src/main.rs
80
src/main.rs
@ -6,17 +6,10 @@ use crossterm::{
|
|||||||
};
|
};
|
||||||
use kanban_tui::{Project, State};
|
use kanban_tui::{Project, State};
|
||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
use std::{
|
use std::{error::Error, io, path::PathBuf};
|
||||||
error::Error,
|
|
||||||
fs::{File, OpenOptions},
|
|
||||||
io::{self, Write},
|
|
||||||
path::PathBuf,
|
|
||||||
};
|
|
||||||
use tui::backend::CrosstermBackend;
|
use tui::backend::CrosstermBackend;
|
||||||
use tui::Terminal;
|
use tui::Terminal;
|
||||||
|
|
||||||
const DEFAULT_DATABASE_NAME: &str = "kanban.json";
|
|
||||||
|
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
#[command(name = "kanban")]
|
#[command(name = "kanban")]
|
||||||
/// kanban-tui is a simple, interactive TUI based task manager using kanban columns
|
/// kanban-tui is a simple, interactive TUI based task manager using kanban columns
|
||||||
@ -26,72 +19,17 @@ pub struct CliArgs {
|
|||||||
pub filepath: Option<PathBuf>,
|
pub filepath: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This should just return a struct beacuse we should add a
|
|
||||||
// "should_quit" thing instead of calling exit(0) here
|
|
||||||
fn prompt_project_init(default_name: &str) -> (String, io::Result<File>) {
|
|
||||||
let mut input = String::new();
|
|
||||||
|
|
||||||
println!("Database not found, select the name of the database if it exists or enter a name to start a new project");
|
|
||||||
print!("Database name (default: {default_name}): ");
|
|
||||||
io::stdout().flush().unwrap();
|
|
||||||
|
|
||||||
let result = io::stdin().read_line(&mut input);
|
|
||||||
let input = input.trim();
|
|
||||||
|
|
||||||
let filename = match result {
|
|
||||||
Ok(b) if b == 0 => std::process::exit(0),
|
|
||||||
Ok(b) if b > 0 && !input.is_empty() => input,
|
|
||||||
_ => default_name,
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: This might be a good time to prompt the user if they want
|
|
||||||
// to change the default column names
|
|
||||||
|
|
||||||
(
|
|
||||||
filename.to_string(),
|
|
||||||
OpenOptions::new()
|
|
||||||
.write(true)
|
|
||||||
.read(true)
|
|
||||||
.create(true)
|
|
||||||
.open(filename),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[async_std::main]
|
#[async_std::main]
|
||||||
async fn main() -> anyhow::Result<(), Box<dyn Error>> {
|
async fn main() -> anyhow::Result<(), Box<dyn Error>> {
|
||||||
let (_filepath, _file) = match CliArgs::parse() {
|
let dbpath = CliArgs::parse()
|
||||||
CliArgs {
|
.filepath
|
||||||
filepath: Some(filepath),
|
.map(PathBuf::into_os_string)
|
||||||
} => {
|
.unwrap_or("kanban.db".into());
|
||||||
let fpath = filepath.into_os_string().into_string().unwrap();
|
|
||||||
let file = OpenOptions::new().write(true).read(true).open(&fpath);
|
|
||||||
|
|
||||||
if let Ok(f) = file {
|
let conn = Connection::open(dbpath)?;
|
||||||
(fpath, f)
|
|
||||||
} else {
|
|
||||||
let (fp, fname) = prompt_project_init(&fpath);
|
|
||||||
(fp, fname.unwrap())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CliArgs { filepath: None } => {
|
|
||||||
let file = OpenOptions::new()
|
|
||||||
.write(true)
|
|
||||||
.read(true)
|
|
||||||
.open(DEFAULT_DATABASE_NAME);
|
|
||||||
if let Ok(f) = file {
|
|
||||||
(DEFAULT_DATABASE_NAME.to_string(), f)
|
|
||||||
} else {
|
|
||||||
let (fp, fname) = prompt_project_init(DEFAULT_DATABASE_NAME);
|
|
||||||
(fp, fname.unwrap())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let db_pool = Connection::open("db.sqlite")?;
|
let project = Project::load(&conn).await?;
|
||||||
|
let mut state = State::new(conn, project);
|
||||||
// let project = Project::load(_filepath, &_file)?;
|
|
||||||
let project = Project::load(&db_pool).await?;
|
|
||||||
let mut state = State::new(db_pool, project);
|
|
||||||
|
|
||||||
enable_raw_mode()?;
|
enable_raw_mode()?;
|
||||||
let mut stdout = io::stdout();
|
let mut stdout = io::stdout();
|
||||||
@ -104,8 +42,6 @@ async fn main() -> anyhow::Result<(), Box<dyn Error>> {
|
|||||||
kanban_tui::handle(&mut state)?;
|
kanban_tui::handle(&mut state)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// state.project.save();
|
|
||||||
|
|
||||||
// restore terminal
|
// restore terminal
|
||||||
disable_raw_mode()?;
|
disable_raw_mode()?;
|
||||||
crossterm::execute!(
|
crossterm::execute!(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user