/***************************************************************************
- * Copyright (C) 2005-09 by the Quassel Project *
+ * Copyright (C) 2005-2018 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#ifndef IGNORELISTMANAGER_H
#define IGNORELISTMANAGER_H
#include <QString>
+#include <QRegExp>
#include "message.h"
#include "syncableobject.h"
ScopeType scope;
QString scopeRule;
bool isActive;
+ QRegExp regEx;
IgnoreListItem() {}
IgnoreListItem(IgnoreType type_, const QString &ignoreRule_, bool isRegEx_, StrictnessType strictness_,
ScopeType scope_, const QString &scopeRule_, bool isActive_)
- : type(type_), ignoreRule(ignoreRule_), isRegEx(isRegEx_), strictness(strictness_), scope(scope_), scopeRule(scopeRule_), isActive(isActive_) {}
+ : type(type_), ignoreRule(ignoreRule_), isRegEx(isRegEx_), strictness(strictness_), scope(scope_), scopeRule(scopeRule_), isActive(isActive_), regEx(ignoreRule_) {
+ regEx.setCaseSensitivity(Qt::CaseInsensitive);
+ if (!isRegEx_) {
+ regEx.setPatternSyntax(QRegExp::Wildcard);
+ }
+ }
bool operator!=(const IgnoreListItem &other)
{
return (type != other.type ||
protected:
void setIgnoreList(const QList<IgnoreListItem> &ignoreList) { _ignoreList = ignoreList; }
- bool scopeMatch(const QString &scopeRule, const QString &string) const; // scopeRule is a ';'-separated list, string is a network/channel-name
+
+ //! Check if a scope rule matches a string
+ /** Checks that the string does NOT match ANY inverted rules (prefixed by '!'), then checks that
+ * it matches AT LEAST one normal (non-inverted) rule.
+ *
+ * If only inverted rules are specified, it'll match so long as the string does not match any
+ * inverted rules (implicit wildcard).
+ *
+ * \param scopeRule A ';'-separated list of wildcard expressions, prefix of '!' inverts subrule
+ * \param string String to test, e.g. network/channel name
+ * \return True if matches, otherwise false
+ */
+ bool scopeMatch(const QString &scopeRule, const QString &string) const;
StrictnessType _match(const QString &msgContents, const QString &msgSender, Message::Type msgType, const QString &network, const QString &bufferName);