From fd1c32f5552cc116e1cb4c95fcd7cc7a7b069335 Mon Sep 17 00:00:00 2001
From: Martin Lindhe <martinlindhe@users.noreply.github.com>
Date: Mon, 3 Feb 2025 04:00:44 +0100
Subject: [PATCH] rss: add <pubDate> field, fixes #356 (#358)

* rss: add <pubDate> field, fixes #356

* rss: also add pub_date on user feed

* fix(fmt)

---------

Co-authored-by: Matthew Esposito <matt@matthew.science>
---
 Cargo.lock       | 5 +++--
 Cargo.toml       | 1 +
 src/subreddit.rs | 2 ++
 src/user.rs      | 2 ++
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 20d528b..24791b4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -274,9 +274,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
 name = "chrono"
-version = "0.4.38"
+version = "0.4.39"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
 dependencies = [
  "num-traits",
 ]
@@ -1367,6 +1367,7 @@ dependencies = [
  "brotli",
  "build_html",
  "cached",
+ "chrono",
  "clap",
  "common-words-all",
  "cookie",
diff --git a/Cargo.toml b/Cargo.toml
index a4d0170..843b9c9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -51,6 +51,7 @@ common-words-all = { version = "0.0.2", default-features = false, features = ["e
 hyper-rustls = { version = "0.24.2", features = [ "http2" ] }
 tegen = "0.1.4"
 serde_urlencoded = "0.7.1"
+chrono = { version = "0.4.39", default-features = false, features = [ "std" ] }
 htmlescape = "0.3.1"
 
 
diff --git a/src/subreddit.rs b/src/subreddit.rs
index 2362a12..d5d5196 100644
--- a/src/subreddit.rs
+++ b/src/subreddit.rs
@@ -11,6 +11,7 @@ use hyper::{Body, Request, Response};
 use log::{debug, trace};
 use rinja::Template;
 
+use chrono::DateTime;
 use once_cell::sync::Lazy;
 use regex::Regex;
 use time::{Duration, OffsetDateTime};
@@ -607,6 +608,7 @@ pub async fn rss(req: Request<Body>) -> Result<Response<Body>, String> {
 					link: Some(utils::get_post_url(&post)),
 					author: Some(post.author.name),
 					content: Some(rewrite_urls(&post.body)),
+					pub_date: Some(DateTime::from_timestamp(post.created_ts as i64, 0).unwrap_or_default().to_rfc2822()),
 					description: Some(format!(
 						"<a href='{}{}'>Comments</a>",
 						config::get_setting("REDLIB_FULL_URL").unwrap_or_default(),
diff --git a/src/user.rs b/src/user.rs
index 50a4daa..2fb8b0d 100644
--- a/src/user.rs
+++ b/src/user.rs
@@ -5,6 +5,7 @@ use crate::client::json;
 use crate::server::RequestExt;
 use crate::utils::{error, filter_posts, format_url, get_filters, nsfw_landing, param, setting, template, Post, Preferences, User};
 use crate::{config, utils};
+use chrono::DateTime;
 use hyper::{Body, Request, Response};
 use rinja::Template;
 use time::{macros::format_description, OffsetDateTime};
@@ -165,6 +166,7 @@ pub async fn rss(req: Request<Body>) -> Result<Response<Body>, String> {
 					title: Some(post.title.to_string()),
 					link: Some(utils::get_post_url(&post)),
 					author: Some(post.author.name),
+					pub_date: Some(DateTime::from_timestamp(post.created_ts as i64, 0).unwrap_or_default().to_rfc2822()),
 					content: Some(rewrite_urls(&post.body)),
 					..Default::default()
 				})