properties: add notmuch_message_remove_all_properties_with_prefix()

Subsequent patches will introduce a convention that properties whose
name starts with "index." will be stripped (and possibly re-added)
during re-indexing.  This patch lays the groundwork for doing that.
This commit is contained in:
Daniel Kahn Gillmor 2017-10-17 15:09:59 -04:00 committed by David Bremner
parent a18bbf7f15
commit 0b9e1a2472
2 changed files with 32 additions and 2 deletions

View file

@ -85,8 +85,9 @@ notmuch_message_remove_property (notmuch_message_t *message, const char *key, co
return _notmuch_message_modify_property (message, key, value, true);
}
static
notmuch_status_t
notmuch_message_remove_all_properties (notmuch_message_t *message, const char *key)
_notmuch_message_remove_all_properties (notmuch_message_t *message, const char *key, bool prefix)
{
notmuch_status_t status;
const char * term_prefix;
@ -97,7 +98,8 @@ notmuch_message_remove_all_properties (notmuch_message_t *message, const char *k
_notmuch_message_invalidate_metadata (message, "property");
if (key)
term_prefix = talloc_asprintf (message, "%s%s=", _find_prefix ("property"), key);
term_prefix = talloc_asprintf (message, "%s%s%s", _find_prefix ("property"), key,
prefix ? "" : "=");
else
term_prefix = _find_prefix ("property");
@ -107,6 +109,18 @@ notmuch_message_remove_all_properties (notmuch_message_t *message, const char *k
return NOTMUCH_STATUS_SUCCESS;
}
notmuch_status_t
notmuch_message_remove_all_properties (notmuch_message_t *message, const char *key)
{
return _notmuch_message_remove_all_properties (message, key, false);
}
notmuch_status_t
notmuch_message_remove_all_properties_with_prefix (notmuch_message_t *message, const char *prefix)
{
return _notmuch_message_remove_all_properties (message, prefix, true);
}
notmuch_message_properties_t *
notmuch_message_get_properties (notmuch_message_t *message, const char *key, notmuch_bool_t exact)
{

View file

@ -1823,6 +1823,22 @@ notmuch_message_remove_property (notmuch_message_t *message, const char *key, co
notmuch_status_t
notmuch_message_remove_all_properties (notmuch_message_t *message, const char *key);
/**
* Remove all (prefix*,value) pairs from the given message
*
* @param[in,out] message message to operate on.
* @param[in] prefix delete properties with keys that start with prefix.
* If NULL, delete all properties
* @returns
* - NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in
* read-only mode so message cannot be modified.
* - NOTMUCH_STATUS_SUCCESS: No error occured.
*
* @since libnotmuch 5.1 (notmuch 0.26)
*/
notmuch_status_t
notmuch_message_remove_all_properties_with_prefix (notmuch_message_t *message, const char *prefix);
/**
* Opaque message property iterator
*/