From: Richard Russon Date: Thu, 10 Jan 2019 15:27:30 +0000 (+0000) Subject: mutt_link_threads: factor out Context X-Git-Tag: 2019-10-25~373^2~16 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aeefc1dbec83b0266cba4142e2f2b6d8b6f49144;p=neomutt mutt_link_threads: factor out Context --- diff --git a/index.c b/index.c index d97496aaf..a6ed03ff4 100644 --- a/index.c +++ b/index.c @@ -2406,8 +2406,10 @@ int mutt_index_menu(void) else { struct Email *oldcur = CUR_EMAIL; + struct EmailList el = STAILQ_HEAD_INITIALIZER(el); + el_add_tagged(&el, Context, Context->last_tag, tag); - if (mutt_link_threads(CUR_EMAIL, tag ? NULL : Context->last_tag, Context)) + if (mutt_link_threads(CUR_EMAIL, &el, Context->mailbox)) { mutt_sort_headers(Context, true); menu->current = oldcur->virtual; @@ -2417,6 +2419,8 @@ int mutt_index_menu(void) } else mutt_error(_("No thread linked")); + + el_free(&el); } if (menu->menu == MENU_PAGER) diff --git a/mutt_thread.c b/mutt_thread.c index 5478e1522..5c551fbcd 100644 --- a/mutt_thread.c +++ b/mutt_thread.c @@ -1451,8 +1451,8 @@ struct Hash *mutt_make_id_hash(struct Mailbox *m) /** * link_threads - Forcibly link messages together - * @param parent Header of parent message - * @param child Header of child message + * @param parent Parent Email + * @param child Child Email * @param m Mailbox * @retval true On success */ @@ -1472,30 +1472,23 @@ static bool link_threads(struct Email *parent, struct Email *child, struct Mailb /** * mutt_link_threads - Forcibly link threads together - * @param cur Header of current message - * @param last Header of thread to link (OPTIONAL) - * @param ctx Mailbox + * @param parent Parent Email + * @param children List of children Emails + * @param m Mailbox * @retval true On success - * - * if last is omitted, all the tagged threads will be used. */ -bool mutt_link_threads(struct Email *cur, struct Email *last, struct Context *ctx) +bool mutt_link_threads(struct Email *parent, struct EmailList *children, struct Mailbox *m) { - if (!ctx || !ctx->mailbox) + if (!parent || !children || !m) return false; - struct Mailbox *m = ctx->mailbox; - bool changed = false; - if (!last) + struct EmailNode *en = NULL; + STAILQ_FOREACH(en, children, entries) { - for (int i = 0; i < m->msg_count; i++) - if (message_is_tagged(ctx, i)) - changed |= link_threads(cur, m->emails[i], ctx->mailbox); + changed |= link_threads(parent, en->email, m); } - else - changed = link_threads(cur, last, ctx->mailbox); return changed; } diff --git a/mutt_thread.h b/mutt_thread.h index 2cf9bedfd..fb1c4f58a 100644 --- a/mutt_thread.h +++ b/mutt_thread.h @@ -63,7 +63,7 @@ int mutt_traverse_thread(struct Context *ctx, struct Email *cur, int flag); #define mutt_thread_contains_flagged(x, y) mutt_traverse_thread(x, y, MUTT_THREAD_FLAGGED) #define mutt_thread_next_unread(x, y) mutt_traverse_thread(x, y, MUTT_THREAD_NEXT_UNREAD) -bool mutt_link_threads(struct Email *cur, struct Email *last, struct Context *ctx); +bool mutt_link_threads(struct Email *parent, struct EmailList *children, struct Mailbox *m); int mutt_messages_in_thread(struct Mailbox *m, struct Email *e, int flag); void mutt_draw_tree(struct Context *ctx);