diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2016-07-18 19:42:25 +0200 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2016-07-18 19:42:25 +0200 |
commit | 7f81aa6012164f64876c9ad370105792b6042953 (patch) | |
tree | eff6771bfec902a4919e6a1b481247068a8aecad /thread.c | |
parent | 11f1ff945ab2ea8fc508c87ac51b126b038dc030 (diff) | |
download | mblaze-7f81aa6012164f64876c9ad370105792b6042953.tar.gz mblaze-7f81aa6012164f64876c9ad370105792b6042953.tar.xz mblaze-7f81aa6012164f64876c9ad370105792b6042953.zip |
thread: prune empty messages from top with only one child
Diffstat (limited to 'thread.c')
-rw-r--r-- | thread.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/thread.c b/thread.c index 829fe02..b645233 100644 --- a/thread.c +++ b/thread.c @@ -243,6 +243,22 @@ find_roots() } void +prune_tree(struct container *c, int depth) +{ + do { + if (c->child) + prune_tree(c->child, depth+1); + if (!c->file && c->child && !c->child->next) { + // turn into child if we don't exist and only have a child + c->mid = c->child->mid; + c->file = c->child->file; + c->msg = c->child->msg; + c->child = c->child->child; + } + } while ((c = c->next)); +} + +void print_tree(struct container *c, int depth) { do { @@ -267,7 +283,7 @@ main(int argc, char *argv[]) int i = blaze822_loop(argc-1, argv+1, thread); find_roots(); - + prune_tree(top, -1); print_tree(top, -1); fprintf(stderr, "%d mails threaded\n", i); |