about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--archive.c3
-rw-r--r--archive.h1
-rw-r--r--html.c9
3 files changed, 13 insertions, 0 deletions
diff --git a/archive.c b/archive.c
index fd8ef53..ca56c8c 100644
--- a/archive.c
+++ b/archive.c
@@ -142,6 +142,9 @@ static struct Envelope parseEnvelope(struct List list) {
 	date = strptime(date, "%a, %e %b %Y %H:%M:%S %z", &envelope.date);
 	if (!date) errx(EX_PROTOCOL, "invalid envelope date format");
 
+	envelope.date.tm_isdst = -1;
+	envelope.utc = mktime(&envelope.date);
+
 	if (list.ptr[Subject].type != String) {
 		errx(EX_PROTOCOL, "invalid envelope subject field");
 	}
diff --git a/archive.h b/archive.h
index 3d3cfc5..6cc7c5f 100644
--- a/archive.h
+++ b/archive.h
@@ -30,6 +30,7 @@ struct AddressList {
 };
 
 struct Envelope {
+	time_t utc;
 	struct tm date;
 	char *subject;
 	struct Address from, sender, replyTo;
diff --git a/html.c b/html.c
index 50a8378..3ebf9c3 100644
--- a/html.c
+++ b/html.c
@@ -35,6 +35,7 @@ static const char *Envelope = TEMPLATE(
 		<address>
 			<a href="[mailto]">[from]</a>
 		</address>
+		<time datetime="[utc]">[date]</time>
 	</summary>
 );
 
@@ -66,11 +67,19 @@ int htmlEnvelope(FILE *file, const struct Envelope *envelope) {
 	const char *from = envelope->from.name;
 	if (!from) from = envelope->from.mailbox;
 
+	char utc[sizeof("0000-00-00T00:00:00Z")];
+	strftime(utc, sizeof(utc), "%FT%TZ", gmtime(&envelope->utc));
+
+	char date[256];
+	strftime(date, sizeof(date), "%c %z", &envelope->date);
+
 	struct Variable vars[] = {
 		{ "messageID", envelope->messageID },
 		{ "subject", envelope->subject },
 		{ "mailto", mailto },
 		{ "from", from },
+		{ "utc", utc },
+		{ "date", date },
 		{0},
 	};
 	error = templateRender(file, Envelope, vars, escapeXML);