flags: add flags_mail_dir_file util

And some whitespace cleanup
This commit is contained in:
Dirk-Jan C. Binnema 2023-09-19 22:23:47 +03:00
parent 472f69beb2
commit ae87be6a48
1 changed files with 60 additions and 41 deletions

View File

@ -114,48 +114,48 @@ struct MessageFlagInfo {
* Array of all flag information. * Array of all flag information.
*/ */
constexpr std::array<MessageFlagInfo, 14> AllMessageFlagInfos = {{ constexpr std::array<MessageFlagInfo, 14> AllMessageFlagInfos = {{
MessageFlagInfo{Flags::Draft, 'D', "draft", MessageFlagCategory::Mailfile, MessageFlagInfo{Flags::Draft, 'D', "draft", MessageFlagCategory::Mailfile,
"Draft (in progress)" "Draft (in progress)"
}, },
MessageFlagInfo{Flags::Flagged, 'F', "flagged", MessageFlagCategory::Mailfile, MessageFlagInfo{Flags::Flagged, 'F', "flagged", MessageFlagCategory::Mailfile,
"User-flagged" "User-flagged"
}, },
MessageFlagInfo{Flags::Passed, 'P', "passed", MessageFlagCategory::Mailfile, MessageFlagInfo{Flags::Passed, 'P', "passed", MessageFlagCategory::Mailfile,
"Forwarded message" "Forwarded message"
}, },
MessageFlagInfo{Flags::Replied, 'R', "replied", MessageFlagCategory::Mailfile, MessageFlagInfo{Flags::Replied, 'R', "replied", MessageFlagCategory::Mailfile,
"Replied-to" "Replied-to"
}, },
MessageFlagInfo{Flags::Seen, 'S', "seen", MessageFlagCategory::Mailfile, MessageFlagInfo{Flags::Seen, 'S', "seen", MessageFlagCategory::Mailfile,
"Viewed at least once" "Viewed at least once"
}, },
MessageFlagInfo{Flags::Trashed, 'T', "trashed", MessageFlagCategory::Mailfile, MessageFlagInfo{Flags::Trashed, 'T', "trashed", MessageFlagCategory::Mailfile,
"Marked for deletion" "Marked for deletion"
}, },
MessageFlagInfo{Flags::New, 'N', "new", MessageFlagCategory::Maildir, MessageFlagInfo{Flags::New, 'N', "new", MessageFlagCategory::Maildir,
"New message" "New message"
}, },
MessageFlagInfo{Flags::Signed, 'z', "signed", MessageFlagCategory::Content, MessageFlagInfo{Flags::Signed, 'z', "signed", MessageFlagCategory::Content,
"Cryptographically signed" "Cryptographically signed"
}, },
MessageFlagInfo{Flags::Encrypted, 'x', "encrypted", MessageFlagCategory::Content, MessageFlagInfo{Flags::Encrypted, 'x', "encrypted", MessageFlagCategory::Content,
"Encrypted" "Encrypted"
}, },
MessageFlagInfo{Flags::HasAttachment,'a', "attach", MessageFlagCategory::Content, MessageFlagInfo{Flags::HasAttachment,'a', "attach", MessageFlagCategory::Content,
"Has at least one attachment" "Has at least one attachment"
}, },
MessageFlagInfo{Flags::Unread, 'u', "unread", MessageFlagCategory::Pseudo, MessageFlagInfo{Flags::Unread, 'u', "unread", MessageFlagCategory::Pseudo,
"New or not seen message" "New or not seen message"
}, },
MessageFlagInfo{Flags::MailingList, 'l', "list", MessageFlagCategory::Content, MessageFlagInfo{Flags::MailingList, 'l', "list", MessageFlagCategory::Content,
"Mailing list message" "Mailing list message"
}, },
MessageFlagInfo{Flags::Personal, 'q', "personal", MessageFlagCategory::Content, MessageFlagInfo{Flags::Personal, 'q', "personal", MessageFlagCategory::Content,
"Personal message" "Personal message"
}, },
MessageFlagInfo{Flags::Calendar, 'c', "calendar", MessageFlagCategory::Content, MessageFlagInfo{Flags::Calendar, 'c', "calendar", MessageFlagCategory::Content,
"Calendar invitation" "Calendar invitation"
}, },
}}; }};
@ -348,7 +348,7 @@ flags_from_expr(std::string_view expr,
* @param flags flags * @param flags flags
* @param cat category * @param cat category
* *
* @return filter flags * @return filtered flags
*/ */
constexpr Flags constexpr Flags
flags_filter(Flags flags, MessageFlagCategory cat) flags_filter(Flags flags, MessageFlagCategory cat)
@ -359,6 +359,25 @@ flags_filter(Flags flags, MessageFlagCategory cat)
return flags; return flags;
} }
/**
* Filter out any flags which are _not_ Maildir / Mailfile flags
*
* @param flags flags
*
* @return filtered flags
*/
constexpr Flags
flags_mail_dir_file(Flags flags)
{
for (auto&& info : AllMessageFlagInfos)
if (info.category != MessageFlagCategory::Maildir &&
info.category != MessageFlagCategory::Mailfile)
flags &= ~info.flag;
return flags;
}
/** /**
* Return flags, where flags = new_flags but with unmutable_flag in the * Return flags, where flags = new_flags but with unmutable_flag in the