From 9eebae3da4510a671cbbb2f476c2dc04099b4415 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Fri, 8 Apr 2016 22:54:50 -0300 Subject: [PATCH] Introduce _notmuch_message_has_term() It can be useful to easily tell if a given message has a given term associated with it. --- lib/message.cc | 35 +++++++++++++++++++++++++++++++++++ lib/notmuch-private.h | 6 ++++++ 2 files changed, 41 insertions(+) diff --git a/lib/message.cc b/lib/message.cc index 415eac1b..4677f1df 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1217,6 +1217,41 @@ _notmuch_message_remove_term (notmuch_message_t *message, return NOTMUCH_PRIVATE_STATUS_SUCCESS; } +notmuch_private_status_t +_notmuch_message_has_term (notmuch_message_t *message, + const char *prefix_name, + const char *value, + notmuch_bool_t *result) +{ + char *term; + notmuch_bool_t out = FALSE; + notmuch_private_status_t status = NOTMUCH_PRIVATE_STATUS_SUCCESS; + + if (value == NULL) + return NOTMUCH_PRIVATE_STATUS_NULL_POINTER; + + term = talloc_asprintf (message, "%s%s", + _find_prefix (prefix_name), value); + + if (strlen (term) > NOTMUCH_TERM_MAX) + return NOTMUCH_PRIVATE_STATUS_TERM_TOO_LONG; + + try { + /* Look for the exact term */ + Xapian::TermIterator i = message->doc.termlist_begin (); + i.skip_to (term); + if (i != message->doc.termlist_end () && + !strcmp ((*i).c_str (), term)) + out = TRUE; + } catch (Xapian::Error &error) { + status = NOTMUCH_PRIVATE_STATUS_XAPIAN_EXCEPTION; + } + talloc_free (term); + + *result = out; + return status; +} + notmuch_status_t notmuch_message_add_tag (notmuch_message_t *message, const char *tag) { diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index d95bf310..92807975 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -279,6 +279,12 @@ _notmuch_message_remove_term (notmuch_message_t *message, const char *prefix_name, const char *value); +notmuch_private_status_t +_notmuch_message_has_term (notmuch_message_t *message, + const char *prefix_name, + const char *value, + notmuch_bool_t *result); + notmuch_private_status_t _notmuch_message_gen_terms (notmuch_message_t *message, const char *prefix_name, -- 2.26.2