From 086999c2d1b71f00f2235a473c900287bac9ee9c Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Mon, 25 Jan 2021 10:12:48 +0200 Subject: [PATCH] query: in related/threaded mode, search all In the related query, search _all_ messages, not just the amount asked; this increases the chance of full threads. --- lib/mu-query.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/mu-query.cc b/lib/mu-query.cc index c96a0264..a244a9b4 100644 --- a/lib/mu-query.cc +++ b/lib/mu-query.cc @@ -186,13 +186,15 @@ Query::Private::run_related (const std::string& expr, MuMsgFieldId sortfieldid, const auto mset{enq.get_mset(0, maxnum, {}, make_leader_decider(leader_qflags, minfo).get())}; - // Now, determine the "related query" + // Now, determine the "related query". In the threaded-case, we search + // among _all_ messages, since complete threads are preferred. auto r_enq{make_related_enquire(enq.get_query(), minfo.thread_ids, - threading ? MU_MSG_FIELD_ID_NONE :sortfieldid, qflags)}; - const auto r_mset{r_enq.get_mset(0, maxnum, {}, make_related_decider(qflags, minfo).get())}; + threading ? MU_MSG_FIELD_ID_NONE : sortfieldid, qflags)}; + const auto r_mset{r_enq.get_mset(0, threading ? store_.size() : maxnum, + {}, make_related_decider(qflags, minfo).get())}; auto qres{QueryResults{r_mset, std::move(minfo.matches)}}; - if (none_of(qflags & QueryFlags::Threading)) + if (!threading) return qres; else return run_threaded(qres, r_enq, sortfieldid, qflags, maxnum);