From 78c51110b152ae89503e6503deaf7413a5ac2c97 Mon Sep 17 00:00:00 2001 From: "Martin T. H. Sandsmark" Date: Wed, 26 Dec 2012 21:46:59 +0100 Subject: [PATCH] refactor out mode-applying into a separate method --- src/core/coreuserinputhandler.cpp | 90 +++++++++++++++---------------- src/core/coreuserinputhandler.h | 1 + 2 files changed, 43 insertions(+), 48 deletions(-) diff --git a/src/core/coreuserinputhandler.cpp b/src/core/coreuserinputhandler.cpp index 45c71f0e..b873b40f 100644 --- a/src/core/coreuserinputhandler.cpp +++ b/src/core/coreuserinputhandler.cpp @@ -226,34 +226,64 @@ void CoreUserInputHandler::handleDelkey(const BufferInfo &bufferInfo, const QStr #endif } +void CoreUserInputHandler::doMode(const BufferInfo &bufferInfo, const QChar& addOrRemove, const QChar& mode, QStringList nicks) +{ + QString m; + bool isNumber; + int maxModes = network()->support("MODES").toInt(&isNumber); + if (!isNumber || maxModes == 0) maxModes = 1; + + if (nicks.count() == 0) return; + + while (!nicks.isEmpty()) { + int amount = qMin(nicks.count(), maxModes); + QString m = addOrRemove; for(int i = 0; i < amount; i++) m += mode; + QStringList params; + params << bufferInfo.bufferName() << m; + for(int i = 0; i < amount; i++) params << nicks.takeFirst(); + emit putCmd("MODE", serverEncode(params)); + } +} + void CoreUserInputHandler::handleDeop(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); - QString m = "-"; for (int i = 0; i < nicks.count(); i++) m += 'o'; - QStringList params; - params << bufferInfo.bufferName() << m << nicks; - emit putCmd("MODE", serverEncode(params)); + doMode(bufferInfo, '-', 'o', nicks); } void CoreUserInputHandler::handleDehalfop(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); - QString m = "-"; for (int i = 0; i < nicks.count(); i++) m += 'h'; - QStringList params; - params << bufferInfo.bufferName() << m << nicks; - emit putCmd("MODE", serverEncode(params)); + doMode(bufferInfo, '-', 'h', nicks); } void CoreUserInputHandler::handleDevoice(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); - QString m = "-"; for (int i = 0; i < nicks.count(); i++) m += 'v'; - QStringList params; - params << bufferInfo.bufferName() << m << nicks; - emit putCmd("MODE", serverEncode(params)); + doMode(bufferInfo, '-', 'v', nicks); +} + +void CoreUserInputHandler::handleHalfop(const BufferInfo &bufferInfo, const QString &msg) +{ + QStringList nicks = msg.split(' ', QString::SkipEmptyParts); + doMode(bufferInfo, '+', 'h', nicks); +} + +void CoreUserInputHandler::handleOp(const BufferInfo &bufferInfo, const QString &msg) { + QStringList nicks; + if (msg == "*") { + const QList users = network()->ircChannel(bufferInfo.bufferName())->ircUsers(); + foreach(IrcUser *user, users) { + if (!network()->ircChannel(bufferInfo.bufferName())->userModes(user).contains("o")) + nicks.append(user->nick()); + } + } else { + nicks = msg.split(' ', QString::SkipEmptyParts); + } + doMode(bufferInfo, '+', 'o', nicks); } @@ -427,42 +457,6 @@ void CoreUserInputHandler::handleNotice(const BufferInfo &bufferInfo, const QStr } -void CoreUserInputHandler::handleHalfop(const BufferInfo &bufferInfo, const QString &msg) -{ - QStringList nicks = msg.split(' ', QString::SkipEmptyParts); - QString m = "+"; for (int i = 0; i < nicks.count(); i++) m += 'h'; - QStringList params; - params << bufferInfo.bufferName() << m << nicks; - emit putCmd("MODE", serverEncode(params)); -} - -void CoreUserInputHandler::handleOp(const BufferInfo &bufferInfo, const QString &msg) { - QStringList nicks; - if (msg == "*") { - const QList users = network()->ircChannel(bufferInfo.bufferName())->ircUsers(); - foreach(IrcUser *user, users) { - if (!network()->ircChannel(bufferInfo.bufferName())->userModes(user).contains("o")) - nicks.append(user->nick()); - } - } else { - nicks = msg.split(' ', QString::SkipEmptyParts); - } - if (nicks.count() == 0) return; - - bool isNumber; - int maxModes = network()->support("MODES").toInt(&isNumber); - if (!isNumber || maxModes == 0) maxModes = 1; - - while (!nicks.isEmpty()) { - int amount = qMin(nicks.count(), maxModes); - QString m = "+"; for(int i = 0; i < amount; i++) m += 'o'; - QStringList params; - params << bufferInfo.bufferName() << m; - for(int i = 0; i < amount; i++) params << nicks.takeFirst(); - emit putCmd("MODE", serverEncode(params)); - } -} - void CoreUserInputHandler::handleOper(const BufferInfo &bufferInfo, const QString &msg) { diff --git a/src/core/coreuserinputhandler.h b/src/core/coreuserinputhandler.h index 6f559c59..1375bd72 100644 --- a/src/core/coreuserinputhandler.h +++ b/src/core/coreuserinputhandler.h @@ -83,6 +83,7 @@ protected: void timerEvent(QTimerEvent *event); private: + void doMode(const BufferInfo& bufferInfo, const QChar& addOrRemove, const QChar& mode, QStringList nicks); void banOrUnban(const BufferInfo &bufferInfo, const QString &text, bool ban); void putPrivmsg(const QByteArray &target, const QByteArray &message, Cipher *cipher = 0); int lastParamOverrun(const QString &cmd, const QList ¶ms); -- 2.20.1