]> git.notmuchmail.org Git - notmuch/blobdiff - lib/thread-fp.cc
Merge branch 'release'
[notmuch] / lib / thread-fp.cc
index 1ab2ae354f9e2c10f3329a2a135692b6644439c4..97a65211992654b629269a74bdde0d6bbf82504f 100644 (file)
@@ -2,7 +2,7 @@
  *
  * This file is part of notmuch.
  *
- * Copyright © 2017 David Bremner
+ * Copyright © 2018 David Bremner
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include "thread-fp.h"
 #include <iostream>
 
-#if HAVE_XAPIAN_FIELD_PROCESSOR
-
 Xapian::Query
 ThreadFieldProcessor::operator() (const std::string & str)
 {
     notmuch_status_t status;
+    const char *thread_prefix = _find_prefix ("thread");
 
     if (str.at (0) == '{') {
-       if (str.length() > 1 && str.at (str.size () - 1) == '}'){
-           std::string subquery_str = str.substr(1,str.size () - 2);
-           notmuch_query_t *subquery = notmuch_query_create (notmuch, subquery_str.c_str());
+       if (str.size () <= 1 || str.at (str.size () - 1) != '}') {
+           throw Xapian::QueryParserError ("missing } in '" + str + "'");
+       } else {
+           std::string subquery_str = str.substr (1, str.size () - 2);
+           notmuch_query_t *subquery = notmuch_query_create (notmuch, subquery_str.c_str ());
            notmuch_messages_t *messages;
            std::set<std::string> terms;
 
-           if (!subquery)
+           if (! subquery)
                throw Xapian::QueryParserError ("failed to create subquery for '" + subquery_str + "'");
 
-
            status = notmuch_query_search_messages (subquery, &messages);
            if (status)
                throw Xapian::QueryParserError ("failed to search messages for '" + subquery_str + "'");
 
-
-           for (; notmuch_messages_valid (messages);  notmuch_messages_move_to_next (messages)) {
-               std::string term = "G";
+           for (; notmuch_messages_valid (messages); notmuch_messages_move_to_next (messages)) {
+               std::string term = thread_prefix;
                notmuch_message_t *message;
                message = notmuch_messages_get (messages);
-               term += notmuch_message_get_thread_id (message);
+               term += _notmuch_message_get_thread_id_only (message);
                terms.insert (term);
            }
-           return Xapian::Query (Xapian::Query::OP_OR, terms.begin(), terms.end());
-       } else {
-           throw Xapian::QueryParserError ("missing } in '" + str + "'");
+           return Xapian::Query (Xapian::Query::OP_OR, terms.begin (), terms.end ());
        }
     } else {
        /* literal thread id */
-       std::string term = "G"+str;
+       std::string term = thread_prefix + str;
        return Xapian::Query (term);
     }
 
 }
-#endif