commit - a76c816b1a6b0f238f63bfd1076180a24704a09e
commit + bcd273eb27416845e980eb8ebd56d6f9e89eb734
blob - d0037a387c771c596a5c4e5ac7d564379f650d4a
blob + 9cbd1a5e956463d6e958443162ada44c0119aba9
--- src/tagging.rs
+++ src/tagging.rs
}
match read_file_tags(&abs_path) {
+ Ok((_, artist, album)) if artist.is_empty() || album.is_empty() => {
+ eprintln!(
+ "Skipping {} - artist/album tags required to fetch metadata",
+ path.display()
+ );
+ }
Ok((_, artist, album)) => {
files_by_release
.entry((artist, album))
}
fn write_file_tags(path: &Path, metadata: &FetchedMetadata) -> Result<()> {
- let file =
- File::open(path).with_context(|| format!("Failed to open file: {}", path.display()))?;
- let mut probe = Probe::new(file);
-
- if let Some(file_type) = path
- .extension()
- .and_then(|e| e.to_str())
- .and_then(lofty::file::FileType::from_ext)
- {
- probe = probe.set_file_type(file_type);
- }
-
- let mut tagged_file = probe
- .read()
- .with_context(|| format!("Failed to read tags from {}", path.display()))?;
-
+ let (mut tagged_file, _, _) = read_file_tags(path)?;
let tag = tagged_file
.primary_tag_mut()
.context("No primary tag found")?;
Ok(())
}
+fn read_tagged_file(path: &Path) -> Result<TaggedFile> {
+ let file =
+ File::open(path).with_context(|| format!("Failed to open file: {}", path.display()))?;
+ let mut probe = Probe::new(file);
+
+ if let Some(file_type) = path
+ .extension()
+ .and_then(|e| e.to_str())
+ .and_then(lofty::file::FileType::from_ext)
+ {
+ probe = probe.set_file_type(file_type);
+ }
+
+ probe
+ .read()
+ .with_context(|| format!("Failed to read tags from {}", path.display()))
+}
+
fn read_file_tags(path: &Path) -> Result<(TaggedFile, String, String)> {
- let file =
- File::open(path).with_context(|| format!("Failed to open file: {}", path.display()))?;
- let mut probe = Probe::new(file);
+ let mut tagged_file = read_tagged_file(path)?;
- if let Some(file_type) = path
- .extension()
- .and_then(|e| e.to_str())
- .and_then(lofty::file::FileType::from_ext)
- {
- probe = probe.set_file_type(file_type);
+ if tagged_file.primary_tag().is_none() {
+ tagged_file.insert_tag(Tag::new(tagged_file.primary_tag_type()));
}
- let mut tagged_file = probe
- .read()
- .with_context(|| format!("Failed to read tags from {}", path.display()))?;
+ let tag = tagged_file.primary_tag().context("No primary tag found")?;
+ let artist = tag.artist().map(|a| a.to_string()).unwrap_or_default();
+ let album = tag.album().map(|a| a.to_string()).unwrap_or_default();
- let tag = tagged_file
- .primary_tag_mut()
- .context("No primary tag found")?;
- let artist = tag.artist().context("Artist not found")?.to_string();
- let album = tag.album().context("Album not found")?.to_string();
-
Ok((tagged_file, artist, album))
}