From 7deb24e7453249d09741641bff0f269f68165033 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 5 Aug 2009 20:14:05 -0400 Subject: [PATCH] mail_update_flags(): Allow removing recent flag from message. --HG-- branch : HEAD --- src/lib-storage/index/index-mail.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index f5632c3898..d3083beb36 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -1402,11 +1402,28 @@ void index_mail_cache_parse_deinit(struct mail *_mail, time_t received_date, (void)index_mail_parse_body_finish(mail, 0); } +static void index_mail_drop_recent_flag(struct index_mail *imail) +{ + const struct mail_index_header *hdr; + uint32_t first_recent_uid = imail->mail.mail.uid + 1; + + hdr = mail_index_get_header(imail->trans->trans_view); + if (hdr->first_recent_uid < first_recent_uid) { + mail_index_update_header(imail->trans->trans, + offsetof(struct mail_index_header, first_recent_uid), + &first_recent_uid, sizeof(first_recent_uid), FALSE); + } +} + void index_mail_update_flags(struct mail *mail, enum modify_type modify_type, enum mail_flags flags) { struct index_mail *imail = (struct index_mail *)mail; + if ((flags & MAIL_RECENT) == 0 && + index_mailbox_is_recent(imail->ibox, mail->uid)) + index_mail_drop_recent_flag(imail); + flags &= MAIL_FLAGS_NONRECENT | MAIL_INDEX_MAIL_FLAG_BACKEND; mail_index_update_flags(imail->trans->trans, mail->seq, modify_type, flags); -- 2.47.3