diff --git a/hammond-data/src/parser.rs b/hammond-data/src/parser.rs index b6b244d..ea7f7db 100644 --- a/hammond-data/src/parser.rs +++ b/hammond-data/src/parser.rs @@ -64,6 +64,7 @@ pub(crate) fn new_episode(item: &Item, parent_id: i32) -> Result { let epoch = date.map(|x| x.timestamp() as i32).unwrap_or(0); let length = item.enclosure().map(|x| x.length().parse().unwrap_or(0)); + let _duration = parse_itunes_duration(item); Ok(NewEpisodeBuilder::default() .title(title) @@ -78,6 +79,25 @@ pub(crate) fn new_episode(item: &Item, parent_id: i32) -> Result { .unwrap()) } +/// Parses an Item Itunes extension and returns it's duration value in seconds. +// FIXME: Rafactor +fn parse_itunes_duration(item: &Item) -> Option { + let duration = item.itunes_ext().map(|s| s.duration())??; + + let mut seconds = 0; + let fk_apple = duration.split(':').collect::>(); + if fk_apple.len() == 3 { + seconds += fk_apple[0].parse::().unwrap_or(0) * 3600; + seconds += fk_apple[1].parse::().unwrap_or(0) * 60; + seconds += fk_apple[2].parse::().unwrap_or(0); + } else if fk_apple.len() == 2 { + seconds += fk_apple[0].parse::().unwrap_or(0) * 60; + seconds += fk_apple[1].parse::().unwrap_or(0); + } + + Some(seconds) +} + #[cfg(test)] mod tests { use std::fs::File;