Properly format RSS pubdates

This commit is contained in:
Gabriel Simmer 2023-09-22 13:10:44 +01:00
parent 34e0a15e36
commit 2b8c13014b
Signed by: arch
SSH key fingerprint: SHA256:m3OEcdtrnBpMX+2BDGh/byv3hrCekCLzDYMdvGEKPPQ
3 changed files with 53 additions and 9 deletions

43
Cargo.lock generated
View file

@ -611,6 +611,12 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "deranged"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
[[package]] [[package]]
name = "derive_builder" name = "derive_builder"
version = "0.12.0" version = "0.12.0"
@ -1863,6 +1869,7 @@ dependencies = [
"serde_dhall", "serde_dhall",
"sha2", "sha2",
"sqlx", "sqlx",
"time",
"tokio", "tokio",
"tower", "tower",
"tower-http", "tower-http",
@ -2145,18 +2152,18 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.183" version = "1.0.188"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.183" version = "1.0.188"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2641,6 +2648,34 @@ dependencies = [
"lazy_static 1.4.0", "lazy_static 1.4.0",
] ]
[[package]]
name = "time"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48"
dependencies = [
"deranged",
"itoa",
"serde",
"time-core",
"time-macros",
]
[[package]]
name = "time-core"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
[[package]]
name = "time-macros"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572"
dependencies = [
"time-core",
]
[[package]] [[package]]
name = "tinyvec" name = "tinyvec"
version = "1.6.0" version = "1.6.0"

View file

@ -24,4 +24,5 @@ clap = { version = "4.0", features = ["derive"] }
serde_dhall = "0.12.1" serde_dhall = "0.12.1"
frontmatter = "0.4.0" frontmatter = "0.4.0"
file-format = "0.18.0" file-format = "0.18.0"
rss = "2.0.6" rss = "2.0.6"
time = { version = "0.3.28", features = ["parsing", "formatting", "macros"] }

View file

@ -20,6 +20,7 @@ use orgize::Org;
use serde::Deserialize; use serde::Deserialize;
use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions}; use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions};
use sqlx::{FromRow, Pool, Sqlite}; use sqlx::{FromRow, Pool, Sqlite};
use time::format_description::well_known::Rfc2822;
use std::collections::HashMap; use std::collections::HashMap;
use std::fs::{self, File}; use std::fs::{self, File};
use std::io::prelude::*; use std::io::prelude::*;
@ -28,6 +29,8 @@ use std::time::{SystemTime, UNIX_EPOCH};
use tokio::sync::Mutex; use tokio::sync::Mutex;
use tower_http::services::ServeDir; use tower_http::services::ServeDir;
use rss::ChannelBuilder; use rss::ChannelBuilder;
use time::{self, Date, format_description};
use time::macros::time as t;
lazy_static! { lazy_static! {
static ref CACHE: Mutex<HashMap<String, CachedPage>> = Mutex::new(HashMap::new()); static ref CACHE: Mutex<HashMap<String, CachedPage>> = Mutex::new(HashMap::new());
@ -156,18 +159,23 @@ async fn rss() -> Result<impl IntoResponse, StatusCode> {
.find(|&x| x.contains("title:")) .find(|&x| x.contains("title:"))
.unwrap_or(&"") .unwrap_or(&"")
.split(":") .split(":")
.collect::<Vec<&str>>()[1]; .collect::<Vec<&str>>()[1].trim();
let date = date.trim(); let date = format!("{} 00:00:00 +00:00:00", date.trim());
dbg!(&date); let format = format_description::parse("[year]-[month]-[day] [hour]:[minute]:[second] [offset_hour sign:mandatory]:[offset_minute]:[offset_second]").unwrap();
let pub_date = match time::OffsetDateTime::parse(&date, &format).unwrap().format(&Rfc2822) {
Ok(r) => r,
Err(e) => { dbg!(e.to_string()); "".to_owned() },
};
let item = rss::ItemBuilder::default() let item = rss::ItemBuilder::default()
.title(Some(title.to_owned())) .title(Some(title.to_owned()))
.link(Some(format!("https://gabrielsimmer.com/blog/{}", fname))) .link(Some(format!("https://gabrielsimmer.com/blog/{}", fname)))
.pub_date(Some(date.to_owned())) .pub_date(Some(pub_date))
.build(); .build();
posts.push(item); posts.push(item);
} }
} }
let channel = ChannelBuilder::default() let channel = ChannelBuilder::default()
.title("Gabriel Simmer's Blog".to_owned()) .title("Gabriel Simmer's Blog".to_owned())
.link("https://gabrielsimmer.com/blog".to_owned()) .link("https://gabrielsimmer.com/blog".to_owned())