mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
lib: add _notmuch_message_remove_indexed_terms
Testing will be provided via use in notmuch_message_reindex
This commit is contained in:
parent
ed4a9082c0
commit
34d7753992
2 changed files with 56 additions and 0 deletions
|
@ -599,6 +599,59 @@ _notmuch_message_remove_terms (notmuch_message_t *message, const char *prefix)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* Remove all terms generated by indexing, i.e. not tags or
|
||||
* properties, along with any automatic tags*/
|
||||
notmuch_private_status_t
|
||||
_notmuch_message_remove_indexed_terms (notmuch_message_t *message)
|
||||
{
|
||||
Xapian::TermIterator i;
|
||||
|
||||
const std::string
|
||||
id_prefix = _find_prefix ("id"),
|
||||
property_prefix = _find_prefix ("property"),
|
||||
tag_prefix = _find_prefix ("tag"),
|
||||
type_prefix = _find_prefix ("type");
|
||||
|
||||
for (i = message->doc.termlist_begin ();
|
||||
i != message->doc.termlist_end (); i++) {
|
||||
|
||||
const std::string term = *i;
|
||||
|
||||
if (term.compare (0, type_prefix.size (), type_prefix) == 0)
|
||||
continue;
|
||||
|
||||
if (term.compare (0, id_prefix.size (), id_prefix) == 0)
|
||||
continue;
|
||||
|
||||
if (term.compare (0, property_prefix.size (), property_prefix) == 0)
|
||||
continue;
|
||||
|
||||
if (term.compare (0, tag_prefix.size (), tag_prefix) == 0 &&
|
||||
term.compare (1, strlen("encrypted"), "encrypted") != 0 &&
|
||||
term.compare (1, strlen("signed"), "signed") != 0 &&
|
||||
term.compare (1, strlen("attachment"), "attachment") != 0)
|
||||
continue;
|
||||
|
||||
try {
|
||||
message->doc.remove_term ((*i));
|
||||
message->modified = TRUE;
|
||||
} catch (const Xapian::InvalidArgumentError) {
|
||||
/* Ignore failure to remove non-existent term. */
|
||||
} catch (const Xapian::Error &error) {
|
||||
notmuch_database_t *notmuch = message->notmuch;
|
||||
|
||||
if (!notmuch->exception_reported) {
|
||||
_notmuch_database_log(_notmuch_message_database (message), "A Xapian exception occurred creating message: %s\n",
|
||||
error.get_msg().c_str());
|
||||
notmuch->exception_reported = TRUE;
|
||||
}
|
||||
return NOTMUCH_PRIVATE_STATUS_XAPIAN_EXCEPTION;
|
||||
}
|
||||
}
|
||||
return NOTMUCH_PRIVATE_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* Return true if p points at "new" or "cur". */
|
||||
static bool is_maildir (const char *p)
|
||||
{
|
||||
|
@ -646,6 +699,7 @@ _notmuch_message_add_folder_terms (notmuch_message_t *message,
|
|||
|
||||
talloc_free (folder);
|
||||
|
||||
message->modified = TRUE;
|
||||
return NOTMUCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -526,6 +526,8 @@ _notmuch_message_add_reply (notmuch_message_t *message,
|
|||
notmuch_database_t *
|
||||
_notmuch_message_database (notmuch_message_t *message);
|
||||
|
||||
void
|
||||
_notmuch_message_remove_unprefixed_terms (notmuch_message_t *message);
|
||||
/* sha1.c */
|
||||
|
||||
char *
|
||||
|
|
Loading…
Reference in a new issue