X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=message.cc;h=66dfc806d9f4e887b3fd2b3611667878184f05ea;hp=f3e39b4b7f2366e711a8a7c8bf892dfbc80f8cc8;hb=ef3ab5781a3730e019f92517366029540a960cd0;hpb=2affed0851d85a08f6b0700f7128f97cae6b6024 diff --git a/message.cc b/message.cc index f3e39b4b..66dfc806 100644 --- a/message.cc +++ b/message.cc @@ -18,7 +18,7 @@ * Author: Carl Worth */ -#include "notmuch-private-cxx.h" +#include "notmuch-private.h" #include "database-private.h" #include @@ -289,8 +289,38 @@ notmuch_message_get_filename (notmuch_message_t *message) notmuch_tags_t * notmuch_message_get_tags (notmuch_message_t *message) { - return _notmuch_terms_create_type (message, message->doc, "tag", - notmuch_tags_t); + const char *prefix = _find_prefix ("tag"); + Xapian::TermIterator i, end; + notmuch_tags_t *tags; + std::string tag; + + /* Currently this iteration is written with the assumption that + * "tag" has a single-character prefix. */ + assert (strlen (prefix) == 1); + + tags = _notmuch_tags_create (message); + if (unlikely (tags == NULL)) + return NULL; + + i = message->doc.termlist_begin (); + end = message->doc.termlist_end (); + + i.skip_to (prefix); + + while (1) { + tag = *i; + + if (tag.empty () || tag[0] != *prefix) + break; + + _notmuch_tags_add_tag (tags, tag.c_str () + 1); + + i++; + } + + _notmuch_tags_prepare_iterator (tags); + + return tags; } void