From 44dd99e543a666279340be4c6b3d2911da131938 Mon Sep 17 00:00:00 2001 From: Patrick Auernig Date: Tue, 26 Nov 2024 17:26:32 +0100 Subject: [PATCH] feat(core): Write selected project to file instead of stdout --- src/main.rs | 36 +++++++++++++++++++++++++++++++++++- src/tui.rs | 9 +++------ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index 071b626..fdcd45b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ mod tui; use std::fs; +use std::io::Write; use std::path::PathBuf; use anyhow::{ensure, Result}; @@ -38,7 +39,7 @@ fn main() -> Result<()> { let result = match &args.cmd { Some(cmd) => handle_subcommands(projects, cmd), - None => tui::run(projects), + None => run_tui(projects), }; if let Err(err) = result { @@ -50,6 +51,18 @@ fn main() -> Result<()> { } +fn run_tui(projects: Projects) -> Result<()> { + clear_selected_project_file()?; + let selected_project = tui::run(projects)?; + + if let Some(selected_project) = selected_project { + write_selected_project_file(selected_project)? + } + + Ok(()) +} + + fn handle_subcommands(mut projects: Projects, cmd: &Command) -> Result<()> { match cmd { Command::Add { path } => { @@ -91,6 +104,27 @@ fn list_projects(projects: &Projects) -> Result<()> { Ok(()) } +fn clear_selected_project_file() -> Result<()> { + let cache_file = dirs::cache_path().join("selected-project"); + + if fs::exists(&cache_file)? { + fs::remove_file(cache_file)?; + } + + Ok(()) +} + +fn write_selected_project_file(path: PathBuf) -> Result<()> { + let cache_file = dirs::cache_path().join("selected-project"); + let mut file = fs::OpenOptions::new() + .write(true) + .create(true) + .truncate(true) + .open(cache_file)?; + write!(file, "{}", path.display())?; + Ok(()) +} + fn write_projects_file(projects: &Projects) -> Result<()> { let projects_file = dirs::data_path().join("projects"); diff --git a/src/tui.rs b/src/tui.rs index cf2f9e6..f2ea3ce 100644 --- a/src/tui.rs +++ b/src/tui.rs @@ -43,7 +43,7 @@ impl State { } -pub fn run(projects: Projects) -> Result<()> { +pub fn run(projects: Projects) -> Result> { let mut term = ratatui::init(); let mut state = State::new(projects); @@ -69,11 +69,7 @@ pub fn run(projects: Projects) -> Result<()> { ratatui::restore(); - if let Some(path) = state.selected_project { - println!("{}", path.display()); - } - - Ok(()) + Ok(state.selected_project) } @@ -105,6 +101,7 @@ fn handle_messages(state: &mut State, rx: &mut mpsc::Receiver) -> Resul match msg { Message::Exit => { state.should_exit = true; + state.selected_project = None; } Message::MoveDown => { state.project_table.select_next();