commit 01d8056c73a77701f8064c5f424149a16abc7298
parent 5323283f98b898cb8e4c535fcdd0272d24caeec0
Author: Daniel GarcĂa <dani-garcia@users.noreply.github.com>
Date: Sun, 28 Mar 2021 16:03:16 +0200
Merge pull request #1545 from RealOrangeOne/icon-client-cache
Client caching
Diffstat:
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/api/icons.rs b/src/api/icons.rs
@@ -51,7 +51,7 @@ fn icon(domain: String) -> Option<Cached<Content<Vec<u8>>>> {
return None;
}
- get_icon(&domain).map(|icon| Cached::long(Content(ContentType::new("image", "x-icon"), icon)))
+ get_icon(&domain).map(|icon| Cached::ttl(Content(ContentType::new("image", "x-icon"), icon), CONFIG.icon_cache_ttl()))
}
/// Returns if the domain provided is valid or not.
@@ -472,7 +472,7 @@ fn get_icon_url(domain: &str) -> Result<IconUrlResult, Error> {
let dom = html5ever::parse_document(markup5ever_rcdom::RcDom::default(), Default::default())
.from_utf8()
.read_from(&mut limited_reader)?;
-
+
get_favicons_node(&dom.document, &mut iconlist, &url);
} else {
// Add the default favicon.ico to the list with just the given domain
diff --git a/src/util.rs b/src/util.rs
@@ -92,17 +92,21 @@ impl Fairing for CORS {
}
}
-pub struct Cached<R>(R, &'static str);
+pub struct Cached<R>(R, String);
impl<R> Cached<R> {
- pub const fn long(r: R) -> Cached<R> {
+ pub fn long(r: R) -> Cached<R> {
// 7 days
- Self(r, "public, max-age=604800")
+ Self::ttl(r, 604800)
}
- pub const fn short(r: R) -> Cached<R> {
+ pub fn short(r: R) -> Cached<R> {
// 10 minutes
- Self(r, "public, max-age=600")
+ Self(r, String::from("public, max-age=600"))
+ }
+
+ pub fn ttl(r: R, ttl: u64) -> Cached<R> {
+ Self(r, format!("public, immutable, max-age={}", ttl))
}
}