fixed rss order

This commit is contained in:
Rakarake 2026-04-05 21:19:40 +02:00
parent 0beaa152b4
commit 36c3967170
3 changed files with 27 additions and 118 deletions

View file

@ -1,9 +1,9 @@
use std::{collections::HashMap, io, path::Path};
use markdown::to_html;
use rss::{Channel, GuidBuilder, ItemBuilder};
use rss::{Channel, ChannelBuilder, GuidBuilder, Item, ItemBuilder};
fn main() -> io::Result<()> {
let posts = std::env::args().skip(2).rev().map(|f| {
let posts = std::env::args().skip(2).map(|f| {
let contents = std::fs::read_to_string(f.clone())?;
// parse metadata, then the rest to html
let mut metadata: HashMap<String, String> = contents.lines().take_while(|l| {
@ -31,30 +31,31 @@ fn main() -> io::Result<()> {
if let Some(mode) = std::env::args().skip(1).next() {
match mode.as_str() {
"rss" => {
let mut channel = Channel::default();
channel.title = "MDF blog huge".to_string();
channel.link = "https://mdf.farm".to_string();
channel.description = "The MDF blog".to_string();
channel.generator = Some("Rakabaka's tooling".to_string());
channel.items = posts.iter().map(|(body, metadata)| {
let guid = metadata.get("guid").map(|guid|
GuidBuilder::default()
.value(guid)
.permalink(false)
.build()
);
ItemBuilder::default()
.title(metadata.get("title").map(|title| title.clone()))
.description(Some(body.clone()))
.pub_date(metadata.get("pubDate").map(|title| title.clone()))
.link(metadata.get("guid").map(|g| format!("https://mdf.farm/#{g}")))
.guid(guid)
.build()
}).collect();
let channel = ChannelBuilder::default()
.title("MDF blog huge".to_string())
.link("https://mdf.farm".to_string())
.description("The MDF blog".to_string())
.generator(Some("Rakabaka's tooling".to_string()))
.items(posts.iter().map(|(body, metadata)| {
let guid = metadata.get("guid").map(|guid|
GuidBuilder::default()
.value(guid)
.permalink(false)
.build()
);
ItemBuilder::default()
.title(metadata.get("title").map(|title| title.clone()))
.description(Some(body.clone()))
.pub_date(metadata.get("pubDate").map(|title| title.clone()))
.link(metadata.get("guid").map(|g| format!("https://mdf.farm/#{g}")))
.guid(guid)
.build()
}).collect::<Vec<Item>>())
.build();
print!("{}", channel);
},
"html" => {
print!("{}", posts.iter().enumerate().map(|(i, (body, metadata))| {
print!("{}", posts.iter().rev().enumerate().map(|(i, (body, metadata))| {
let guid = metadata.get("guid").unwrap_or(&i.to_string()).clone();
let title = metadata.get("title").map(|title| format!("<h1>{title}</h1>")).unwrap_or("".to_string());
let pub_date = metadata.get("pubDate").map(|pub_date| format!("<i>{pub_date}</i>")).unwrap_or("".to_string());