From: Sebastian Goth Date: Fri, 17 Feb 2012 00:07:24 +0000 (+0100) Subject: Add halfop support X-Git-Tag: 0.9-beta1~66 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=c351c94e52a01571c34a18ddb5947b9e1f771d8c;ds=sidebyside Add halfop support Provides /HALFOP, /DEHALFOP and context menus. Reuses "voiced" icons. Fixes #1138 --- diff --git a/src/core/coreuserinputhandler.cpp b/src/core/coreuserinputhandler.cpp index f2c37eeb..0f0be89a 100644 --- a/src/core/coreuserinputhandler.cpp +++ b/src/core/coreuserinputhandler.cpp @@ -213,6 +213,14 @@ void CoreUserInputHandler::handleDeop(const BufferInfo &bufferInfo, const QStrin emit putCmd("MODE", serverEncode(params)); } +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)); +} + 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'; @@ -370,6 +378,14 @@ void CoreUserInputHandler::handleNotice(const BufferInfo &bufferInfo, const QStr emit displayMsg(Message::Notice, bufferName, payload, network()->myNick(), Message::Self); } +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 = msg.split(' ', QString::SkipEmptyParts); QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'o'; diff --git a/src/core/coreuserinputhandler.h b/src/core/coreuserinputhandler.h index 177c35b0..9db419b6 100644 --- a/src/core/coreuserinputhandler.h +++ b/src/core/coreuserinputhandler.h @@ -43,6 +43,7 @@ public slots: void handleCtcp(const BufferInfo &bufferInfo, const QString &text); void handleDelkey(const BufferInfo &bufferInfo, const QString &text); void handleDeop(const BufferInfo &bufferInfo, const QString &text); + void handleDehalfop(const BufferInfo &bufferInfo, const QString &text); void handleDevoice(const BufferInfo &bufferInfo, const QString &text); void handleInvite(const BufferInfo &bufferInfo, const QString &text); void handleJoin(const BufferInfo &bufferInfo, const QString &text); @@ -56,6 +57,7 @@ public slots: void handleNotice(const BufferInfo &bufferInfo, const QString &text); void handleOper(const BufferInfo &bufferInfo, const QString &text); void handleOp(const BufferInfo &bufferInfo, const QString &text); + void handleHalfop(const BufferInfo &bufferInfo, const QString &text); void handlePart(const BufferInfo &bufferInfo, const QString &text); void handlePing(const BufferInfo &bufferInfo, const QString &text); void handleQuery(const BufferInfo &bufferInfo, const QString &text); diff --git a/src/uisupport/contextmenuactionprovider.cpp b/src/uisupport/contextmenuactionprovider.cpp index b10b106a..02542332 100644 --- a/src/uisupport/contextmenuactionprovider.cpp +++ b/src/uisupport/contextmenuactionprovider.cpp @@ -77,6 +77,8 @@ ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkM registerAction(NickOp, SmallIcon("irc-operator"), tr("Give Operator Status")); registerAction(NickDeop, SmallIcon("irc-remove-operator"), tr("Take Operator Status")); + registerAction(NickHalfop, SmallIcon("irc-voice"), tr("Give Half-Operator Status")); + registerAction(NickDehalfop, SmallIcon("irc-unvoice"), tr("Take Half-Operator Status")); registerAction(NickVoice, SmallIcon("irc-voice"), tr("Give Voice")); registerAction(NickDevoice, SmallIcon("irc-unvoice"), tr("Take Voice")); registerAction(NickKick, SmallIcon("im-kick-user"), tr("Kick From Channel")); @@ -113,6 +115,9 @@ ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkM QMenu *nickModeMenu = new QMenu(); nickModeMenu->addAction(action(NickOp)); nickModeMenu->addAction(action(NickDeop)); + // this is where the halfops will be placed if available + nickModeMenu->addAction(action(NickHalfop)); + nickModeMenu->addAction(action(NickDehalfop)); nickModeMenu->addAction(action(NickVoice)); nickModeMenu->addAction(action(NickDevoice)); nickModeMenu->addSeparator(); @@ -318,6 +323,16 @@ void ContextMenuActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); if(ircUser) { + Network *network = ircUser->network(); + // only show entries for usermode +h if server supports it + if(network && network->prefixModes().contains('h')) { + action(NickHalfop)->setVisible(true); + action(NickDehalfop)->setVisible(true); + } + else { + action(NickHalfop)->setVisible(false); + action(NickDehalfop)->setVisible(false); + } // ignoreliststuff QString bufferName; BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); diff --git a/src/uisupport/networkmodelcontroller.cpp b/src/uisupport/networkmodelcontroller.cpp index 020aaed4..ac2ab660 100644 --- a/src/uisupport/networkmodelcontroller.cpp +++ b/src/uisupport/networkmodelcontroller.cpp @@ -402,6 +402,12 @@ void NetworkModelController::handleNickAction(ActionType type, QAction *action) case NickDeop: Client::userInput(bufferInfo, QString("/DEOP %1").arg(nick)); break; + case NickHalfop: + Client::userInput(bufferInfo, QString("/HALFOP %1").arg(nick)); + break; + case NickDehalfop: + Client::userInput(bufferInfo, QString("/DEHALFOP %1").arg(nick)); + break; case NickVoice: Client::userInput(bufferInfo, QString("/VOICE %1").arg(nick)); break; diff --git a/src/uisupport/networkmodelcontroller.h b/src/uisupport/networkmodelcontroller.h index 4db935fc..ec27c878 100644 --- a/src/uisupport/networkmodelcontroller.h +++ b/src/uisupport/networkmodelcontroller.h @@ -85,20 +85,22 @@ public: NickDeop = 0x090000, NickVoice = 0x0a0000, NickDevoice = 0x0b0000, - NickKick = 0x0c0000, - NickBan = 0x0d0000, - NickKickBan = 0x0e0000, - NickIgnoreUser = 0x0f0000, - NickIgnoreHost = 0x100000, - NickIgnoreDomain = 0x200000, - NickIgnoreCustom = 0x300000, - // The next 5 types have stay together + NickHalfop = 0x0c0000, + NickDehalfop = 0x0d0000, + NickKick = 0x0e0000, + NickBan = 0x0f0000, + NickKickBan = 0x100000, + NickIgnoreUser = 0x200000, + NickIgnoreHost = 0x300000, + NickIgnoreDomain = 0x400000, + NickIgnoreCustom = 0x500000, + // The next 5 types have to stay together // Don't change without reading ContextMenuActionProvider::addIgnoreMenu! - NickIgnoreToggleEnabled0 = 0x400000, - NickIgnoreToggleEnabled1 = 0x500000, - NickIgnoreToggleEnabled2 = 0x600000, - NickIgnoreToggleEnabled3 = 0x700000, - NickIgnoreToggleEnabled4 = 0x800000, + NickIgnoreToggleEnabled0 = 0x600000, + NickIgnoreToggleEnabled1 = 0x700000, + NickIgnoreToggleEnabled2 = 0x800000, + NickIgnoreToggleEnabled3 = 0x900000, + NickIgnoreToggleEnabled4 = 0xa00000, // Actions that are handled externally // These emit a signal to the action requester, rather than being handled here