rm function now working

This commit is contained in:
2026-08-21 15:02:45 +01:00
parent c6357a0b8c
commit 10eb4b0f10
2 changed files with 78 additions and 7 deletions

View File

@@ -31,6 +31,7 @@ fn main() {
&_ => add_files(&arg, &mut args, &mut current_shelf),
}
} else {
// Should be replaced by help function
println!("no parameters")
}
let _ = save_library(library);
@@ -45,7 +46,7 @@ fn list_library(library: &mut Library) {
println!("Current Shelf: {}", &current_shelf.name);
println!("Content: ");
for path in &current_shelf.content {
println!("{}", path)
println!(" - {}", path)
}
}
@@ -53,7 +54,16 @@ fn add_files(current_arg: &str, args: &mut env::Args, shelf: &mut Shelf) {
// Callable function thing
let mut add_file = |file: &str| {
let file_path = Path::new(&file);
let absolute_path = Path::canonicalize(&file_path).expect("something wrong");
let absolute_path = Path::canonicalize(&file_path).expect("Path cannot be Cannonicalized");
match utils::match_file_name(&file, shelf) {
Ok(_) => {
// Prevent existing files from being added to shelf
println!("File {} is already in current shelf", file);
process::exit(0)
}
Err(_) => {} // Continue with function
}
let _ = shelf
.content
@@ -63,6 +73,7 @@ fn add_files(current_arg: &str, args: &mut env::Args, shelf: &mut Shelf) {
return;
};
// If add wasn't specified add the file
if current_arg != "add" {
add_file(&current_arg)
}
@@ -74,14 +85,39 @@ fn add_files(current_arg: &str, args: &mut env::Args, shelf: &mut Shelf) {
}
fn remove_files(args: &mut env::Args, shelf: &mut Shelf) {
if shelf.content.len() < 1 {
println!(
"Shelf \"{}\" is Empty. Are you using the right shelf?",
shelf.name
);
return;
}
if args.len() > 0 {
for file in args {
match file.parse::<usize>() {
// If the argument is a number instead of a file name
let index: usize = match file.parse::<usize>() {
Ok(index) => {
println!("path is: {}", &shelf.content[*&index])
println!("path is: {}", &shelf.content[*&index]);
index
}
Err(_) => {}
Err(_) => match utils::match_file_name(&file, shelf) {
Ok(index) => {
println!("path is: {}", &shelf.content[*&index as usize]);
index
}
Err(e) => {
eprintln!("{e}");
process::exit(1)
}
},
};
let file_path = Path::new(&shelf.content[index]);
println!(
"Removed file {} from shelf {}",
file_path.canonicalize().unwrap().to_str().unwrap(),
shelf.name
);
shelf.content.remove(index);
}
} else {
// If there's no file specified, clear the whole thing

View File

@@ -1,5 +1,5 @@
use crate::structs::{Library, Shelf};
use std::{env, fs, io, io::Read};
use std::{env, fs, io, io::Read, path::Path};
use xdg::BaseDirectories;
pub fn get_shelf_index(shelves: &Vec<Shelf>, id: &u8) -> Option<usize> {
@@ -51,6 +51,8 @@ pub fn get_current_shelf(library: &mut Library) -> &mut Shelf {
// Get current shelf index and push the file
let current_shelf = &mut library.shelves[*&shelf_index];
current_shelf.content.sort();
current_shelf.content.dedup();
return current_shelf;
}
@@ -69,3 +71,36 @@ pub fn initialize_library() -> Library {
};
return default_library;
}
pub fn match_file_name(file_name: &str, shelf: &mut Shelf) -> Result<usize, std::io::Error> {
// Turn given file into string
let match_path = Path::new(file_name);
// If the file path doesnt exist
if !match_path.exists() {
let file_ending = match_path.file_name().expect("Error getting file name");
// For every entry in current shelf
for (i, path) in shelf.content.iter().enumerate() {
// Turn the string back into a path
let shelf_path = Path::new(path).canonicalize()?;
if shelf_path.ends_with(file_ending) {
return Ok(i);
};
}
} // else if it does
let cannonical_path = match_path.canonicalize()?;
for (i, path) in shelf.content.iter().enumerate() {
let shelf_path = Path::new(path).canonicalize()?;
if cannonical_path == shelf_path {
return Ok(i);
}
}
Err(io::Error::new(
io::ErrorKind::NotFound,
format!("File not Found in Shelf \"{}\": {file_name}", shelf.name),
))
}