/* Returns true IF and only IF the mail has EITHER one of the
attachment keywords set. If it has both, or none, it will return FALSE. */
bool mail_has_attachment_keywords(struct mail *mail);
-/* Sets attachment keywords. */
-void mail_set_attachment_keywords(struct mail *mail);
+/* Sets attachment keywords. Returns -1 on error, 0 when no attachment(s) found,
+ and 1 if attachment was found. */
+int mail_set_attachment_keywords(struct mail *mail);
void mailbox_set_deleted(struct mailbox *box);
int mailbox_mark_index_deleted(struct mailbox *box, bool del);
str_array_icase_find(kw, MAIL_KEYWORD_HAS_NO_ATTACHMENT));
}
-void mail_set_attachment_keywords(struct mail *mail)
+int mail_set_attachment_keywords(struct mail *mail)
{
+ int ret;
const struct mail_storage_settings *mail_set =
mail_storage_get_settings(mailbox_get_storage(mail->box));
mail_set_critical(mail, "Failed to add attachment keywords: "
"mail_get_parts() failed: %s",
mail_storage_get_last_internal_error(mail->box->storage, NULL));
- return;
+ ret = -1;
} else if (mailbox_keywords_create(mail->box, keyword_has_attachment, &kw_has) < 0 ||
mailbox_keywords_create(mail->box, keyword_has_no_attachment, &kw_has_not) < 0) {
- if (mail_set->mail_debug) {
- i_debug("Failed to add attachment keywords: mailbox_keyword_create(%s) failed: %s",
- mailbox_get_vname(mail->box),
- mail_storage_get_last_error(mail->box->storage, NULL));
- }
+ mail_set_critical(mail, "Failed to add attachment keywords: "
+ "mailbox_keywords_create(%s) failed: %s",
+ mailbox_get_vname(mail->box),
+ mail_storage_get_last_internal_error(mail->box->storage, NULL));
+ ret = -1;
} else {
bool has_attachment = mail_message_has_attachment(parts, &set);
/* make sure only one of the keywords gets set */
mail_update_keywords(mail, MODIFY_REMOVE, has_attachment ? kw_has_not : kw_has);
mail_update_keywords(mail, MODIFY_ADD, has_attachment ? kw_has : kw_has_not);
+ ret = has_attachment ? 1 : 0;
}
if (kw_has != NULL)
mailbox_keywords_unref(&kw_has);
if (kw_has_not != NULL)
mailbox_keywords_unref(&kw_has_not);
+
+ return ret;
}