X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=message.cc;h=b95f9d7f4993d4bc94d9f7e7fa583aa0ae699e38;hp=7fef60a532e7db43e4ef8711aaf58e410c67c352;hb=1726c5c814aecd924849a0b91c82d420af945827;hpb=789495919aaaba47040faded49276b217068c6af diff --git a/message.cc b/message.cc index 7fef60a5..b95f9d7f 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,7 +289,40 @@ notmuch_message_get_filename (notmuch_message_t *message) notmuch_tags_t * notmuch_message_get_tags (notmuch_message_t *message) { - return _notmuch_tags_create_terms (message, message->doc, "tag"); + 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_sort (tags); + + _notmuch_tags_reset (tags); + + return tags; } void