diff --git a/src/bot/bot.rs b/src/bot/bot.rs index 1ab1a6a..12c8ba0 100644 --- a/src/bot/bot.rs +++ b/src/bot/bot.rs @@ -140,7 +140,13 @@ enum Command { use crate::dl::ffprobe::FFProbe; async fn cmd_test(bot: Bot, msg: Message, _db: DbPool) -> HandlerResult { - dbg!(FFProbe::probe("/home/mykola/Videos/test-video").await); + if let Ok(probe) = FFProbe::probe("/home/mykola/Videos/test-video").await { + if let Some(vs) = probe.get_video_stream() { + dbg!(vs.get_video_resolution()); + } + } else { + dbg!("failed"); + } Ok(()) } diff --git a/src/dl/ffprobe.rs b/src/dl/ffprobe.rs index 85afd94..5bb3652 100644 --- a/src/dl/ffprobe.rs +++ b/src/dl/ffprobe.rs @@ -25,6 +25,20 @@ pub struct FFProbeStream { pub duration: f64 } +impl FFProbeStream { + pub fn is_video_stream(&self) -> bool { + self.width.is_some() && self.height.is_some() + } + + pub fn get_video_resolution(&self) -> Option<(u32, u32)> { + if self.is_video_stream() { + return Some((self.width.unwrap(), self.height.unwrap())) + } + + return None + } +} + #[derive(Deserialize, Debug)] pub struct FFProbeOutput { pub streams: Vec @@ -32,11 +46,13 @@ pub struct FFProbeOutput { impl FFProbeOutput { pub fn parse(json: &[u8]) -> Result { - let output: Result = serde_json::from_slice(json); - dbg!(output); + let output: FFProbeOutput = serde_json::from_slice(json)?; - todo!(); - //Ok(output) + Ok(output) + } + + pub fn get_video_stream(&self) -> Option<&FFProbeStream> { + self.streams.iter().find(|&s| s.is_video_stream()) } }