From 21785bbead7408487e227b60822e722227954320 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Wed, 26 Apr 2023 13:49:05 +0200 Subject: [PATCH] add items to rss --- Cargo.lock | 76 ++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/routes/blog.rs | 37 +++++++++++++++------- 3 files changed, 103 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8daf43a..8729773 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -548,6 +548,28 @@ dependencies = [ "winapi", ] +[[package]] +name = "chrono-tz" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9cc2b23599e6d7479755f3594285efb3f74a1bdca7a7374948bc831e23a552" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9998fb9f7e9b2111641485bf8beb32f92945f97f92a3d061f744cfef335f751" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + [[package]] name = "clap" version = "4.2.4" @@ -910,6 +932,7 @@ dependencies = [ "actix-web", "cached", "chrono", + "chrono-tz", "comrak", "glob", "minify-html", @@ -1696,6 +1719,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "parse-zoneinfo" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +dependencies = [ + "regex", +] + [[package]] name = "paste" version = "1.0.12" @@ -1708,6 +1740,44 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +[[package]] +name = "phf" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -2158,6 +2228,12 @@ dependencies = [ "libc", ] +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + [[package]] name = "slab" version = "0.4.8" diff --git a/Cargo.toml b/Cargo.toml index 9daef03..232e92c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,4 +23,5 @@ glob = "0.3.1" comrak = "0.18" reqwest = { version = "0.11", features = ["json"] } chrono = "0.4.24" +chrono-tz = "0.8.2" rss = "2.0.3" diff --git a/src/routes/blog.rs b/src/routes/blog.rs index c54f1f8..271b386 100644 --- a/src/routes/blog.rs +++ b/src/routes/blog.rs @@ -1,7 +1,8 @@ -use ::rss::{Category, Channel, Image}; +use ::rss::{Category, Channel, Image, Item}; use actix_web::{dev::ConnectionInfo, get, web, HttpRequest, HttpResponse, Responder}; use cached::proc_macro::once; -use chrono::{DateTime, Datelike, Utc}; +use chrono::{DateTime, Datelike, Local, NaiveDateTime, Utc}; +use chrono_tz::Europe; use comrak::{parse_document, Arena}; use ramhorns::Content; @@ -180,11 +181,11 @@ fn build_rss(config: Config, info: ConnectionInfo) -> String { let channel = Channel { title: "Blog d'Anri".into(), link: link_to_site.to_owned(), - description: "Un fil qui parle d'infos".into(), + description: "Un fil qui parle d'informatique notamment".into(), language: Some("fr".into()), managing_editor: config.fc.mail.to_owned(), webmaster: config.fc.mail, - pub_date: Some(chrono::Utc::now().to_rfc2822().replace("+0000", "GMT")), + pub_date: Some(Local::now().to_rfc2822()), categories: ["blog", "blogging", "write", "writing"] .iter() .map(|&c| Category { @@ -195,16 +196,30 @@ fn build_rss(config: Config, info: ConnectionInfo) -> String { generator: Some("ewp with rss crate".into()), docs: Some("https://www.rssboard.org/rss-specification".into()), image: Some(Image { - url: format!( - "{}://{}/icons/favicon-32x32.png", - info.scheme(), - info.host() - ), + url: format!("{}/icons/favicon-32x32.png", link_to_site), title: "Favicon".into(), - link: link_to_site, + link: link_to_site.to_owned(), ..Image::default() }), - items: vec![], + items: posts + .iter() + .map(|p| Item { + title: Some(p.title.to_owned()), + link: Some(format!("{}/blog/p/{}", link_to_site, p.url)), + description: p.desc.to_owned(), + pub_date: Some( + NaiveDateTime::parse_from_str( + &format!("{}-{}-{} 13:12:00", p.date.day, p.date.month, p.date.year), + "%d-%m-%Y %H:%M:%S", + ) + .unwrap() + .and_local_timezone(Europe::Paris) + .unwrap() + .to_rfc2822(), + ), + ..Item::default() + }) + .collect(), ..Channel::default() };