From 2c88f12f2d5b15df50a5ee618d30012ba230fc3f Mon Sep 17 00:00:00 2001 From: yggverse Date: Thu, 12 Dec 2024 10:00:41 +0200 Subject: [PATCH] dump unsupported mime type string --- src/client/connection/response/meta/mime.rs | 15 ++++++++++++--- src/client/connection/response/meta/mime/error.rs | 13 ++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/client/connection/response/meta/mime.rs b/src/client/connection/response/meta/mime.rs index 49fbf36..5aa362c 100644 --- a/src/client/connection/response/meta/mime.rs +++ b/src/client/connection/response/meta/mime.rs @@ -8,7 +8,7 @@ pub mod error; pub use error::Error; -use glib::{GString, Uri}; +use glib::{GString, Regex, RegexCompileFlags, RegexMatchFlags, Uri}; use std::path::Path; /// https://geminiprotocol.net/docs/gemtext-specification.gmi#media-type-parameters @@ -80,7 +80,7 @@ impl Mime { Some("flac") => Ok(Self::AudioFlac), Some("mp3") => Ok(Self::AudioMpeg), Some("oga" | "ogg" | "opus" | "spx") => Ok(Self::AudioOgg), - _ => Err(Error::Undefined), + _ => Err(Error::Undefined(None)), } // @TODO extension to lowercase } @@ -155,7 +155,16 @@ impl Mime { // Some type exist, but not defined yet (on status code is 2*) if value.starts_with("2") && value.contains("/") { - return Err(Error::Undefined); + return Err(Error::Undefined( + Regex::split_simple( + r"^2\d{1}\s([^\/]+\/[^\s]+)", + value, + RegexCompileFlags::DEFAULT, + RegexMatchFlags::DEFAULT, + ) + .get(1) + .map(|this| this.to_string()), + )); } // Done diff --git a/src/client/connection/response/meta/mime/error.rs b/src/client/connection/response/meta/mime/error.rs index b535376..d79790a 100644 --- a/src/client/connection/response/meta/mime/error.rs +++ b/src/client/connection/response/meta/mime/error.rs @@ -4,7 +4,7 @@ use std::fmt::{Display, Formatter, Result}; pub enum Error { Decode(std::string::FromUtf8Error), Protocol, - Undefined, + Undefined(Option), } impl Display for Error { @@ -16,8 +16,15 @@ impl Display for Error { Self::Protocol => { write!(f, "Protocol error") } - Self::Undefined => { - write!(f, "Undefined") + Self::Undefined(e) => { + write!( + f, + "{}", + match e { + Some(value) => format!("`{value}` undefined"), + None => "Could not parse value".to_string(), + } + ) } } }