--- lib/metadata.cc | 17 +++++++++++++++++ lib/notmuch.h | 6 ++++++ test/T590-metadata.sh | 4 +++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/metadata.cc b/lib/metadata.cc index 5d319c5..20805e5 100644 --- a/lib/metadata.cc +++ b/lib/metadata.cc @@ -26,6 +26,7 @@ struct _notmuch_metadata { notmuch_database_t *notmuch; Xapian::TermIterator *iterator; notmuch_metadata_class_t mclass; + char *current_key; }; static int @@ -180,6 +181,7 @@ notmuch_database_get_all_metadata (notmuch_database_t *notmuch, list->iterator = new Xapian::TermIterator; list->notmuch = notmuch; list->mclass = mclass; + list->current_key = NULL; try { @@ -211,3 +213,18 @@ notmuch_metadata_valid (notmuch_metadata_t *metadata) return (strncmp((**(metadata->iterator)).c_str (), prefix, strlen (prefix)) == 0); } + +const char * +notmuch_metadata_key (notmuch_metadata_t *metadata) +{ + const char *prefix = _find_metadata_prefix (metadata->mclass); + + if (metadata->current_key) + talloc_free (metadata->current_key); + metadata->current_key = talloc_strdup (metadata, (**(metadata->iterator)).c_str () + strlen (prefix)); + + return metadata->current_key; +} + +const char * +} diff --git a/lib/notmuch.h b/lib/notmuch.h index a2b7040..16d0973 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -1866,6 +1866,12 @@ notmuch_database_get_all_metadata (notmuch_database_t *db, notmuch_metadata_clas */ notmuch_bool_t notmuch_metadata_valid (notmuch_metadata_t *metadata); + +/** + * return key for current metadata pair + */ +const char * +notmuch_metadata_key (notmuch_metadata_t *metadata); /* @} */ NOTMUCH_END_DECLS diff --git a/test/T590-metadata.sh b/test/T590-metadata.sh index c36a7d7..2c44746 100755 --- a/test/T590-metadata.sh +++ b/test/T590-metadata.sh @@ -55,17 +55,19 @@ testkey2 = testvalue2 EOF test_expect_equal_file EXPECTED OUTPUT -test_begin_subtest "notmuch_database_get_all_metadata initially valid" +test_begin_subtest "notmuch_database_get_all_metadata first item" cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} { notmuch_metadata_t *meta; RUN(notmuch_database_get_all_metadata (db, NOTMUCH_METADATA_CONFIG, &meta)); printf("valid = %d\n", notmuch_metadata_valid (meta)); + printf("key = %s\n", notmuch_metadata_key (meta)); } EOF cat <<'EOF' >EXPECTED == stdout == valid = 1 +key = testkey1 == stderr == EOF test_expect_equal_file EXPECTED OUTPUT -- 2.6.4