feat: add new subcommand to open default editor with metadata
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
|||||||
|
use lofty::tag::Tag;
|
||||||
|
use std::env::var;
|
||||||
|
use std::io::Write;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
use std::{fs::File, io::Read, process::Command};
|
||||||
|
|
||||||
|
pub fn edit(file_path: PathBuf, tag: Tag) -> std::io::Result<()> {
|
||||||
|
let editor = var("EDITOR").unwrap();
|
||||||
|
let mut file = File::create(&file_path)?;
|
||||||
|
for item in tag.items() {
|
||||||
|
writeln!(
|
||||||
|
file,
|
||||||
|
"{:?} = {:?}",
|
||||||
|
item.key(),
|
||||||
|
item.value().text().unwrap_or("")
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Command::new(editor)
|
||||||
|
.arg(&file_path)
|
||||||
|
.status()
|
||||||
|
.expect("Something went wrong");
|
||||||
|
|
||||||
|
let mut editable = String::new();
|
||||||
|
let _ = File::open(file_path)
|
||||||
|
.expect("Could not open file")
|
||||||
|
.read_to_string(&mut editable);
|
||||||
|
|
||||||
|
println!("File content:\n{}", editable);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
+11
@@ -8,6 +8,9 @@ use std::path::PathBuf;
|
|||||||
mod move_files;
|
mod move_files;
|
||||||
use move_files::move_files;
|
use move_files::move_files;
|
||||||
|
|
||||||
|
mod edit;
|
||||||
|
use edit::edit;
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
#[command(version, about, long_about = None)]
|
#[command(version, about, long_about = None)]
|
||||||
struct Args {
|
struct Args {
|
||||||
@@ -25,6 +28,9 @@ enum Commands {
|
|||||||
Show {
|
Show {
|
||||||
file: PathBuf,
|
file: PathBuf,
|
||||||
},
|
},
|
||||||
|
Edit {
|
||||||
|
file: PathBuf,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
@@ -61,6 +67,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
println!("{:?}", item)
|
println!("{:?}", item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Commands::Edit { file } => {
|
||||||
|
let path = PathBuf::from("/tmp/keks-sort-metadata");
|
||||||
|
let tag = get_metadata(file);
|
||||||
|
edit(path, tag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user