about summary refs log tree commit diff
path: root/concat.c
diff options
context:
space:
mode:
Diffstat (limited to 'concat.c')
-rw-r--r--concat.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/concat.c b/concat.c
index 2c58d8a..eeab073 100644
--- a/concat.c
+++ b/concat.c
@@ -119,14 +119,36 @@ void concatData(struct List threads, struct List items) {
 	if (error || file.st_mtime < uidNewest(flat, "mbox")) {
 		FILE *mbox = fopen(path, "w");
 		if (!mbox) err(EX_CANTCREAT, "%s", path);
+
 		for (size_t i = 0; i < flat.len; ++i) {
 			uint32_t uid = dataCheck(flat.ptr[i], Number).number;
 			error = concatFile(mbox, uidPath(uid, "mbox"));
 			if (error) err(EX_IOERR, "%s", path);
 		}
+
 		error = fclose(mbox);
 		if (error) err(EX_IOERR, "%s", path);
 	}
 
+	path = threadPath(envelope.messageID, "atom");
+	error = stat(path, &file);
+	if (error || file.st_mtime < uidNewest(flat, "atom")) {
+		FILE *atom = fopen(path, "w");
+		if (!atom) err(EX_CANTCREAT, "%s", path);
+
+		error = atomFeedHead(atom, &envelope);
+		if (error) err(EX_IOERR, "%s", path);
+
+		for (size_t i = 0; i < flat.len; ++i) {
+			uint32_t uid = dataCheck(flat.ptr[i], Number).number;
+			error = concatFile(atom, uidPath(uid, "atom"));
+			if (error) err(EX_IOERR, "%s", path);
+		}
+
+		error = atomFeedTail(atom)
+			|| fclose(atom);
+		if (error) err(EX_IOERR, "%s", path);
+	}
+
 	listFree(flat);
 }