diff options
author | Carl Worth <cworth@cworth.org> | 2009-10-21 15:23:08 -0700 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2009-10-21 15:23:08 -0700 |
commit | 8ad4350fef132b016bbab5eeb1c4a713e51035c6 (patch) | |
tree | a859cc515eae87993cbf8b971551f98dc188b786 /message.cc | |
parent | d008389a4ae306e510b11cc18947d305704f9236 (diff) |
Add notmuch_message_get_thread_ids function
Along with all of the notmuch_thread_ids_t iterator functions.
Using a consistent idiom seems better here rather than returning
a comma-separated string and forcing the user to parse it.
Diffstat (limited to 'message.cc')
-rw-r--r-- | message.cc | 51 |
1 files changed, 51 insertions, 0 deletions
@@ -32,6 +32,11 @@ struct _notmuch_tags { Xapian::TermIterator iterator_end; }; +struct _notmuch_thread_ids { + char *current; + char *next; +}; + #define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0])) /* These prefix values are specifically chosen to be compatible @@ -167,6 +172,25 @@ notmuch_message_get_tags (notmuch_message_t *message) return tags; } +notmuch_thread_ids_t * +notmuch_message_get_thread_ids (notmuch_message_t *message) +{ + notmuch_thread_ids_t *thread_ids; + const char *id_str; + + thread_ids = talloc (message, notmuch_thread_ids_t); + if (unlikely (thread_ids == NULL)) + return NULL; + + id_str = message->doc.get_value (NOTMUCH_VALUE_THREAD).c_str (); + thread_ids->next = talloc_strdup (message, id_str); + + /* Initialize thread_ids->current and terminate first ID. */ + notmuch_thread_ids_advance (thread_ids); + + return thread_ids; +} + void notmuch_message_destroy (notmuch_message_t *message) { @@ -205,3 +229,30 @@ notmuch_tags_destroy (notmuch_tags_t *tags) { talloc_free (tags); } + +notmuch_bool_t +notmuch_thread_ids_has_more (notmuch_thread_ids_t *thread_ids) +{ + if (thread_ids->current == NULL || *thread_ids->current == '\0') + return FALSE; + else + return TRUE; +} + +const char * +notmuch_thread_ids_get (notmuch_thread_ids_t *thread_ids) +{ + return thread_ids->current; +} + +void +notmuch_thread_ids_advance (notmuch_thread_ids_t *thread_ids) +{ + thread_ids->current = strsep (&thread_ids->next, ","); +} + +void +notmuch_thread_ids_destroy (notmuch_thread_ids_t *thread_ids) +{ + talloc_free (thread_ids); +} |