From d6817aaa1f3ef459f10657f63b265a8c3dc1f2a3 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Wed, 24 Jan 2018 15:42:08 +0200 Subject: [PATCH] Parser: pass an rss::ItunesExtension to instead of an rss::Item. --- hammond-data/src/models/new_episode.rs | 2 +- hammond-data/src/parser.rs | 42 ++++++++------------------ 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/hammond-data/src/models/new_episode.rs b/hammond-data/src/models/new_episode.rs index 444698e..3de8043 100644 --- a/hammond-data/src/models/new_episode.rs +++ b/hammond-data/src/models/new_episode.rs @@ -206,7 +206,7 @@ impl NewEpisodeMinimal { // Case: Thu, 05 Aug 2016 06:00:00 -0400 <-- Actually that was friday. let epoch = date.map(|x| x.timestamp() as i32).unwrap_or(0); - let duration = parser::parse_itunes_duration(item); + let duration = parser::parse_itunes_duration(item.itunes_ext()); NewEpisodeMinimalBuilder::default() .title(title) diff --git a/hammond-data/src/parser.rs b/hammond-data/src/parser.rs index b9985fc..116dcd5 100644 --- a/hammond-data/src/parser.rs +++ b/hammond-data/src/parser.rs @@ -1,10 +1,10 @@ -use rss::Item; +use rss::extension::itunes::ITunesItemExtension; /// Parses an Item Itunes extension and returns it's duration value in seconds. // FIXME: Rafactor #[allow(non_snake_case)] -pub(crate) fn parse_itunes_duration(item: &Item) -> Option { - let duration = item.itunes_ext().map(|s| s.duration())??; +pub(crate) fn parse_itunes_duration(item: Option<&ITunesItemExtension>) -> Option { + let duration = item.map(|s| s.duration())??; // FOR SOME FUCKING REASON, IN THE APPLE EXTENSION SPEC // THE DURATION CAN BE EITHER AN INT OF SECONDS OR @@ -31,7 +31,6 @@ pub(crate) fn parse_itunes_duration(item: &Item) -> Option { #[cfg(test)] mod tests { - use rss::ItemBuilder; use rss::extension::itunes::ITunesItemExtensionBuilder; use super::*; @@ -43,55 +42,40 @@ mod tests { .duration(Some("3370".into())) .build() .unwrap(); - let item = ItemBuilder::default() - .itunes_ext(Some(extension)) - .build() - .unwrap(); - assert_eq!(parse_itunes_duration(&item), Some(3370)); + let item = Some(&extension); + assert_eq!(parse_itunes_duration(item), Some(3370)); // Input is a String let extension = ITunesItemExtensionBuilder::default() .duration(Some("6:10".into())) .build() .unwrap(); - let item = ItemBuilder::default() - .itunes_ext(Some(extension)) - .build() - .unwrap(); - assert_eq!(parse_itunes_duration(&item), Some(370)); + let item = Some(&extension); + assert_eq!(parse_itunes_duration(item), Some(370)); // Input is a String let extension = ITunesItemExtensionBuilder::default() .duration(Some("56:10".into())) .build() .unwrap(); - let item = ItemBuilder::default() - .itunes_ext(Some(extension)) - .build() - .unwrap(); - assert_eq!(parse_itunes_duration(&item), Some(3370)); + let item = Some(&extension); + assert_eq!(parse_itunes_duration(item), Some(3370)); // Input is a String let extension = ITunesItemExtensionBuilder::default() .duration(Some("1:56:10".into())) .build() .unwrap(); - let item = ItemBuilder::default() - .itunes_ext(Some(extension)) - .build() - .unwrap(); - assert_eq!(parse_itunes_duration(&item), Some(6970)); + let item = Some(&extension); + assert_eq!(parse_itunes_duration(item), Some(6970)); // Input is a String let extension = ITunesItemExtensionBuilder::default() .duration(Some("01:56:10".into())) .build() .unwrap(); - let item = ItemBuilder::default() - .itunes_ext(Some(extension)) - .build() - .unwrap(); - assert_eq!(parse_itunes_duration(&item), Some(6970)); + let item = Some(&extension); + assert_eq!(parse_itunes_duration(item), Some(6970)); } }