Newer
Older
use reqwest::{header::CONTENT_TYPE, Client, ClientBuilder, Response};
lazy_static! {
static ref CLIENT: Client = reqwest::Client::builder()
.user_agent(
"Mozilla/5.0 (compatible; January/1.0; +https://gitlab.insrt.uk/revolt/january)"
)
.build()
.unwrap();
}
pub async fn fetch(url: &str) -> Result<(Response, Mime), Error> {
let resp = CLIENT
.get(url)
.send()
.await
.map_err(|_| Error::ReqwestFailed)?;
}
let content_type = resp
.headers()
.get(CONTENT_TYPE)
let mime: mime::Mime = content_type
.parse()
.map_err(|_| Error::FailedToParseContentType)?;
Ok((resp, mime))
}
pub async fn consume_metatags(resp: Response) -> Result<HashMap<String, String>, Error> {
let body = resp.text().await.map_err(|_| Error::FailedToConsumeText)?;
let selector = Selector::parse("meta").map_err(|_| Error::MetaSelectionFailed)?;
let mut properties = HashMap::new();
for el in fragment.select(&selector) {
let node = el.value();
if let (Some(property), Some(content)) = (node.attr("property"), node.attr("content")) {
properties.insert(property.to_string(), content.to_string());
}
}
Ok(properties)
}
pub async fn consume_size(resp: Response) -> Result<(isize, isize), Error> {
let bytes = resp
.bytes()
.await
.map_err(|_| Error::FailedToConsumeBytes)?;
if let Ok(size) = imagesize::blob_size(&bytes) {
Ok((size.width as isize, size.height as isize))
} else {