feat: blacklists

This commit is contained in:
Sam Denty 2022-12-23 21:51:34 +00:00
parent 4e1710539c
commit 0d33bd4833
No known key found for this signature in database
GPG key ID: 7B4EAF7B9E291B79
3 changed files with 18 additions and 2 deletions

2
Cargo.lock generated
View file

@ -1525,7 +1525,7 @@ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
[[package]] [[package]]
name = "site_icons" name = "site_icons"
version = "0.3.9" version = "0.3.10"
dependencies = [ dependencies = [
"byteorder", "byteorder",
"clap", "clap",

View file

@ -1,6 +1,6 @@
[package] [package]
name = "site_icons" name = "site_icons"
version = "0.3.9" version = "0.3.10"
authors = ["Sam Denty <sam@samdenty.com>"] authors = ["Sam Denty <sam@samdenty.com>"]
edition = "2018" edition = "2018"
license = "GPL-3.0" license = "GPL-3.0"

View file

@ -15,6 +15,7 @@ use std::{collections::HashMap, error::Error, pin::Pin, task::Context};
use url::Url; use url::Url;
pub struct Icons { pub struct Icons {
blacklist: Option<Box<dyn Fn(&Url) -> bool>>,
entries: Vec<Icon>, entries: Vec<Icon>,
pending_entries: HashMap< pending_entries: HashMap<
Url, Url,
@ -47,6 +48,15 @@ fn add_icon_entry(
impl Icons { impl Icons {
pub fn new() -> Self { pub fn new() -> Self {
Icons { Icons {
blacklist: None,
entries: Vec::new(),
pending_entries: HashMap::new(),
}
}
pub fn new_with_blacklist(blacklist: impl Fn(&Url) -> bool + 'static) -> Self {
Icons {
blacklist: Some(Box::new(blacklist)),
entries: Vec::new(), entries: Vec::new(),
pending_entries: HashMap::new(), pending_entries: HashMap::new(),
} }
@ -116,6 +126,12 @@ impl Icons {
let url = res.url().clone(); let url = res.url().clone();
if let Some(is_blacklisted) = &self.blacklist {
if is_blacklisted(&url) {
return Ok(());
}
}
let mut body = res.bytes_stream(); let mut body = res.bytes_stream();
let mut parser = driver::parse_document(Html::new_document(), Default::default()); let mut parser = driver::parse_document(Html::new_document(), Default::default());