Properly format RSS pubdates
This commit is contained in:
parent
34e0a15e36
commit
2b8c13014b
43
Cargo.lock
generated
43
Cargo.lock
generated
|
@ -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"
|
||||||
|
|
|
@ -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"] }
|
16
src/main.rs
16
src/main.rs
|
@ -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())
|
||||||
|
|
Loading…
Reference in a new issue