aico/commands/
add.rs

1use crate::exceptions::AicoError;
2use crate::fs::validate_input_paths;
3use crate::session::Session;
4use std::path::PathBuf;
5
6pub fn run(file_paths: Vec<PathBuf>) -> Result<(), AicoError> {
7    let mut session = Session::load_active()?;
8
9    // 1. Validate
10    let (valid_rels, has_errors) = validate_input_paths(&session.root, &file_paths, true);
11
12    // 2. Modify View
13    let mut changed = false;
14    for rel in valid_rels {
15        if session.view.context_files.contains(&rel) {
16            println!("File already in context: {}", rel);
17        } else {
18            println!("Added file to context: {}", rel);
19            session.view.context_files.push(rel);
20            changed = true;
21        }
22    }
23
24    // 3. Save
25    if changed {
26        session.view.context_files.sort();
27        session.save_view()?;
28    }
29
30    if has_errors {
31        return Err(AicoError::InvalidInput(
32            "One or more files could not be added.".into(),
33        ));
34    }
35
36    Ok(())
37}