Yearly bump
[quassel.git] / src / client / clientignorelistmanager.cpp
index f042969..02a4e23 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-09 by the Quassel Project                          *
+ *   Copyright (C) 2005-2013 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.         *
  ***************************************************************************/
 
 #include "clientignorelistmanager.h"
 
+#include <QRegExp>
+
+INIT_SYNCABLE_OBJECT(ClientIgnoreListManager)
+
 ClientIgnoreListManager::ClientIgnoreListManager(QObject *parent)
     : IgnoreListManager(parent)
 {
-  connect(this, SIGNAL(updated(const QVariantMap&)), this, SLOT(ignoreListUpdated(const QVariantMap&)));
+    connect(this, SIGNAL(updatedRemotely()), SIGNAL(ignoreListChanged()));
 }
 
-void ClientIgnoreListManager::ignoreListUpdated(const QVariantMap &newMap) {
-  if(newMap != initIgnoreList())
-    emit ignoreListChanged();
+
+bool ClientIgnoreListManager::pureMatch(const IgnoreListItem &item, const QString &string) const
+{
+    QRegExp ruleRx = QRegExp(item.ignoreRule);
+    ruleRx.setCaseSensitivity(Qt::CaseInsensitive);
+    if (!item.isRegEx)
+        ruleRx.setPatternSyntax(QRegExp::Wildcard);
+
+    if ((!item.isRegEx && ruleRx.exactMatch(string)) ||
+        (item.isRegEx && ruleRx.indexIn(string) != -1))
+        return true;
+    return false;
+}
+
+
+QMap<QString, bool> ClientIgnoreListManager::matchingRulesForHostmask(const QString &hostmask, const QString &network, const QString &channel) const
+{
+    QMap<QString, bool> result;
+    foreach(IgnoreListItem item, ignoreList()) {
+        if (item.type == SenderIgnore && pureMatch(item, hostmask)
+            && ((network.isEmpty() && channel.isEmpty()) || item.scope == GlobalScope || (item.scope == NetworkScope && scopeMatch(item.scopeRule, network))
+                || (item.scope == ChannelScope && scopeMatch(item.scopeRule, channel)))) {
+            result[item.ignoreRule] = item.isActive;
+//      qDebug() << "matchingRulesForHostmask found: " << item.ignoreRule << "is active: " << item.isActive;
+        }
+    }
+    return result;
 }