[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