/* Copyright (C) 2020 C. McEnroe * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include "archive.h" static char *atomID(const char *messageID) { struct Variable vars[] = { { "messageID", messageID }, {0}, }; return templateURL("mailto:?In-Reply-To=[messageID]", vars); } int atomEntryHead(FILE *file, const struct Envelope *envelope) { char *id = atomID(envelope->messageID); char date[sizeof("0000-00-00T00:00:00Z")]; strftime(date, sizeof(date), "%FT%TZ", gmtime(&envelope->utc)); struct Variable vars[] = { { "subject", envelope->subject }, { "from.name", addressName(envelope->from) }, { "from.mailbox", envelope->from.mailbox }, { "from.host", envelope->from.host }, { "date", date }, { "id", id }, {0}, }; const char *Entry = TEMPLATE( [subject] [from.name] [from.mailbox]@[from.host] [date] [id] ); int error = templateRender(file, Entry, vars, escapeXML); free(id); return error; } int atomEntryTail(FILE *file) { int n = fprintf(file, "\n"); return (n < 0 ? n : 0); } int atomFeedHead(FILE *file, const struct Envelope *envelope) { char *id = atomID(envelope->messageID); char date[sizeof("0000-00-00T00:00:00Z")]; strftime(date, sizeof(date), "%FT%TZ", gmtime(&(time_t) { time(NULL) })); struct Variable vars[] = { { "subject", envelope->subject }, { "from.name", addressName(envelope->from) }, { "from.mailbox", envelope->from.mailbox }, { "from.host", envelope->from.host }, { "date", date }, { "id", id }, { "q", "?" }, {0}, }; const char *Feed = TEMPLATE( <[q]xml version="1.0" encoding="utf-8"[q]> [subject] [from.name] [from.mailbox]@[from.host] [date] [id] ); int error = templateRender(file, Feed, vars, escapeXML); free(id); return error; } int atomFeedTail(FILE *file) { int n = fprintf(file, "\n"); return (n < 0 ? n : 0); }