diff options
| author | Xe Iaso <me@christine.website> | 2022-10-30 18:24:09 -0400 |
|---|---|---|
| committer | Xe Iaso <me@christine.website> | 2022-10-30 18:24:09 -0400 |
| commit | 23c64aebf57b3a9f9db4c08af001f01af25d732d (patch) | |
| tree | 6a3e6aafe2eef06aaea2faa5b8c7711be328c86e /lib/xesite_markdown/src | |
| parent | 5d2935617a0e4bf615a8ffc0f7c1f96d9479cbd8 (diff) | |
| download | xesite-23c64aebf57b3a9f9db4c08af001f01af25d732d.tar.xz xesite-23c64aebf57b3a9f9db4c08af001f01af25d732d.zip | |
various site updates
Signed-off-by: Xe Iaso <me@christine.website>
Diffstat (limited to 'lib/xesite_markdown/src')
| -rw-r--r-- | lib/xesite_markdown/src/lib.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/xesite_markdown/src/lib.rs b/lib/xesite_markdown/src/lib.rs index fad2b3a..5bd6dfa 100644 --- a/lib/xesite_markdown/src/lib.rs +++ b/lib/xesite_markdown/src/lib.rs @@ -8,8 +8,16 @@ use comrak::{ use lazy_static::lazy_static; use lol_html::{element, html_content::ContentType, rewrite_str, RewriteStrSettings}; use maud::PreEscaped; +use sha2::{Digest, Sha256}; use std::{cell::RefCell, io::Write}; use url::Url; +use xesite_types::mastodon::{Toot, User}; + +pub fn hash_string(inp: String) -> String { + let mut h = Sha256::new(); + h.update(&inp.as_bytes()); + hex::encode(h.finalize()) +} lazy_static! { static ref SYNTECT_ADAPTER: SyntectAdapter<'static> = SyntectAdapter::new("base16-mocha.dark"); @@ -175,6 +183,36 @@ pub fn render(inp: &str) -> Result<String> { el.replace(&xesite_templates::video(path).0, ContentType::Html); Ok(()) }), + #[cfg(not(target_arch = "wasm32"))] + element!("xeblog-toot", |el| { + use serde_json::from_reader; + use std::fs; + + let mut toot_url = el + .get_attribute("url") + .ok_or(Error::MissingElementAttribute("url".to_string()))?; + + if !toot_url.ends_with(".json") { + toot_url = format!("{toot_url}.json"); + } + + let toot_fname = format!("./data/toots/{}.json", hash_string(toot_url)); + tracing::debug!("opening {toot_fname}"); + let mut fin = fs::File::open(&toot_fname)?; + let t: Toot = from_reader(&mut fin)?; + + let user_fname = format!( + "./data/users/{}.json", + hash_string(format!("{}.json", t.attributed_to.clone())) + ); + tracing::debug!("opening {user_fname}"); + let mut fin = fs::File::open(&user_fname)?; + + let u: User = from_reader(&mut fin)?; + + el.replace(&xesite_templates::toot_embed(u, t).0, ContentType::Html); + Ok(()) + }), ], ..RewriteStrSettings::default() }, |
