diff options
| author | Daniel Kahn Gillmor <dkg@fifthhorseman.net> | 2016-04-08 22:54:50 -0300 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2016-04-15 07:07:23 -0300 |
| commit | 9eebae3da4510a671cbbb2f476c2dc04099b4415 (patch) | |
| tree | a010e1f14bc66faa429f51f4ce6b160f80001cdc /lib | |
| parent | 011fc41d4d1a1dc9ae3765c9f08ee603eea7bc7e (diff) | |
Introduce _notmuch_message_has_term()
It can be useful to easily tell if a given message has a given term
associated with it.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/message.cc | 35 | ||||
| -rw-r--r-- | lib/notmuch-private.h | 6 |
2 files changed, 41 insertions, 0 deletions
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 @@ -280,6 +280,12 @@ _notmuch_message_remove_term (notmuch_message_t *message, 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, const char *text); |
