1 #include "messages/search/MessageFlagsPredicate.hpp"
2 
3 namespace chatterino {
4 
MessageFlagsPredicate(const QString & flags)5 MessageFlagsPredicate::MessageFlagsPredicate(const QString &flags)
6     : flags_()
7 {
8     // Check if any comma-seperated values were passed and transform those
9     for (const auto &flag : flags.split(',', QString::SkipEmptyParts))
10     {
11         if (flag == "deleted" || flag == "disabled")
12         {
13             this->flags_.set(MessageFlag::Disabled);
14         }
15         else if (flag == "sub" || flag == "subscription")
16         {
17             this->flags_.set(MessageFlag::Subscription);
18         }
19         else if (flag == "timeout" || flag == "ban")
20         {
21             this->flags_.set(MessageFlag::Timeout);
22         }
23         else if (flag == "highlighted")
24         {
25             this->flags_.set(MessageFlag::Highlighted);
26         }
27         else if (flag == "system")
28         {
29             this->flags_.set(MessageFlag::System);
30         }
31     }
32 }
33 
appliesTo(const Message & message)34 bool MessageFlagsPredicate::appliesTo(const Message &message)
35 {
36     // Exclude timeout messages from system flag when timeout flag isn't present
37     if (this->flags_.has(MessageFlag::System) &&
38         !this->flags_.has(MessageFlag::Timeout))
39         return message.flags.hasAny(flags_) &&
40                !message.flags.has(MessageFlag::Timeout);
41     return message.flags.hasAny(flags_);
42 }
43 
44 }  // namespace chatterino
45