Skip to content

Commit ed623c4

Browse files
sublipriSerial-ATA
authored andcommitted
ID3v2: Use genres method in Accessor genre getter
1 parent f1afc3e commit ed623c4

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

src/id3/v2/tag.rs

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,6 @@ impl Accessor for Id3v2Tag {
699699
title => "TIT2";
700700
artist => "TPE1";
701701
album => "TALB";
702-
genre => "TCON";
703702
);
704703

705704
fn track(&self) -> Option<u32> {
@@ -760,6 +759,31 @@ impl Accessor for Id3v2Tag {
760759
}
761760
}
762761

762+
fn genre(&self) -> Option<Cow<'_, str>> {
763+
let mut genres = self.genres()?.peekable();
764+
let first = genres.next()?;
765+
766+
if genres.peek().is_none() {
767+
return Some(Cow::Borrowed(first));
768+
};
769+
770+
let mut joined = String::from(first);
771+
for genre in genres {
772+
joined.push_str(" / ");
773+
joined.push_str(genre);
774+
}
775+
776+
Some(Cow::Owned(joined))
777+
}
778+
779+
fn set_genre(&mut self, value: String) {
780+
self.insert(new_text_frame(GENRE_ID, value, FrameFlags::default()));
781+
}
782+
783+
fn remove_genre(&mut self) {
784+
let _ = self.remove(&GENRE_ID);
785+
}
786+
763787
fn year(&self) -> Option<u32> {
764788
if let Some(Frame {
765789
value: FrameValue::Text(TextInformationFrame { value, .. }),
@@ -2542,6 +2566,32 @@ mod tests {
25422566
tag
25432567
}
25442568

2569+
#[test]
2570+
fn genre_text() {
2571+
let tag = id3v2_tag_with_genre("Dream Pop");
2572+
assert_eq!(tag.genre(), Some(Cow::Borrowed("Dream Pop")));
2573+
}
2574+
#[test]
2575+
fn genre_id_brackets() {
2576+
let tag = id3v2_tag_with_genre("(21)");
2577+
assert_eq!(tag.genre(), Some(Cow::Borrowed("Ska")));
2578+
}
2579+
2580+
#[test]
2581+
fn genre_id_numeric() {
2582+
let tag = id3v2_tag_with_genre("21");
2583+
assert_eq!(tag.genre(), Some(Cow::Borrowed("Ska")));
2584+
}
2585+
2586+
#[test]
2587+
fn genre_id_multiple_joined() {
2588+
let tag = id3v2_tag_with_genre("(51)(39)");
2589+
assert_eq!(
2590+
tag.genre(),
2591+
Some(Cow::Borrowed("Techno-Industrial / Noise"))
2592+
);
2593+
}
2594+
25452595
#[test]
25462596
fn genres_id_multiple() {
25472597
let tag = id3v2_tag_with_genre("(51)(39)");

0 commit comments

Comments
 (0)