Implement /ignore functionality
authorJanne Koschinski <janne@kuschku.de>
Thu, 21 Dec 2017 22:22:52 +0000 (23:22 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 27 Feb 2018 22:15:19 +0000 (23:15 +0100)
- If /ignore <nickname> is used, a new rule for nickname!*@* is added,
  with dynamic strictness, limited to the current network.
- If /ignore <rule> (where rule contains ! or @) is used, that rule is
  added, with dynamic strictness, limited to the current network.
- If /ignore with no parameters is used, the ignore list is shown

src/client/client.h
src/client/clientuserinputhandler.cpp
src/client/clientuserinputhandler.h
src/qtui/mainwin.cpp

index 89ef829..302689e 100644 (file)
@@ -163,6 +163,7 @@ signals:
     void requestNetworkStates();
 
     void showConfigWizard(const QVariantMap &coredata);
     void requestNetworkStates();
 
     void showConfigWizard(const QVariantMap &coredata);
+    void showIgnoreList(QString ignoreRule);
 
     void connected();
     void disconnected();
 
     void connected();
     void disconnected();
index 6619931..bddd5c7 100644 (file)
 
 #include "clientuserinputhandler.h"
 
 
 #include "clientuserinputhandler.h"
 
+#include "bufferinfo.h"
 #include "buffermodel.h"
 #include "client.h"
 #include "clientaliasmanager.h"
 #include "buffermodel.h"
 #include "client.h"
 #include "clientaliasmanager.h"
+#include "clientbufferviewconfig.h"
+#include "clientbufferviewmanager.h"
+#include "clientignorelistmanager.h"
 #include "clientsettings.h"
 #include "execwrapper.h"
 #include "clientsettings.h"
 #include "execwrapper.h"
+#include "ignorelistmanager.h"
 #include "ircuser.h"
 #include "ircuser.h"
+#include "messagemodel.h"
 #include "network.h"
 #include "types.h"
 #include "network.h"
 #include "types.h"
-#include "bufferinfo.h"
-#include "clientbufferviewconfig.h"
-#include "clientbufferviewmanager.h"
-#include "messagemodel.h"
 
 #include <QDateTime>
 
 
 #include <QDateTime>
 
@@ -116,6 +118,29 @@ void ClientUserInputHandler::handleQuery(const BufferInfo &bufferInfo, const QSt
 }
 
 
 }
 
 
+void ClientUserInputHandler::handleIgnore(const BufferInfo &bufferInfo, const QString &text)
+{
+    if (text.isEmpty()) {
+        emit Client::instance()->showIgnoreList("");
+        return;
+    }
+    // If rule contains no ! or @, we assume it is just a nickname, and turn it into an ignore rule for that nick
+    QString rule = (text.contains('!') || text.contains('@')) ? text : text + "!*@*";
+
+    Client::ignoreListManager()->requestAddIgnoreListItem(
+            IgnoreListManager::IgnoreType::SenderIgnore,
+            rule,
+            false,
+            // Use a dynamic ignore rule, for reversibility
+            IgnoreListManager::StrictnessType::SoftStrictness,
+            // Use current network as scope
+            IgnoreListManager::ScopeType::NetworkScope,
+            Client::network(bufferInfo.networkId())->networkName(),
+            true
+    );
+}
+
+
 void ClientUserInputHandler::switchBuffer(const NetworkId &networkId, const QString &bufferName)
 {
     BufferId newBufId = Client::networkModel()->bufferId(networkId, bufferName);
 void ClientUserInputHandler::switchBuffer(const NetworkId &networkId, const QString &bufferName)
 {
     BufferId newBufId = Client::networkModel()->bufferId(networkId, bufferName);
index 5fbebd1..391a94a 100644 (file)
@@ -45,6 +45,7 @@ private slots:
     void handleExec(const BufferInfo &bufferInfo, const QString &execString);
     void handleJoin(const BufferInfo &bufferInfo, const QString &text);
     void handleQuery(const BufferInfo &bufferInfo, const QString &text);
     void handleExec(const BufferInfo &bufferInfo, const QString &execString);
     void handleJoin(const BufferInfo &bufferInfo, const QString &text);
     void handleQuery(const BufferInfo &bufferInfo, const QString &text);
+    void handleIgnore(const BufferInfo &bufferInfo, const QString &text);
     void defaultHandler(const QString &cmd, const BufferInfo &bufferInfo, const QString &text);
 
 private:
     void defaultHandler(const QString &cmd, const BufferInfo &bufferInfo, const QString &text);
 
 private:
index d3687c8..636f213 100644 (file)
@@ -204,6 +204,7 @@ void MainWin::init()
         SLOT(messagesInserted(const QModelIndex &, int, int)));
     connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId)));
     connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString)));
         SLOT(messagesInserted(const QModelIndex &, int, int)));
     connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId)));
     connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString)));
+    connect(Client::instance(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString)));
 
     connect(Client::coreConnection(), SIGNAL(startCoreSetup(QVariantList, QVariantList)), SLOT(showCoreConfigWizard(QVariantList, QVariantList)));
     connect(Client::coreConnection(), SIGNAL(connectionErrorPopup(QString)), SLOT(handleCoreConnectionError(QString)));
 
     connect(Client::coreConnection(), SIGNAL(startCoreSetup(QVariantList, QVariantList)), SLOT(showCoreConfigWizard(QVariantList, QVariantList)));
     connect(Client::coreConnection(), SIGNAL(connectionErrorPopup(QString)), SLOT(handleCoreConnectionError(QString)));