fixes
This commit is contained in:
parent
61ae905521
commit
4e3cfe4031
9 changed files with 60 additions and 91 deletions
50
Cargo.lock
generated
50
Cargo.lock
generated
|
@ -95,12 +95,6 @@ version = "1.0.66"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48"
|
checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cfg-if"
|
|
||||||
version = "0.1.10"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
|
@ -309,7 +303,7 @@ version = "0.8.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "801bbab217d7f79c0062f4f7205b5d4427c6d1a7bd7aafdd1475f7c59d62b283"
|
checksum = "801bbab217d7f79c0062f4f7205b5d4427c6d1a7bd7aafdd1475f7c59d62b283"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -494,7 +488,7 @@ version = "0.1.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
|
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi 0.9.0+wasi-snapshot-preview1",
|
"wasi 0.9.0+wasi-snapshot-preview1",
|
||||||
]
|
]
|
||||||
|
@ -505,7 +499,7 @@ version = "0.2.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
|
checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi 0.10.2+wasi-snapshot-preview1",
|
"wasi 0.10.2+wasi-snapshot-preview1",
|
||||||
]
|
]
|
||||||
|
@ -677,7 +671,7 @@ version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
|
checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -737,7 +731,7 @@ version = "0.4.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
|
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -775,12 +769,6 @@ version = "2.3.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memory_units"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mime"
|
name = "mime"
|
||||||
version = "0.3.16"
|
version = "0.3.16"
|
||||||
|
@ -888,7 +876,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70"
|
checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"foreign-types",
|
"foreign-types",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -937,7 +925,7 @@ version = "0.8.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272"
|
checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"instant",
|
"instant",
|
||||||
"libc",
|
"libc",
|
||||||
"redox_syscall 0.1.57",
|
"redox_syscall 0.1.57",
|
||||||
|
@ -1552,7 +1540,6 @@ dependencies = [
|
||||||
"mime_4",
|
"mime_4",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pin-utils",
|
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest-wasm",
|
"reqwest-wasm",
|
||||||
"scraper",
|
"scraper",
|
||||||
|
@ -1562,7 +1549,6 @@ dependencies = [
|
||||||
"tokio 1.1.0",
|
"tokio 1.1.0",
|
||||||
"tokio-futures-byteorder",
|
"tokio-futures-byteorder",
|
||||||
"url",
|
"url",
|
||||||
"wee_alloc",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1583,7 +1569,7 @@ version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
|
checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
@ -1706,7 +1692,7 @@ version = "3.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
|
checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"rand 0.8.3",
|
"rand 0.8.3",
|
||||||
"redox_syscall 0.2.4",
|
"redox_syscall 0.2.4",
|
||||||
|
@ -1913,7 +1899,7 @@ version = "0.1.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3"
|
checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"pin-project-lite 0.2.4",
|
"pin-project-lite 0.2.4",
|
||||||
"tracing-core",
|
"tracing-core",
|
||||||
]
|
]
|
||||||
|
@ -2044,7 +2030,7 @@ version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be"
|
checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"wasm-bindgen-macro",
|
"wasm-bindgen-macro",
|
||||||
|
@ -2071,7 +2057,7 @@ version = "0.4.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94"
|
checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"web-sys",
|
"web-sys",
|
||||||
|
@ -2129,18 +2115,6 @@ dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wee_alloc"
|
|
||||||
version = "0.4.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if 0.1.10",
|
|
||||||
"libc",
|
|
||||||
"memory_units",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi"
|
name = "winapi"
|
||||||
version = "0.3.9"
|
version = "0.3.9"
|
||||||
|
|
|
@ -21,7 +21,6 @@ crate-type = ["cdylib", "rlib"]
|
||||||
clap = "3.0.0-beta.2"
|
clap = "3.0.0-beta.2"
|
||||||
itertools = "0.10.0"
|
itertools = "0.10.0"
|
||||||
serde_with = "1.6.1"
|
serde_with = "1.6.1"
|
||||||
pin-utils = "0.1.0"
|
|
||||||
html5ever = "0.25.1"
|
html5ever = "0.25.1"
|
||||||
percent-encoding = "2.1.0"
|
percent-encoding = "2.1.0"
|
||||||
url = { version = "2.2.0", features = ["serde"] }
|
url = { version = "2.2.0", features = ["serde"] }
|
||||||
|
@ -37,7 +36,6 @@ serde = { version = "1.0", features = ["derive", "rc"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
reqwest = { package = "reqwest-wasm", version = "0.11.0", features = ["json", "cookies", "blocking", "stream"] }
|
reqwest = { package = "reqwest-wasm", version = "0.11.0", features = ["json", "cookies", "blocking", "stream"] }
|
||||||
futures = "0.3.12"
|
futures = "0.3.12"
|
||||||
wee_alloc = { version = "0.4.2", optional = true }
|
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||||
tokio = { version = "1.1.0", features = ["full"] }
|
tokio = { version = "1.1.0", features = ["full"] }
|
||||||
|
|
|
@ -19,7 +19,7 @@ An efficient website icon scraper for rust or command line usage.
|
||||||
```bash
|
```bash
|
||||||
cargo install site_icons
|
cargo install site_icons
|
||||||
|
|
||||||
site-icons https://google.com
|
site-icons https://github.com
|
||||||
# https://github.githubassets.com/favicons/favicon.svg site_favicon svg
|
# https://github.githubassets.com/favicons/favicon.svg site_favicon svg
|
||||||
# https://github.githubassets.com/app-icon-512.png app_icon png 512x512
|
# https://github.githubassets.com/app-icon-512.png app_icon png 512x512
|
||||||
# https://github.githubassets.com/app-icon-192.png app_icon png 192x192
|
# https://github.githubassets.com/app-icon-192.png app_icon png 192x192
|
||||||
|
|
|
@ -29,42 +29,8 @@ pub enum IconInfo {
|
||||||
SVG,
|
SVG,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for IconInfo {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
|
||||||
match self {
|
|
||||||
IconInfo::PNG { size } => write!(f, "png {}", size),
|
|
||||||
IconInfo::JPEG { size } => write!(f, "jpeg {}", size),
|
|
||||||
IconInfo::ICO { sizes } => write!(f, "ico {}", sizes),
|
|
||||||
IconInfo::SVG => write!(f, "svg"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Ord for IconInfo {
|
|
||||||
fn cmp(&self, other: &Self) -> Ordering {
|
|
||||||
let this_size = self.size();
|
|
||||||
let other_size = other.size();
|
|
||||||
|
|
||||||
if this_size.is_none() && other_size.is_none() {
|
|
||||||
Ordering::Equal
|
|
||||||
} else if let (Some(this_size), Some(other_size)) = (this_size, other_size) {
|
|
||||||
this_size.cmp(other_size)
|
|
||||||
} else if this_size.is_none() {
|
|
||||||
Ordering::Less
|
|
||||||
} else {
|
|
||||||
Ordering::Greater
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PartialOrd for IconInfo {
|
|
||||||
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
|
||||||
Some(self.cmp(other))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IconInfo {
|
impl IconInfo {
|
||||||
pub async fn get(url: Url, sizes: Option<String>) -> Result<IconInfo, Box<dyn Error>> {
|
pub async fn load(url: Url, sizes: Option<String>) -> Result<IconInfo, Box<dyn Error>> {
|
||||||
let sizes = sizes.as_ref().and_then(|s| IconSizes::from_str(s).ok());
|
let sizes = sizes.as_ref().and_then(|s| IconSizes::from_str(s).ok());
|
||||||
|
|
||||||
let (mime, mut body): (_, Box<dyn AsyncRead + Unpin>) = match url.scheme() {
|
let (mime, mut body): (_, Box<dyn AsyncRead + Unpin>) = match url.scheme() {
|
||||||
|
@ -160,3 +126,37 @@ impl IconInfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for IconInfo {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||||
|
match self {
|
||||||
|
IconInfo::PNG { size } => write!(f, "png {}", size),
|
||||||
|
IconInfo::JPEG { size } => write!(f, "jpeg {}", size),
|
||||||
|
IconInfo::ICO { sizes } => write!(f, "ico {}", sizes),
|
||||||
|
IconInfo::SVG => write!(f, "svg"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Ord for IconInfo {
|
||||||
|
fn cmp(&self, other: &Self) -> Ordering {
|
||||||
|
let this_size = self.size();
|
||||||
|
let other_size = other.size();
|
||||||
|
|
||||||
|
if this_size.is_none() && other_size.is_none() {
|
||||||
|
Ordering::Equal
|
||||||
|
} else if let (Some(this_size), Some(other_size)) = (this_size, other_size) {
|
||||||
|
this_size.cmp(other_size)
|
||||||
|
} else if this_size.is_none() {
|
||||||
|
Ordering::Less
|
||||||
|
} else {
|
||||||
|
Ordering::Greater
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PartialOrd for IconInfo {
|
||||||
|
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||||
|
Some(self.cmp(other))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
use super::IconSize;
|
use super::IconSize;
|
||||||
use crate::assert_slice_eq;
|
|
||||||
use byteorder::BigEndian;
|
use byteorder::BigEndian;
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
use std::{error::Error, io::Cursor};
|
use std::{error::Error, io::Cursor};
|
||||||
|
|
|
@ -19,8 +19,8 @@ use std::{
|
||||||
#[serde_as]
|
#[serde_as]
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub struct IconSize {
|
pub struct IconSize {
|
||||||
width: u32,
|
pub width: u32,
|
||||||
height: u32,
|
pub height: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for IconSize {
|
impl Display for IconSize {
|
||||||
|
@ -92,12 +92,3 @@ fn slice_eq<T: Read + Seek + Unpin>(
|
||||||
cur.read_exact(&mut buffer)?;
|
cur.read_exact(&mut buffer)?;
|
||||||
Ok(buffer == slice)
|
Ok(buffer == slice)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! assert_slice_eq {
|
|
||||||
($cur:expr, $offset:expr, $slice:expr, $($arg:tt)+) => {{
|
|
||||||
if !super::slice_eq($cur, $offset, $slice)? {
|
|
||||||
return Err(format!($($arg)+).into());
|
|
||||||
}
|
|
||||||
}};
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
use super::IconSize;
|
use super::IconSize;
|
||||||
use crate::assert_slice_eq;
|
|
||||||
use byteorder::{BigEndian, ReadBytesExt};
|
use byteorder::{BigEndian, ReadBytesExt};
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
use std::{error::Error, io::Cursor};
|
use std::{error::Error, io::Cursor};
|
||||||
|
|
|
@ -61,7 +61,7 @@ impl Icons {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut info = Box::pin(IconInfo::get(url.clone(), sizes));
|
let mut info = Box::pin(IconInfo::load(url.clone(), sizes));
|
||||||
|
|
||||||
// Start fetching the icon
|
// Start fetching the icon
|
||||||
let noop_waker = noop_waker();
|
let noop_waker = noop_waker();
|
||||||
|
@ -143,7 +143,7 @@ impl Icons {
|
||||||
let mentions_logo = |attr_name| {
|
let mentions_logo = |attr_name| {
|
||||||
elem
|
elem
|
||||||
.attr(attr_name)
|
.attr(attr_name)
|
||||||
.map(|attr| attr.to_lowercase().contains("logo"))
|
.map(|attr| regex!("logo(?!s)").is_match(&attr.to_lowercase()))
|
||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
};
|
};
|
||||||
if mentions_logo("class") || mentions_logo("id") {
|
if mentions_logo("class") || mentions_logo("id") {
|
||||||
|
|
|
@ -25,3 +25,11 @@ macro_rules! warn_err {
|
||||||
}
|
}
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! assert_slice_eq {
|
||||||
|
($cur:expr, $offset:expr, $slice:expr, $($arg:tt)+) => {{
|
||||||
|
if !super::slice_eq($cur, $offset, $slice)? {
|
||||||
|
return Err(format!($($arg)+).into());
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
Reference in a new issue