fix: handle multiple file arguments for show and edit

This commit is contained in:
2026-09-07 17:52:09 +02:00
parent f99c0b0eca
commit 88668946c2
2 changed files with 31 additions and 29 deletions
+8 -7
View File
@@ -10,11 +10,10 @@ use std::io::Write;
use std::path::PathBuf; use std::path::PathBuf;
use std::{fs::read_dir, fs::File, io::Read, process::Command}; use std::{fs::read_dir, fs::File, io::Read, process::Command};
pub fn edit(file_path: PathBuf, extra_files: [String; 8]) -> std::io::Result<()> { pub fn edit(file_path: Vec<PathBuf>, extra_files: [String; 8]) -> std::io::Result<()> {
let tmp_file_path = PathBuf::from("/tmp/keks-sort-metadata"); let tmp_file_path = PathBuf::from("/tmp/keks-sort-metadata");
let mut tmp_file = File::create(&tmp_file_path)?; let mut tmp_file = File::create(&tmp_file_path)?;
let editor = var("EDITOR").unwrap(); let editor = var("EDITOR").unwrap();
let mut path: PathBuf = file_path.clone();
let mut files = Vec::new(); let mut files = Vec::new();
struct FileMetadata { struct FileMetadata {
@@ -22,9 +21,10 @@ pub fn edit(file_path: PathBuf, extra_files: [String; 8]) -> std::io::Result<()>
tag: Tag, tag: Tag,
} }
if file_path.is_dir() { for file in &file_path {
for music_file in read_dir(&file_path)? { if file.is_dir() {
path = music_file?.path(); for music_file in read_dir(file)? {
let path = music_file?.path();
if path if path
.extension() .extension()
@@ -38,12 +38,13 @@ pub fn edit(file_path: PathBuf, extra_files: [String; 8]) -> std::io::Result<()>
files.push(FileMetadata { path, tag }); files.push(FileMetadata { path, tag });
} }
} else { } else {
let tag = &crate::get_metadata(file_path); let tag = &crate::get_metadata(file);
files.push(FileMetadata { files.push(FileMetadata {
path, path: file.to_path_buf(),
tag: tag.clone(), tag: tag.clone(),
}); });
} }
}
for file in &files { for file in &files {
writeln!( writeln!(
+6 -5
View File
@@ -21,16 +21,15 @@ struct Args {
#[derive(Subcommand)] #[derive(Subcommand)]
enum Commands { enum Commands {
Import { Import {
#[arg(num_args = 1..)]
files: Vec<PathBuf>, files: Vec<PathBuf>,
#[arg(short, long, default_value_t = false)] #[arg(short, long, default_value_t = false)]
copy: bool, copy: bool,
}, },
Show { Show {
file: PathBuf, files: Vec<PathBuf>,
}, },
Edit { Edit {
files: PathBuf, files: Vec<PathBuf>,
}, },
} }
@@ -70,7 +69,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
} }
} }
Commands::Show { file } => { Commands::Show { files } => {
for file in files {
println!("Show file: {:?}", file); println!("Show file: {:?}", file);
let tag = get_metadata(file); let tag = get_metadata(file);
@@ -78,9 +78,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("{:?}", item) println!("{:?}", item)
} }
} }
}
Commands::Edit { files } => { Commands::Edit { files } => {
edit(files.to_path_buf(), extra_files)?; edit(files.to_vec(), extra_files)?;
} }
} }