From ac0f88f1a9bd1dd4e58a227d631b0864bbc009da Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Mon, 11 Nov 2024 20:39:36 +0100 Subject: [PATCH 1/9] feat: Add support for IPLS (v2.3) and TIPL/TMCL (v2.4) frames --- src/frame/content.rs | 63 +++++++++++++ src/frame/mod.rs | 10 +- src/stream/frame/content.rs | 177 +++++++++++++++++++++++++++++++++++- 3 files changed, 242 insertions(+), 8 deletions(-) diff --git a/src/frame/content.rs b/src/frame/content.rs index cb3a53fe4..3c8fad278 100644 --- a/src/frame/content.rs +++ b/src/frame/content.rs @@ -55,6 +55,8 @@ pub enum Content { TableOfContents(TableOfContents), /// A value containing the parsed contents of a unique file identifier frame (UFID). UniqueFileIdentifier(UniqueFileIdentifier), + /// A value containing the parsed contents of an involved people list IPLS + InvolvedPeopleList(InvolvedPeopleList), /// A value containing the bytes of a currently unknown frame type. /// /// Users that wish to write custom decoders must use [`Content::to_unknown`] instead of @@ -114,6 +116,19 @@ impl Content { Self::UniqueFileIdentifier(unique_file_identifier) => Comparable(vec![Cow::Borrowed( unique_file_identifier.owner_identifier.as_bytes(), )]), + Self::InvolvedPeopleList(involved_people_list) => Comparable( + involved_people_list + .items + .iter() + .flat_map(|item| { + [ + Cow::Borrowed(item.involvement.as_bytes()), + Cow::Borrowed(item.involvee.as_bytes()), + ] + .into_iter() + }) + .collect(), + ), Self::Unknown(_) => Incomparable, } } @@ -262,6 +277,14 @@ impl Content { } } + /// Returns the `InvolvedPeopleList` or None if the value is not `IPLS` + pub fn involved_people_list(&self) -> Option<&InvolvedPeopleList> { + match self { + Content::InvolvedPeopleList(involved_people_list) => Some(involved_people_list), + _ => None, + } + } + /// Returns the `Unknown` or None if the value is not `Unknown`. #[deprecated(note = "Use to_unknown")] pub fn unknown(&self) -> Option<&[u8]> { @@ -308,6 +331,9 @@ impl fmt::Display for Content { Content::UniqueFileIdentifier(unique_file_identifier) => { write!(f, "{}", unique_file_identifier) } + Content::InvolvedPeopleList(involved_people_list) => { + write!(f, "{}", involved_people_list) + } Content::Unknown(unknown) => write!(f, "{}", unknown), } } @@ -850,6 +876,43 @@ impl From for Frame { } } +/// The parsed contents of an IPLS frame. +#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] +pub struct InvolvedPeopleList { + /// Items in the People List. + pub items: Vec, +} + +/// The parsed contents of an IPLS frame. +#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] +pub struct InvolvedPeopleListItem { + /// Role of the involved person. + pub involvement: String, + /// Name of the involved person. + pub involvee: String, +} + +impl fmt::Display for InvolvedPeopleList { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let item_count = self.items.len(); + for (i, item) in self.items.iter().enumerate() { + if i == 0 && item_count > 1 { + write!(f, "{}: {} / ", item.involvement, item.involvee)?; + } else { + write!(f, "{}: {}", item.involvement, item.involvee)?; + } + } + + Ok(()) + } +} + +impl From for Frame { + fn from(c: InvolvedPeopleList) -> Self { + Self::with_content("IPLS", Content::InvolvedPeopleList(c)) + } +} + #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] #[allow(missing_docs)] pub struct TableOfContents { diff --git a/src/frame/mod.rs b/src/frame/mod.rs index 4a58bf017..dd5fb494a 100644 --- a/src/frame/mod.rs +++ b/src/frame/mod.rs @@ -5,10 +5,10 @@ use std::fmt; use std::str; pub use self::content::{ - Chapter, Comment, Content, EncapsulatedObject, ExtendedLink, ExtendedText, Lyrics, - MpegLocationLookupTable, MpegLocationLookupTableReference, Picture, PictureType, Popularimeter, - Private, SynchronisedLyrics, SynchronisedLyricsType, TableOfContents, TimestampFormat, - UniqueFileIdentifier, Unknown, + Chapter, Comment, Content, EncapsulatedObject, ExtendedLink, ExtendedText, InvolvedPeopleList, + InvolvedPeopleListItem, Lyrics, MpegLocationLookupTable, MpegLocationLookupTableReference, + Picture, PictureType, Popularimeter, Private, SynchronisedLyrics, SynchronisedLyricsType, + TableOfContents, TimestampFormat, UniqueFileIdentifier, Unknown, }; pub use self::timestamp::Timestamp; @@ -84,6 +84,7 @@ impl Frame { ("APIC", Content::Picture(_)) => Ok(()), ("CHAP", Content::Chapter(_)) => Ok(()), ("MLLT", Content::MpegLocationLookupTable(_)) => Ok(()), + ("IPLS", Content::InvolvedPeopleList(_)) => Ok(()), ("PRIV", Content::Private(_)) => Ok(()), ("CTOC", Content::TableOfContents(_)) => Ok(()), ("UFID", Content::UniqueFileIdentifier(_)) => Ok(()), @@ -105,6 +106,7 @@ impl Frame { Content::Private(_) => "PrivateFrame", Content::TableOfContents(_) => "TableOfContents", Content::UniqueFileIdentifier(_) => "UFID", + Content::InvolvedPeopleList(_) => "InvolvedPeopleList", Content::Unknown(_) => "Unknown", }; Err(Error::new( diff --git a/src/stream/frame/content.rs b/src/stream/frame/content.rs index b9afdf4c5..a8860bb0c 100644 --- a/src/stream/frame/content.rs +++ b/src/stream/frame/content.rs @@ -1,8 +1,8 @@ use crate::frame::{ - Chapter, Comment, Content, EncapsulatedObject, ExtendedLink, ExtendedText, Lyrics, - MpegLocationLookupTable, MpegLocationLookupTableReference, Picture, PictureType, Popularimeter, - Private, SynchronisedLyrics, SynchronisedLyricsType, TableOfContents, TimestampFormat, - UniqueFileIdentifier, Unknown, + Chapter, Comment, Content, EncapsulatedObject, ExtendedLink, ExtendedText, InvolvedPeopleList, + InvolvedPeopleListItem, Lyrics, MpegLocationLookupTable, MpegLocationLookupTableReference, + Picture, PictureType, Popularimeter, Private, SynchronisedLyrics, SynchronisedLyricsType, + TableOfContents, TimestampFormat, UniqueFileIdentifier, Unknown, }; use crate::stream::encoding::Encoding; use crate::stream::frame; @@ -306,6 +306,17 @@ impl Encoder { Ok(()) } + fn involved_people_list(&mut self, content: &InvolvedPeopleList) -> crate::Result<()> { + self.encoding()?; + for item in &content.items { + self.string(&item.involvement)?; + self.delim()?; + self.string(&item.involvee)?; + self.delim()?; + } + Ok(()) + } + fn table_of_contents_content(&mut self, content: &TableOfContents) -> crate::Result<()> { self.string_with_other_encoding(Encoding::Latin1, &content.element_id)?; self.byte(0)?; @@ -361,6 +372,7 @@ pub fn encode( Content::Private(c) => encoder.private_content(c)?, Content::TableOfContents(c) => encoder.table_of_contents_content(c)?, Content::UniqueFileIdentifier(c) => encoder.unique_file_identifier_content(c)?, + Content::InvolvedPeopleList(c) => encoder.involved_people_list(c)?, Content::Unknown(c) => encoder.bytes(&c.data)?, }; @@ -411,6 +423,7 @@ pub fn decode( encoding = Some(enc); Ok(content) } + "IPLS" | "IPL" | "TMCL" | "TIPL" => decoder.involved_people_list(), id if id.starts_with('T') => decoder.text_content(), id if id.starts_with('W') => decoder.link_content(), "GRP1" => decoder.text_content(), @@ -513,6 +526,67 @@ impl<'a> Decoder<'a> { Ok(Content::Text(text)) } + fn involved_people_list(mut self) -> crate::Result { + let encoding = self.encoding()?; + let end = match self.version { + Version::Id3v23 | Version::Id3v24 => find_closing_delim(encoding, self.r), + _ => find_delim(encoding, self.r, 0), + } + .unwrap_or(self.r.len()); + + let data = self.bytes(end)?; + + let mut pos = 0; + let items = iter::repeat_with(|| { + find_delim(encoding, data, pos) + .map(|next_pos| { + let substr = encoding.decode(&data[pos..next_pos]); + pos = next_pos + delim_len(encoding); + substr + }) + .or_else(|| { + if pos < data.len() { + let substr = encoding.decode(&data[pos..]); + pos = data.len(); + Some(substr) + } else { + None + } + }) + }) + .scan(None, |last_string, string| match (&last_string, string) { + (None, Some(string)) => { + *last_string = Some(string); + Some(Ok(None)) + } + (Some(_), Some(second)) => { + let first = last_string.take().expect("option must be some"); + let result = first.and_then(|involvement| { + second.map(|involvee| { + Some(InvolvedPeopleListItem { + involvement, + involvee, + }) + }) + }); + Some(result) + } + (Some(_), None) => { + // This can only happen if there is an uneven number of elements. + *last_string = None; + Some(Err(Error::new( + ErrorKind::Parsing, + "uneven number of IPLS strings", + ))) + } + (None, None) => None, + }) + .filter_map(|item| item.transpose()) + .collect::>>()?; + + Ok(Content::InvolvedPeopleList(InvolvedPeopleList { items })) + } + fn link_content(self) -> crate::Result { Ok(Content::Link(String::from_utf8(self.r.to_vec())?)) } @@ -1510,6 +1584,101 @@ mod tests { } } + #[test] + fn test_ipls() { + check_involved_people_list("IPLS", Version::Id3v23); + } + + #[test] + fn test_tmcl() { + check_involved_people_list("TMCL", Version::Id3v24); + } + + #[test] + fn test_tipl() { + check_involved_people_list("TIPL", Version::Id3v24); + } + + fn check_involved_people_list(frame_id: &str, version: Version) { + assert!(decode(frame_id, version, &[][..]).is_err()); + + println!("valid"); + for people_list in &[ + vec![], + vec![("involvement", "involvee")], + vec![ + ("double bass", "Israel Crosby"), + ("drums (drum set)", "Vernell Fournier"), + ("piano", "Ahmad Jamal"), + ("producer", "Dave Usher"), + ], + ] { + for encoding in &[ + Encoding::Latin1, + Encoding::UTF8, + Encoding::UTF16, + Encoding::UTF16BE, + ] { + println!("`{:?}`, `{:?}`", people_list, encoding); + let mut data = Vec::new(); + data.push(*encoding as u8); + for (involvement, involvee) in people_list { + data.extend(bytes_for_encoding(&involvement, *encoding).into_iter()); + data.extend(delim_for_encoding(*encoding).into_iter()); + data.extend(bytes_for_encoding(&involvee, *encoding).into_iter()); + data.extend(delim_for_encoding(*encoding).into_iter()); + } + + let content = frame::InvolvedPeopleList { + items: people_list + .iter() + .map(|(involvement, involvee)| InvolvedPeopleListItem { + involvement: involvement.to_string(), + involvee: involvee.to_string(), + }) + .collect(), + }; + assert_eq!( + *decode(frame_id, version, &data[..]) + .unwrap() + .0 + .involved_people_list() + .unwrap(), + content + ); + let mut data_out = Vec::new(); + encode( + &mut data_out, + &&Content::InvolvedPeopleList(content), + Version::Id3v23, + *encoding, + ) + .unwrap(); + assert_eq!(data, data_out); + } + } + + println!("invalid"); + for encoding in &[ + Encoding::Latin1, + Encoding::UTF8, + Encoding::UTF16, + Encoding::UTF16BE, + ] { + println!("`{:?}`", encoding); + let mut data = Vec::new(); + data.push(*encoding as u8); + data.extend(bytes_for_encoding("involvement", *encoding).into_iter()); + data.extend(delim_for_encoding(*encoding).into_iter()); + data.extend(bytes_for_encoding("involvee", *encoding).into_iter()); + data.extend(delim_for_encoding(*encoding).into_iter()); + data.extend(bytes_for_encoding("other involvement", *encoding).into_iter()); + data.extend(delim_for_encoding(*encoding).into_iter()); + // involveee missing here + assert!(decode(frame_id, version, &data[..]).is_err()); + } + } + #[test] fn test_mllt_4_4() { let mllt = Content::MpegLocationLookupTable(MpegLocationLookupTable { From 80177c84915dcd59fbc70ce1ea16004185d0377b Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Fri, 15 Nov 2024 23:43:03 +0100 Subject: [PATCH 2/9] docs: Improve comments on IPLS/TIPL/TMCL frames --- src/frame/content.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/frame/content.rs b/src/frame/content.rs index 3c8fad278..bcfbb0005 100644 --- a/src/frame/content.rs +++ b/src/frame/content.rs @@ -55,7 +55,7 @@ pub enum Content { TableOfContents(TableOfContents), /// A value containing the parsed contents of a unique file identifier frame (UFID). UniqueFileIdentifier(UniqueFileIdentifier), - /// A value containing the parsed contents of an involved people list IPLS + /// A value containing the parsed contents of an involved people list frame (IPLS/TIPL/TMCL) InvolvedPeopleList(InvolvedPeopleList), /// A value containing the bytes of a currently unknown frame type. /// @@ -277,7 +277,7 @@ impl Content { } } - /// Returns the `InvolvedPeopleList` or None if the value is not `IPLS` + /// Returns the `InvolvedPeopleList` or None if the value is not `IPLS`/`TIPL`/`TMCL` pub fn involved_people_list(&self) -> Option<&InvolvedPeopleList> { match self { Content::InvolvedPeopleList(involved_people_list) => Some(involved_people_list), @@ -876,14 +876,14 @@ impl From for Frame { } } -/// The parsed contents of an IPLS frame. +/// The parsed contents of an `IPLS` (ID3v2.3) or `TIPL`/`TMCL` (ID3v2.4) frame. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] pub struct InvolvedPeopleList { /// Items in the People List. pub items: Vec, } -/// The parsed contents of an IPLS frame. +/// A entry inside the list in an `IPLS` (ID3v2.3) or `TIPL`/`TMCL` (ID3v2.4) frame. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] pub struct InvolvedPeopleListItem { /// Role of the involved person. From f0bb49ef447d6b94ab88b82cf782da9debd6061a Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Fri, 15 Nov 2024 23:43:24 +0100 Subject: [PATCH 3/9] chore: Use TIPL frame for `InvolvedPeopleList::from` impl --- src/frame/content.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frame/content.rs b/src/frame/content.rs index bcfbb0005..549617836 100644 --- a/src/frame/content.rs +++ b/src/frame/content.rs @@ -909,7 +909,7 @@ impl fmt::Display for InvolvedPeopleList { impl From for Frame { fn from(c: InvolvedPeopleList) -> Self { - Self::with_content("IPLS", Content::InvolvedPeopleList(c)) + Self::with_content("TIPL", Content::InvolvedPeopleList(c)) } } From 24b34f4d0766f373bceecb1bbe8bcff0b40c9a62 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Sun, 17 Nov 2024 16:25:59 +0100 Subject: [PATCH 4/9] feat: Add `Tag::involved_people_lists()` method --- src/tag.rs | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 2 deletions(-) diff --git a/src/tag.rs b/src/tag.rs index a9a63b7f8..3ba501c4b 100644 --- a/src/tag.rs +++ b/src/tag.rs @@ -1,7 +1,7 @@ use crate::chunk; use crate::frame::{ - Chapter, Comment, EncapsulatedObject, ExtendedLink, ExtendedText, Frame, Lyrics, Picture, - SynchronisedLyrics, TableOfContents, UniqueFileIdentifier, + Chapter, Comment, EncapsulatedObject, ExtendedLink, ExtendedText, Frame, InvolvedPeopleList, + Lyrics, Picture, SynchronisedLyrics, TableOfContents, UniqueFileIdentifier, }; use crate::storage::{plain::PlainStorage, Format, Storage}; use crate::stream; @@ -496,6 +496,95 @@ impl<'a> Tag { self.frames() .filter_map(|frame| frame.content().table_of_contents()) } + + /// Returns an iterator over all involved people lists (`IPLS` in ID3v2.3, `TIPL` and `TMCL` in + /// ID3v2.4) in the tag. + /// + /// # Examples + /// + /// ## `IPLS` frame (ID3v2.3) + /// + /// ``` + /// use id3::{Frame, Tag, TagLike, Version}; + /// use id3::frame::{Content, InvolvedPeopleList, InvolvedPeopleListItem}; + /// + /// let mut tag = Tag::with_version(Version::Id3v23); + /// + /// let frame = Frame::with_content("IPLS", Content::InvolvedPeopleList(InvolvedPeopleList { + /// items: vec![ + /// InvolvedPeopleListItem { + /// involvement: "drums (drum set)".to_string(), + /// involvee: "Gene Krupa".to_string(), + /// }, + /// InvolvedPeopleListItem { + /// involvement: "piano".to_string(), + /// involvee: "Hank Jones".to_string(), + /// }, + /// InvolvedPeopleListItem { + /// involvement: "tenor saxophone".to_string(), + /// involvee: "Frank Socolow".to_string(), + /// }, + /// InvolvedPeopleListItem { + /// involvement: "tenor saxophone".to_string(), + /// involvee: "Eddie Wasserman".to_string(), + /// }, + /// ], + /// })); + /// tag.add_frame(frame); + /// assert_eq!(1, tag.involved_people_lists().count()); + /// assert_eq!(4, tag.involved_people_lists().flat_map(|list| list.items.iter()).count()); + /// ``` + /// + /// ## `TIPL`/`TMCL` frames (ID3v2.4) + /// ``` + /// use id3::{Frame, Tag, TagLike, Version}; + /// use id3::frame::{Content, InvolvedPeopleList, InvolvedPeopleListItem}; + /// + /// let mut tag = Tag::with_version(Version::Id3v24); + /// + /// let frame = Frame::with_content("TMCL", Content::InvolvedPeopleList(InvolvedPeopleList { + /// items: vec![ + /// InvolvedPeopleListItem { + /// involvement: "drums (drum set)".to_string(), + /// involvee: "Gene Krupa".to_string(), + /// }, + /// InvolvedPeopleListItem { + /// involvement: "piano".to_string(), + /// involvee: "Hank Jones".to_string(), + /// }, + /// InvolvedPeopleListItem { + /// involvement: "tenor saxophone".to_string(), + /// involvee: "Frank Socolow".to_string(), + /// }, + /// InvolvedPeopleListItem { + /// involvement: "tenor saxophone".to_string(), + /// involvee: "Eddie Wasserman".to_string(), + /// }, + /// ], + /// })); + /// tag.add_frame(frame); + /// + /// let frame = Frame::with_content("TIPL", Content::InvolvedPeopleList(InvolvedPeopleList { + /// items: vec![ + /// InvolvedPeopleListItem { + /// involvement: "executive producer".to_string(), + /// involvee: "Ken Druker".to_string(), + /// }, + /// InvolvedPeopleListItem { + /// involvement: "arranger".to_string(), + /// involvee: "Gerry Mulligan".to_string(), + /// }, + /// ], + /// })); + /// tag.add_frame(frame); + /// assert_eq!(2, tag.involved_people_lists().count()); + /// assert_eq!(6, tag.involved_people_lists().flat_map(|list| list.items.iter()).count()); + /// + /// ``` + pub fn involved_people_lists(&self) -> impl Iterator { + self.frames() + .filter_map(|frame| frame.content().involved_people_list()) + } } impl PartialEq for Tag { From f438a3dd4a0a2a3ed24c4a585b28bbaf1dcef470 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Sun, 17 Nov 2024 16:41:13 +0100 Subject: [PATCH 5/9] chore: Add tests for `IPLS`/`TIPL`/`TMCL` frames --- src/tag.rs | 62 ++++++++++++++++++++++++ testdata/picard-2.12.3-id3v23-utf16.id3 | Bin 0 -> 52955 bytes testdata/picard-2.12.3-id3v24-utf8.id3 | Bin 0 -> 51975 bytes 3 files changed, 62 insertions(+) create mode 100644 testdata/picard-2.12.3-id3v23-utf16.id3 create mode 100644 testdata/picard-2.12.3-id3v24-utf8.id3 diff --git a/src/tag.rs b/src/tag.rs index 3ba501c4b..0363007d4 100644 --- a/src/tag.rs +++ b/src/tag.rs @@ -1035,4 +1035,66 @@ mod tests { let tag = Tag::read_from_path("testdata/geob_serato.id3").unwrap(); assert_eq!(count, tag.encapsulated_objects().count()); } + + /// Read an IPLS frame with UTF-16 encording in an ID3v2.3 tag written by MusicBrainz Picard 2.12.3. + #[test] + fn test_ipls_id3v23_utf16() { + let tag = Tag::read_from_path("testdata/picard-2.12.3-id3v23-utf16.id3").unwrap(); + assert_eq!(tag.version(), Version::Id3v23); + let count = tag.involved_people_lists().count(); + assert_eq!(count, 1); + let ipls = tag.involved_people_lists().next().unwrap(); + let involved_people = ipls + .items + .iter() + .map(|item| (item.involvement.as_str(), item.involvee.as_str())) + .collect::>(); + assert_eq!( + &involved_people, + &[ + ("double bass", "Israel Crosby"), + ("drums (drum set)", "Vernell Fournier"), + ("piano", "Ahmad Jamal"), + ("producer", "Dave Usher") + ] + ); + } + + /// Read an TIPL frame with UTF-8 encording in an ID3v2.4 tag written by MusicBrainz Picard 2.12.3. + #[test] + fn test_ipls_id3v24_utf8() { + let tag = Tag::read_from_path("testdata/picard-2.12.3-id3v24-utf8.id3").unwrap(); + assert_eq!(tag.version(), Version::Id3v24); + let count = tag.involved_people_lists().count(); + assert_eq!(count, 2); + + let tipl = tag.get("TIPL").unwrap(); + let involved_people = tipl + .content() + .involved_people_list() + .unwrap() + .items + .iter() + .map(|item| (item.involvement.as_str(), item.involvee.as_str())) + .collect::>(); + assert_eq!(&involved_people, &[("producer", "Dave Usher")]); + + let tmcl = tag.get("TMCL").unwrap(); + let musician_credits = tmcl + .content() + .involved_people_list() + .unwrap() + .items + .iter() + .map(|item| (item.involvement.as_str(), item.involvee.as_str())) + .collect::>(); + assert_eq!( + &musician_credits, + &[ + ("double bass", "Israel Crosby"), + ("drums (drum set)", "Vernell Fournier"), + ("piano", "Ahmad Jamal") + ] + ); + } } diff --git a/testdata/picard-2.12.3-id3v23-utf16.id3 b/testdata/picard-2.12.3-id3v23-utf16.id3 new file mode 100644 index 0000000000000000000000000000000000000000..525392e4d13b8608d6c55134b649adea864c3349 GIT binary patch literal 52955 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
    ^z18Rvwnjn)V$t3AF4BrMlo`Q42Kb);c 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 F{{XyX$EN@Q literal 0 HcmV?d00001 diff --git a/testdata/picard-2.12.3-id3v24-utf8.id3 b/testdata/picard-2.12.3-id3v24-utf8.id3 new file mode 100644 index 0000000000000000000000000000000000000000..1beecdffafe4dc818d211766d158ebf618ef9cd7 GIT binary patch literal 51975 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 EA3-@{C;$Ke literal 0 HcmV?d00001 From 84a00a318186df0bb78187114f994d52b9f29085 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Sun, 17 Nov 2024 16:43:44 +0100 Subject: [PATCH 6/9] fix(content): Always return `Same` for IPL in `Content.unique()` See this review comment: https://github.com/polyfloyd/rust-id3/pull/141#discussion_r1843597552 --- src/frame/content.rs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/frame/content.rs b/src/frame/content.rs index 549617836..3bc967eb9 100644 --- a/src/frame/content.rs +++ b/src/frame/content.rs @@ -116,19 +116,7 @@ impl Content { Self::UniqueFileIdentifier(unique_file_identifier) => Comparable(vec![Cow::Borrowed( unique_file_identifier.owner_identifier.as_bytes(), )]), - Self::InvolvedPeopleList(involved_people_list) => Comparable( - involved_people_list - .items - .iter() - .flat_map(|item| { - [ - Cow::Borrowed(item.involvement.as_bytes()), - Cow::Borrowed(item.involvee.as_bytes()), - ] - .into_iter() - }) - .collect(), - ), + Self::InvolvedPeopleList(_) => Same, Self::Unknown(_) => Incomparable, } } From 54bdd1fe3582c603ba53eca87ed8d863ae6fdaec Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Sun, 17 Nov 2024 17:05:06 +0100 Subject: [PATCH 7/9] test: Improve tests for IPLS/TIPL/TMCL frames --- src/tag.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/src/tag.rs b/src/tag.rs index 0363007d4..cf887a9ee 100644 --- a/src/tag.rs +++ b/src/tag.rs @@ -1036,15 +1036,19 @@ mod tests { assert_eq!(count, tag.encapsulated_objects().count()); } - /// Read an IPLS frame with UTF-16 encording in an ID3v2.3 tag written by MusicBrainz Picard 2.12.3. + /// Read an IPLS frame with UTF-16 encording in an ID3v2.3 tag written by MusicBrainz Picard + /// 2.12.3. #[test] fn test_ipls_id3v23_utf16() { let tag = Tag::read_from_path("testdata/picard-2.12.3-id3v23-utf16.id3").unwrap(); assert_eq!(tag.version(), Version::Id3v23); let count = tag.involved_people_lists().count(); assert_eq!(count, 1); - let ipls = tag.involved_people_lists().next().unwrap(); + let ipls = tag.get("IPLS").unwrap(); let involved_people = ipls + .content() + .involved_people_list() + .unwrap() .items .iter() .map(|item| (item.involvement.as_str(), item.involvee.as_str())) @@ -1058,9 +1062,27 @@ mod tests { ("producer", "Dave Usher") ] ); + + // Now write the tag. Then check if it can be parsed and results in the same input. + let mut buffer = Vec::new(); + tag.write_to(&mut buffer, Version::Id3v23).unwrap(); + let new_tag = Tag::read_from2(io::Cursor::new(&buffer)).unwrap(); + + let new_involved_people = new_tag + .get("IPLS") + .unwrap() + .content() + .involved_people_list() + .unwrap() + .items + .iter() + .map(|item| (item.involvement.as_str(), item.involvee.as_str())) + .collect::>(); + assert_eq!(&involved_people, &new_involved_people,); } - /// Read an TIPL frame with UTF-8 encording in an ID3v2.4 tag written by MusicBrainz Picard 2.12.3. + /// Read `TIPL` and `TMCL` frames with UTF-8 encording in an ID3v2.4 tag written by MusicBrainz + /// Picard 2.12.3. #[test] fn test_ipls_id3v24_utf8() { let tag = Tag::read_from_path("testdata/picard-2.12.3-id3v24-utf8.id3").unwrap(); @@ -1096,5 +1118,34 @@ mod tests { ("piano", "Ahmad Jamal") ] ); + + // Now write the tag. Then check if it can be parsed and results in the same input. + let mut buffer = Vec::new(); + tag.write_to(&mut buffer, Version::Id3v24).unwrap(); + let new_tag = Tag::read_from2(io::Cursor::new(&buffer)).unwrap(); + + let new_involved_people = new_tag + .get("TIPL") + .unwrap() + .content() + .involved_people_list() + .unwrap() + .items + .iter() + .map(|item| (item.involvement.as_str(), item.involvee.as_str())) + .collect::>(); + assert_eq!(&involved_people, &new_involved_people,); + + let new_musician_credits = new_tag + .get("TMCL") + .unwrap() + .content() + .involved_people_list() + .unwrap() + .items + .iter() + .map(|item| (item.involvement.as_str(), item.involvee.as_str())) + .collect::>(); + assert_eq!(&musician_credits, &new_musician_credits,); } } From 2a95bb65df4bf1a751929860e23d9356e8947b2b Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Tue, 19 Nov 2024 21:27:09 +0100 Subject: [PATCH 8/9] fix(frame): Fix validation for all "Involved People List" frames --- src/frame/mod.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/frame/mod.rs b/src/frame/mod.rs index dd5fb494a..e349a4f49 100644 --- a/src/frame/mod.rs +++ b/src/frame/mod.rs @@ -72,7 +72,9 @@ impl Frame { // The matching groups must match the decoding groups of stream/frame/content.rs:decode(). match (id.as_str(), &self.content) { ("GRP1", Content::Text(_)) => Ok(()), - (id, Content::Text(_)) if id.starts_with('T') => Ok(()), + (id, Content::Text(_)) if id.starts_with('T') && !matches!(id, "TIPL" | "TMCL") => { + Ok(()) + } ("TXXX", Content::ExtendedText(_)) => Ok(()), (id, Content::Link(_)) if id.starts_with('W') => Ok(()), ("WXXX", Content::ExtendedLink(_)) => Ok(()), @@ -84,7 +86,7 @@ impl Frame { ("APIC", Content::Picture(_)) => Ok(()), ("CHAP", Content::Chapter(_)) => Ok(()), ("MLLT", Content::MpegLocationLookupTable(_)) => Ok(()), - ("IPLS", Content::InvolvedPeopleList(_)) => Ok(()), + ("IPLS" | "TIPL" | "TMCL", Content::InvolvedPeopleList(_)) => Ok(()), ("PRIV", Content::Private(_)) => Ok(()), ("CTOC", Content::TableOfContents(_)) => Ok(()), ("UFID", Content::UniqueFileIdentifier(_)) => Ok(()), From a2227dbbe246c860711f99ec9d47552f13796f13 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Wed, 20 Nov 2024 22:01:34 +0100 Subject: [PATCH 9/9] docs(readme): Document support for Involved People Lists --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a5b3ba9df..99f1ba373 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ A library for reading and writing ID3 metadata. * Compression * MPEG Location Lookup Table frames * Unique File Identifier frames +* Involved People List frames * Tag and File Alter Preservation bits ## Examples