Parser: pass an rss::ItunesExtension to instead of an rss::Item.

This commit is contained in:
Jordan Petridis 2018-01-24 15:42:08 +02:00
parent 5da002fe6d
commit d6817aaa1f
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 14 additions and 30 deletions

View File

@ -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)

View File

@ -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<i32> {
let duration = item.itunes_ext().map(|s| s.duration())??;
pub(crate) fn parse_itunes_duration(item: Option<&ITunesItemExtension>) -> Option<i32> {
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<i32> {
#[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<M:SS>
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<MM:SS>
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<H:MM:SS>
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<HH:MM:SS>
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));
}
}