diff options
author | alyx <alyx@aleteoryx.me> | 2024-04-01 20:27:44 -0400 |
---|---|---|
committer | alyx <alyx@aleteoryx.me> | 2024-04-01 20:27:44 -0400 |
commit | 83ba4fe37a1184b998be09b9cbe53a22c7ba9e3b (patch) | |
tree | c60c2c17caeed24db920dee4613c1e185b12d12b /src/font.rs | |
parent | 22c2e4e2db9ad9d892ed5fb63d92254677f6dafd (diff) | |
download | lfm_embed-83ba4fe37a1184b998be09b9cbe53a22c7ba9e3b.tar.gz lfm_embed-83ba4fe37a1184b998be09b9cbe53a22c7ba9e3b.tar.bz2 lfm_embed-83ba4fe37a1184b998be09b9cbe53a22c7ba9e3b.zip |
Move caching to src/cache/; Finalize API parsing fixes
Font and user cache code has been moved to special files, independant from src/config.rs
API parsing changes have been properly tested, and last.fm API JSON is now trace-logged for debugging convenience.
Diffstat (limited to 'src/font.rs')
-rw-r--r-- | src/font.rs | 51 |
1 files changed, 0 insertions, 51 deletions
diff --git a/src/font.rs b/src/font.rs deleted file mode 100644 index 6454770..0000000 --- a/src/font.rs +++ /dev/null @@ -1,51 +0,0 @@ -use std::sync::Arc; -use std::time::Duration; - -use tokio::sync::RwLock; -use reqwest::StatusCode; - -use super::cache::{CacheFuture, CacheGetter, Cache, AsyncCache}; -use crate::STATE; - -#[derive(serde::Deserialize, Debug, Default)] -#[serde(default)] -#[serde(rename = "kebab-case")] -pub struct FontQuery { - pub font: Option<Arc<str>>, - pub include_font: Option<Arc<str>>, - pub google_font: Option<Arc<str>>, -// pub small_font: Option<()> -} - -pub type FontFuture = CacheFuture<Arc<str>>; -pub type FontGetter = CacheGetter<Arc<str>>; -pub type FontCache = Cache<Arc<str>>; - -fn font_getter(fontname: &String) -> FontFuture { - let fontname = urlencoding::encode(fontname.as_ref()).to_string(); - Box::pin(async move { - let Some(google_api_key) = STATE.google_api_key.clone() - else { - unreachable!(); - }; - - let fontreq = STATE.http.get(format!("https://www.googleapis.com/webfonts/v1/webfonts?key={}&family={fontname}", google_api_key)) - .send().await - .map_err(|e| {log::error!("Failed to get info for font `{fontname}`: {e}"); (StatusCode::SERVICE_UNAVAILABLE, "Couldn't connect to Google Fonts!")})?; - if fontreq.status() == StatusCode::NOT_FOUND { return Err((StatusCode::NOT_FOUND, "Font does not exist!")); } - if fontreq.status() == StatusCode::FORBIDDEN { - log::error!("Invalid Google API key in config!"); - return Err((StatusCode::SERVICE_UNAVAILABLE, "This instance is not configured to support Google Fonts properly, please use a different font.")); - } - - let cssreq = STATE.http.get(format!("https://fonts.googleapis.com/css2?family={fontname}")) - .send().await - .map_err(|e| {log::error!("Failed to get CSS for font `{fontname}`: {e}"); (StatusCode::SERVICE_UNAVAILABLE, "Couldn't download font CSS!")})?; - - Ok(cssreq.text().await.unwrap().into()) - }) -} - -pub fn font_cache() -> FontCache { - Arc::new(RwLock::new(AsyncCache::new(Duration::from_secs(86400), font_getter as FontGetter))) -} |