From e958d4ef0eb370e01ea970fd889c5c5d2f0e2bd4 Mon Sep 17 00:00:00 2001 From: mykola2312 Date: Mon, 19 Feb 2024 13:46:27 +0200 Subject: [PATCH] implement YtDlpError --- src/dl/yt_dlp.rs | 23 ++++++++++++++++++++++- src/main.rs | 6 +++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/dl/yt_dlp.rs b/src/dl/yt_dlp.rs index 869cdf1..bb06780 100644 --- a/src/dl/yt_dlp.rs +++ b/src/dl/yt_dlp.rs @@ -1,6 +1,7 @@ use serde::Deserialize; use serde_json; -use std::process::Output; +use core::fmt; +use std::str::Utf8Error; use tokio::process::Command; #[derive(Deserialize, Debug)] @@ -24,8 +25,22 @@ pub struct YtDlpInfo { pub formats: Vec, } +#[derive(Debug)] pub enum YtDlpError { CommandError(std::io::Error), + UtfError(Utf8Error), + ErrorMessage(String) +} + +impl fmt::Display for YtDlpError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + use YtDlpError as YTE; + match self { + YTE::CommandError(e) => write!(f, "Command::new - {}", e), + YTE::UtfError(_) => write!(f, "Error while decoding UTF8"), + YTE::ErrorMessage(msg) => write!(f, "yt-dlp error - {}", msg) + } + } } pub struct YtDlp {} @@ -41,6 +56,12 @@ impl YtDlp { Err(e) => return Err(YtDlpError::CommandError(e)), }; + if output.stdout.is_empty() && !output.stderr.is_empty() { + return match std::str::from_utf8(&output.stderr) { + Ok(message) => Err(YtDlpError::ErrorMessage(message.to_string())), + Err(utf8_error) => Err(YtDlpError::UtfError(utf8_error)) + }; + } Ok(()) } } diff --git a/src/main.rs b/src/main.rs index 5e40d23..3d1e4d3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,7 @@ use teloxide::dispatching::UpdateHandler; use teloxide::{prelude::*, update_listeners::Polling, utils::command::BotCommands}; mod dl; +use dl::yt_dlp::YtDlp; type State = (); type MyDialogue = Dialogue>; @@ -35,7 +36,10 @@ where async fn main() -> anyhow::Result<()> { dotenv().ok(); - bot_main().await + let _ = YtDlp::load_info(env::var("TEST_URL")?.as_str()).await; + + Ok(()) + //bot_main().await } async fn bot_main() -> anyhow::Result<()> {