X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fhighlightrulemanager.h;h=05eb7470bea80ac50e4e252423c193f0b68c76e4;hb=a65f42197839da536975b3e2858eedcef420035f;hp=cabf0d25e82c1718d84d867c8b50af363cce1fce;hpb=74226102118400b228618f7373137a4a01e7d85f;p=quassel.git diff --git a/src/common/highlightrulemanager.h b/src/common/highlightrulemanager.h index cabf0d25..05eb7470 100644 --- a/src/common/highlightrulemanager.h +++ b/src/common/highlightrulemanager.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -29,6 +29,7 @@ #include "expressionmatch.h" #include "message.h" +#include "nickhighlightmatcher.h" #include "syncableobject.h" class HighlightRuleManager : public SyncableObject @@ -364,7 +365,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 +378,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 };