From 1d3902f7006b2585479561d99e794285471a0329 Mon Sep 17 00:00:00 2001 From: Alexander von Renteln Date: Mon, 14 Apr 2008 14:43:37 +0000 Subject: [PATCH 1/1] ban-handler implemented (now also available in the context menu) --- src/core/userinputhandler.cpp | 41 ++++++++++++++++++++++++++++++----- src/uisupport/nickview.cpp | 7 +++--- version.inc | 2 +- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index 679eb987..5b5eb53a 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -24,6 +24,7 @@ #include "networkconnection.h" #include "network.h" #include "ctcphandler.h" +#include "ircuser.h" #include @@ -58,13 +59,41 @@ void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &m } void UserInputHandler::handleBan(const BufferInfo &bufferInfo, const QString &msg) { - if(bufferInfo.type() != BufferInfo::ChannelBuffer) + QString banChannel; + QString banUser; + + QStringList params = msg.split(" "); + + if(!params.isEmpty() && isChannelName(params[0])) { + banChannel = params.takeFirst(); + } else if(bufferInfo.type() == BufferInfo::ChannelBuffer) { + banChannel = bufferInfo.bufferName(); + } else { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: channel unknown in command: /BAN %1").arg(msg)); return; - - //TODO: find suitable default hostmask if msg gives only nickname - // Example: MODE &oulu +b *!*@* - QByteArray banMsg = serverEncode(bufferInfo.bufferName()) + " +b " + channelEncode(bufferInfo.bufferName(), msg); - emit putCmd("MODE", banMsg); + } + + if(!params.isEmpty() && !params.contains("!") && network()->ircUser(params[0])) { + IrcUser *ircuser = network()->ircUser(params[0]); + // generalizedHost changes to *!ident@*.sld.tld. + QString generalizedHost = ircuser->host(); + if(generalizedHost.isEmpty()) { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: host unknown in command: /BAN %1").arg(msg)); + return; + } + + if(generalizedHost.lastIndexOf(".") != -1 && generalizedHost.lastIndexOf(".", generalizedHost.lastIndexOf(".")-1) != -1) { + int secondLastPeriodPosition = generalizedHost.lastIndexOf(".", generalizedHost.lastIndexOf(".")-1); + generalizedHost.replace(0, secondLastPeriodPosition, "*"); + } + banUser = QString("*!%1@%2").arg(ircuser->user()).arg(generalizedHost); + } else { + banUser = params.join(" "); + } + + QString banMsg = QString("MODE %1 +b %2").arg(banChannel).arg(banUser); + qDebug() << banMsg; + emit putRawLine(serverEncode(banMsg)); } void UserInputHandler::handleCtcp(const BufferInfo &bufferInfo, const QString &msg) { diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index 71bee86c..5470d69f 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -124,10 +124,9 @@ void NickView::showContextMenu(const QPoint & pos ) { QAction *deVoiceAction = modeMenu->addAction(tr("Devoice %1").arg(nick)); QMenu *kickBanMenu = nickContextMenu.addMenu(tr("Kick/Ban")); - //TODO: add kick message from network identity (kick reason) QAction *kickAction = kickBanMenu->addAction(tr("Kick %1").arg(nick)); + QAction *banAction = kickBanMenu->addAction(tr("Ban %1").arg(nick)); QAction *kickBanAction = kickBanMenu->addAction(tr("Kickban %1").arg(nick)); - kickBanMenu->setEnabled(false); QAction *ignoreAction = nickContextMenu.addAction(tr("Ignore")); ignoreAction->setEnabled(false); @@ -152,7 +151,9 @@ void NickView::showContextMenu(const QPoint & pos ) { else if(action == deVoiceAction) { executeCommand(bufferInfo, QString("/DEVOICE %1").arg(nick)); } else if(action == kickAction) { executeCommand(bufferInfo, QString("/KICK %1").arg(nick)); } - else if(action == kickBanAction) { executeCommand(bufferInfo, QString("/KICKBAN %1").arg(nick)); } + else if(action == banAction) { executeCommand(bufferInfo, QString("/BAN %1").arg(nick)); } + else if(action == kickBanAction) { executeCommand(bufferInfo, QString("/KICK %1").arg(nick)); + executeCommand(bufferInfo, QString("/BAN %1").arg(nick)); } else if(action == queryAction) { executeCommand(bufferInfo, QString("/QUERY %1").arg(nick)); } } diff --git a/version.inc b/version.inc index 59bfcdd2..69bacaed 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-beta1-pre"; quasselDate = "2008-04-14"; - quasselBuild = 739; + quasselBuild = 740; //! Minimum client build number the core needs clientBuildNeeded = 731; -- 2.20.1