about summary refs log tree commit diff
path: root/concat.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-04-10 17:22:13 -0400
committerJune McEnroe <june@causal.agency>2020-04-10 17:22:13 -0400
commit93aa78f326683d14f243f74809f7bf000d7faebf (patch)
tree31226dad12ccc6dac51d6649d514a84cf9132a61 /concat.c
parentConcatenate mbox threads (diff)
downloadbubger-93aa78f326683d14f243f74809f7bf000d7faebf.tar.gz
bubger-93aa78f326683d14f243f74809f7bf000d7faebf.zip
Concatenate Atom threads
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);
 }