From: Daniel Kahn Gillmor Date: Sat, 9 Apr 2016 01:54:50 +0000 (-0300) Subject: Introduce _notmuch_message_has_term() X-Git-Tag: 0.22_rc0~7 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=9eebae3da4510a671cbbb2f476c2dc04099b4415;hp=011fc41d4d1a1dc9ae3765c9f08ee603eea7bc7e Introduce _notmuch_message_has_term() It can be useful to easily tell if a given message has a given term associated with it. --- 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,