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 let (valid_rels, has_errors) = validate_input_paths(&session.root, &file_paths, false);
12
13 let mut changed = false;
15
16 let mut context_errors = false;
18
19 for rel in valid_rels {
20 if let Some(pos) = session.view.context_files.iter().position(|x| x == &rel) {
21 session.view.context_files.remove(pos);
22 println!("Dropped file from context: {}", rel);
23 changed = true;
24 } else {
25 eprintln!("Error: File not in context: {}", rel);
26 context_errors = true;
27 }
28 }
29
30 if changed {
32 session.save_view()?;
33 }
34
35 if has_errors || context_errors {
36 return Err(AicoError::InvalidInput(
37 "One or more files could not be dropped.".into(),
38 ));
39 }
40
41 Ok(())
42}