From 8aa4c82b81600cccd3d89baf3d489f0b7ef046ea Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 13 Jun 2021 13:56:59 -0400 Subject: Add thr:in-reply-to elements to Atom entries --- atom.c | 38 ++++++++++++++++++++++++-------------- bubger.1 | 9 +++++++++ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/atom.c b/atom.c index b49a2b7..782b265 100644 --- a/atom.c +++ b/atom.c @@ -34,17 +34,17 @@ #include "archive.h" -static char *atomID(const struct Envelope *envelope) { +static char *atomID(const char *messageID) { struct Variable vars[] = { - { "messageID", envelope->messageID }, + { "messageID", messageID }, {0}, }; return templateString("mid:[messageID]", vars, escapeURL); } -static char *atomEntryURL(const struct Envelope *envelope) { +static char *atomEntryURL(const char *messageID) { struct Variable vars[] = { - { "messageID", envelope->messageID }, + { "messageID", messageID }, { "type", "mbox" }, {0}, }; @@ -68,14 +68,18 @@ static int atomAuthor(FILE *file, struct Address addr) { } int atomEntryOpen(FILE *file, const struct Envelope *envelope) { - char *id = atomID(envelope); - char *url = atomEntryURL(envelope); + char *id = atomID(envelope->messageID); + char *url = atomEntryURL(envelope->messageID); + char *ref = (envelope->inReplyTo ? atomID(envelope->inReplyTo) : NULL); const char *template = Q( [id] [title] [updated] + [+ref] + + [-] ); struct Variable vars[] = { { "id", id }, @@ -83,6 +87,7 @@ int atomEntryOpen(FILE *file, const struct Envelope *envelope) { { "updated", iso8601(envelope->time).s }, { "base", baseURL }, { "url", url }, + { "ref", ref }, {0}, }; int error = 0 @@ -90,6 +95,7 @@ int atomEntryOpen(FILE *file, const struct Envelope *envelope) { || atomAuthor(file, envelope->from); free(id); free(url); + free(ref); return error; } @@ -112,9 +118,9 @@ int atomEntryClose(FILE *file) { return templateRender(file, Q(), NULL, NULL); } -static char *atomThreadURL(const struct Envelope *envelope, const char *type) { +static char *atomThreadURL(const char *messageID, const char *type) { struct Variable vars[] = { - { "messageID", envelope->messageID }, + { "messageID", messageID }, { "type", type }, {0}, }; @@ -124,12 +130,14 @@ static char *atomThreadURL(const struct Envelope *envelope, const char *type) { #define XML_DECL "" int atomThreadOpen(FILE *file, const struct Envelope *envelope) { - char *id = atomID(envelope); - char *atom = atomThreadURL(envelope, "atom"); - char *html = atomThreadURL(envelope, "html"); - char *mbox = atomThreadURL(envelope, "mbox"); + char *id = atomID(envelope->messageID); + char *atom = atomThreadURL(envelope->messageID, "atom"); + char *html = atomThreadURL(envelope->messageID, "html"); + char *mbox = atomThreadURL(envelope->messageID, "mbox"); const char *template = XML_DECL Q( - + bubger [id] [title] @@ -176,7 +184,9 @@ int atomIndexOpen(FILE *file, const char *name) { char *atom = atomIndexURL(name, "atom"); char *html = atomIndexURL(name, "html"); const char *template = XML_DECL Q( - + bubger [base][atom] [+name][name] - [-][title] diff --git a/bubger.1 b/bubger.1 index 0e5d7fe..4edfd36 100644 --- a/bubger.1 +++ b/bubger.1 @@ -338,6 +338,15 @@ bubger TO "list+bubger@causal.agency" .%U https://tools.ietf.org/html/rfc4287 .%D December 2005 .Re +.It +.Rs +.%A J. Snell +.%T Atom Threading Extensions +.%I IETF +.%R RFC 4685 +.%U https://tools.ietf.org/html/rfc4685 +.%D September 2006 +.Re .El . .Sh AUTHORS -- cgit 1.4.1