Skip to content

Commit

Permalink
backend: scraper: Add support for data urls on favicons
Browse files Browse the repository at this point in the history
Fixes #69
  • Loading branch information
rafaelmardojai committed Mar 20, 2024
1 parent 127b0d5 commit 6528827
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ gtk = { package = "gtk4", version = "0.7", features = ["v4_10"] }
gtk-macros = "0.3"
once_cell = "1.5"
url = "2.2"
data-url = "0.3"
scraper = "0.12"
surf = "2.2"
async-std = "1.12"
Expand Down
34 changes: 25 additions & 9 deletions src/backend/scraper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use std::{
fmt::{Display, Formatter, Result as FmtResult}
};

use data_url::DataUrl;
use url::{Url, ParseError};
use scraper::{Html, Selector, element_ref::ElementRef};

Expand Down Expand Up @@ -159,16 +160,31 @@ async fn get_favicon(url: &Url, html_icons: Vec<String>) -> Option<Image> {
}

for icon in icons.iter() {
if let Ok(mut resp) = CLIENT.get(&icon).await {
if resp.status().is_success() {
if let Ok(bytes) = resp.body_bytes().await {
let image = Image::new(icon.to_string());
image.size.set(Some(bytes.len()));
image.bytes.replace(Some(bytes));
return Some(image);
};
match icon.scheme() {
"file" | "http" | "https" => {
if let Ok(mut resp) = CLIENT.get(&icon).await {
if resp.status().is_success() {
if let Ok(bytes) = resp.body_bytes().await {
let image = Image::new(icon.to_string());
image.size.set(Some(bytes.len()));
image.bytes.replace(Some(bytes));
return Some(image);
};
}
}
}
};
"data" => {
if let Ok(data) = DataUrl::process(icon.as_str()) {
if let Ok((body, _fragment)) = data.decode_to_vec() {
let image = Image::new(icon.to_string());
image.size.set(Some(body.len()));
image.bytes.replace(Some(body));
return Some(image);
}
}
}
_ => ()
}
}

None
Expand Down

0 comments on commit 6528827

Please sign in to comment.