[PATCH 10/12] lib: factor out xapian access from notmuch_message_get_header

David Bremner david at tethera.net
Fri Jun 22 18:42:45 PDT 2018


In a later commit, we will introduce another layer of data structure
for headers. To keep the resulting function size down, factor out the
database access.
---
 lib/message.cc | 41 ++++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/lib/message.cc b/lib/message.cc
index bf597bc5..f59f0a5c 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -529,6 +529,29 @@ _notmuch_message_ensure_message_file (notmuch_message_t *message)
 	notmuch_message_get_database (message), message, filename);
 }
 
+static const char *
+_notmuch_message_get_header_from_xapian (notmuch_message_t *message,
+				 Xapian::valueno slot)
+{
+    try {
+	std::string value = message->doc.get_value (slot);
+
+	/* If we have NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES, then
+	 * empty values indicate empty headers.  If we don't, then
+	 * it could just mean we didn't record the header. */
+	if ((message->notmuch->features &
+	     NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES) ||
+	    ! value.empty())
+	    return talloc_strdup (message, value.c_str ());
+
+    } catch (Xapian::Error &error) {
+	_notmuch_database_log(notmuch_message_get_database (message), "A Xapian exception occurred when reading header: %s\n",
+			      error.get_msg().c_str());
+	message->notmuch->exception_reported = true;
+    }
+    return NULL;
+}
+
 const char *
 notmuch_message_get_header (notmuch_message_t *message, const char *header)
 {
@@ -544,23 +567,7 @@ notmuch_message_get_header (notmuch_message_t *message, const char *header)
 	slot = NOTMUCH_VALUE_MESSAGE_ID;
 
     if (slot != Xapian::BAD_VALUENO) {
-	try {
-	    std::string value = message->doc.get_value (slot);
-
-	    /* If we have NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES, then
-	     * empty values indicate empty headers.  If we don't, then
-	     * it could just mean we didn't record the header. */
-	    if ((message->notmuch->features &
-		 NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES) ||
-		! value.empty())
-		return talloc_strdup (message, value.c_str ());
-
-	} catch (Xapian::Error &error) {
-	    _notmuch_database_log(notmuch_message_get_database (message), "A Xapian exception occurred when reading header: %s\n",
-		     error.get_msg().c_str());
-	    message->notmuch->exception_reported = true;
-	    return NULL;
-	}
+	return _notmuch_message_get_header_from_xapian (message, slot);
     }
 
     /* Otherwise fall back to parsing the file */
-- 
2.17.1



More information about the notmuch mailing list