/* * Copyright (c) 2012 Maciej Niedzielski * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ /* * Copyright (c) 2014-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include namespace Swift { class HighlightRule { public: HighlightRule(); enum MessageType { ChatMessage, MUCMessage }; bool isMatch(const std::string& body, const std::string& sender, const std::string& nick, MessageType) const; const HighlightAction& getAction() const { return action_; } HighlightAction& getAction() { return action_; } const std::vector& getSenders() const { return senders_; } void setSenders(const std::vector&); const std::vector& getSenderRegex() const { return senderRegex_; } const std::vector& getKeywords() const { return keywords_; } void setKeywords(const std::vector&); std::vector getKeywordRegex(const std::string& nick) const; bool getNickIsKeyword() const { return nickIsKeyword_; } void setNickIsKeyword(bool); bool getMatchCase() const { return matchCase_; } void setMatchCase(bool); bool getMatchWholeWords() const { return matchWholeWords_; } void setMatchWholeWords(bool); bool getMatchChat() const { return matchChat_; } void setMatchChat(bool); bool getMatchMUC() const { return matchMUC_; } void setMatchMUC(bool); bool isEmpty() const; private: friend class boost::serialization::access; template void serialize(Archive & ar, const unsigned int version); static std::string boolToString(bool); static bool boolFromString(const std::string&); std::vector senders_; std::vector keywords_; bool nickIsKeyword_; mutable std::vector senderRegex_; mutable std::vector keywordRegex_; void updateRegex() const; boost::regex regexFromString(const std::string&) const; bool matchCase_; bool matchWholeWords_; bool matchChat_; bool matchMUC_; HighlightAction action_; }; bool operator ==(HighlightRule const& a, HighlightRule const& b); template void HighlightRule::serialize(Archive& ar, const unsigned int /*version*/) { ar & senders_; ar & keywords_; ar & nickIsKeyword_; ar & matchChat_; ar & matchMUC_; ar & matchCase_; ar & matchWholeWords_; ar & action_; updateRegex(); } }