X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fhighlightrulemanager.h;h=addbbf66f5a41ed33292441689219814988e66e6;hb=d4b81a6d777de45611034b26bd89973d19e60c96;hp=cabf0d25e82c1718d84d867c8b50af363cce1fce;hpb=74226102118400b228618f7373137a4a01e7d85f;p=quassel.git diff --git a/src/common/highlightrulemanager.h b/src/common/highlightrulemanager.h index cabf0d25..addbbf66 100644 --- a/src/common/highlightrulemanager.h +++ b/src/common/highlightrulemanager.h @@ -20,6 +20,8 @@ #pragma once +#include "common-export.h" + #include #include @@ -29,12 +31,13 @@ #include "expressionmatch.h" #include "message.h" +#include "nickhighlightmatcher.h" #include "syncableobject.h" -class HighlightRuleManager : public SyncableObject +class COMMON_EXPORT HighlightRuleManager : public SyncableObject { - SYNCABLE_OBJECT Q_OBJECT + SYNCABLE_OBJECT Q_PROPERTY(int highlightNick READ highlightNick WRITE setHighlightNick) Q_PROPERTY(bool nicksCaseSensitive READ nicksCaseSensitive WRITE setNicksCaseSensitive) @@ -52,7 +55,7 @@ public: /** * Individual highlight rule */ - class HighlightRule + class COMMON_EXPORT HighlightRule { public: /** @@ -364,7 +367,10 @@ public slots: inline void setHighlightNick(int highlightNick) { _highlightNick = static_cast(highlightNick); - _cacheNickConfigInvalid = true; + // Convert from HighlightRuleManager::HighlightNickType to + // NickHighlightMatcher::HighlightNickType + _nickMatcher.setHighlightMode( + static_cast(_highlightNick)); } virtual inline void requestSetNicksCaseSensitive(bool nicksCaseSensitive) @@ -374,49 +380,42 @@ public slots: inline void setNicksCaseSensitive(bool nicksCaseSensitive) { _nicksCaseSensitive = nicksCaseSensitive; - _cacheNickConfigInvalid = true; + // Update nickname matcher, too + _nickMatcher.setCaseSensitive(nicksCaseSensitive); + } + + /** + * Network removed from system + * + * Handles cleaning up cache from stale networks. + * + * @param id Network ID of removed network + */ + inline void networkRemoved(NetworkId id) { + // Clean up nickname matching cache + _nickMatcher.removeNetwork(id); } protected: void setHighlightRuleList(const QList &HighlightRuleList) { _highlightRuleList = HighlightRuleList; } - bool match(const QString &msgContents, + bool match(const NetworkId &netId, + const QString &msgContents, const QString &msgSender, Message::Type msgType, Message::Flags msgFlags, const QString &bufferName, const QString ¤tNick, - const QStringList identityNicks); + const QStringList &identityNicks); signals: void ruleAdded(QString name, bool isRegEx, bool isCaseSensitive, bool isEnabled, bool isInverse, QString sender, QString chanName); private: - /** - * Update internal cache of expression matching if needed - */ - void determineNickExpressions(const QString ¤tNick, - const QStringList identityNicks) const; + HighlightRuleList _highlightRuleList = {}; ///< Custom highlight rule list + NickHighlightMatcher _nickMatcher = {}; ///< Nickname highlight matcher - /** - * Check if nickname matching cache is invalid - * @param currentNick - * @param identityNicks - * @return - */ - bool cacheNickInvalid(const QString ¤tNick, const QStringList identityNicks) const { - if (_cacheNickConfigInvalid) return true; - if (_cachedNickCurrent != currentNick) return true; - if (_cachedIdentityNicks != identityNicks) return true; - } - - HighlightRuleList _highlightRuleList; + /// Nickname highlighting mode HighlightNickType _highlightNick = HighlightNickType::CurrentNick; - bool _nicksCaseSensitive = false; - - // These represent internal cache and should be safe to mutate in 'const' functions - mutable bool _cacheNickConfigInvalid = true; ///< If true, nick match cache needs redone - mutable QString _cachedNickCurrent = {}; ///< Last cached current nick - mutable QStringList _cachedIdentityNicks = {}; ///< Last cached identity nicks - mutable ExpressionMatch _cachedNickMatcher = {}; ///< Expression match cache for nicks + bool _nicksCaseSensitive = false; ///< If true, match nicknames with exact case };