feat: add function to parse editor output in edit
This commit is contained in:
+18
-12
@@ -1,31 +1,37 @@
|
|||||||
use lofty::tag::Tag;
|
use lofty::tag::Tag;
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::env::var;
|
use std::env::var;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::{fs::File, io::Read, process::Command};
|
use std::{fs::File, io::Read, process::Command};
|
||||||
|
|
||||||
pub fn edit(file_path: PathBuf, tag: Tag) -> std::io::Result<()> {
|
pub fn edit(file_path: PathBuf, mut tag: Tag) -> std::io::Result<()> {
|
||||||
|
let tmp_file = PathBuf::from("/tmp/keks-sort-metadata");
|
||||||
let editor = var("EDITOR").unwrap();
|
let editor = var("EDITOR").unwrap();
|
||||||
let mut file = File::create(&file_path)?;
|
let mut file = File::create(&tmp_file)?;
|
||||||
for item in tag.items() {
|
for item in tag.items() {
|
||||||
writeln!(
|
writeln!(file, "{:?} = {}", item.key(), item.value().text().unwrap())?;
|
||||||
file,
|
|
||||||
"{:?} = {:?}",
|
|
||||||
item.key(),
|
|
||||||
item.value().text().unwrap_or("")
|
|
||||||
)?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Command::new(editor)
|
Command::new(editor)
|
||||||
.arg(&file_path)
|
.arg(&tmp_file)
|
||||||
.status()
|
.status()
|
||||||
.expect("Something went wrong");
|
.expect("Something went wrong");
|
||||||
|
|
||||||
let mut editable = String::new();
|
let mut editable = String::new();
|
||||||
let _ = File::open(file_path)
|
File::open(&tmp_file)
|
||||||
.expect("Could not open file")
|
.expect("Could not open file")
|
||||||
.read_to_string(&mut editable);
|
.read_to_string(&mut editable)?;
|
||||||
|
|
||||||
println!("File content:\n{}", editable);
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse(input: &str) -> HashMap<String, String> {
|
||||||
|
input
|
||||||
|
.lines()
|
||||||
|
.filter_map(|line| {
|
||||||
|
let (key, value) = line.split_once('=')?;
|
||||||
|
Some((key.trim().to_string(), value.trim().to_string()))
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|||||||
+2
-2
@@ -72,9 +72,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Commands::Edit { file } => {
|
Commands::Edit { file } => {
|
||||||
let path = PathBuf::from("/tmp/keks-sort-metadata");
|
|
||||||
let tag = get_metadata(file);
|
let tag = get_metadata(file);
|
||||||
edit(path, tag)?;
|
edit(file.to_path_buf(), tag)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,5 +90,6 @@ fn get_metadata<P: AsRef<OsStr>>(file_path: P) -> lofty::tag::Tag {
|
|||||||
Some(primary_tag) => primary_tag,
|
Some(primary_tag) => primary_tag,
|
||||||
None => tagged_file.first_tag().expect("ERROR: No tags found!"),
|
None => tagged_file.first_tag().expect("ERROR: No tags found!"),
|
||||||
};
|
};
|
||||||
|
|
||||||
tag.clone()
|
tag.clone()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user