X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.cpp;h=f622eea0e0f3375705eeadc6da1b7bc0b8ceadae;hp=f049fa07c55b181bceedeb9cb72b5d3d3683080f;hb=45a0d954542db252ceb62b61243ee5c2253383de;hpb=dccbef488a2299cf08146cdfc11933a8fe28a387 diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index f049fa07..f622eea0 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -268,16 +268,21 @@ void CoreNetwork::userInput(BufferInfo buf, QString msg) } -void CoreNetwork::putRawLine(QByteArray s) +void CoreNetwork::putRawLine(const QByteArray s, const bool prepend) { - if (_tokenBucket > 0) + if (_tokenBucket > 0) { writeToSocket(s); - else - _msgQueue.append(s); + } else { + if (prepend) { + _msgQueue.prepend(s); + } else { + _msgQueue.append(s); + } + } } -void CoreNetwork::putCmd(const QString &cmd, const QList ¶ms, const QByteArray &prefix) +void CoreNetwork::putCmd(const QString &cmd, const QList ¶ms, const QByteArray &prefix, const bool prepend) { QByteArray msg; @@ -294,16 +299,16 @@ void CoreNetwork::putCmd(const QString &cmd, const QList ¶ms, co msg += params[i]; } - putRawLine(msg); + putRawLine(msg, prepend); } -void CoreNetwork::putCmd(const QString &cmd, const QList> ¶ms, const QByteArray &prefix) +void CoreNetwork::putCmd(const QString &cmd, const QList> ¶ms, const QByteArray &prefix, const bool prependAll) { QListIterator> i(params); while (i.hasNext()) { QList msg = i.next(); - putCmd(cmd, msg, prefix); + putCmd(cmd, msg, prefix, prependAll); } } @@ -1080,10 +1085,15 @@ void CoreNetwork::sendAutoWho() qDebug() << "Skipping who polling of unknown channel or nick" << chanOrNick; continue; } - // TODO Use WHO extended to poll away users and/or user accounts - // If a server supports it, supports("WHOX") will be true - // See: http://faerion.sourceforge.net/doc/irc/whox.var and HexChat - putRawLine("WHO " + serverEncode(chanOrNick)); + if (supports("WHOX")) { + // Use WHO extended to poll away users and/or user accounts + // See http://faerion.sourceforge.net/doc/irc/whox.var + // And https://github.com/hexchat/hexchat/blob/c874a9525c9b66f1d5ddcf6c4107d046eba7e2c5/src/common/proto-irc.c#L750 + putRawLine(serverEncode(QString("WHO %1 %%chtsunfra,%2") + .arg(serverEncode(chanOrNick), QString::number(IrcCap::ACCOUNT_NOTIFY_WHOX_NUM)))); + } else { + putRawLine(serverEncode(QString("WHO %1").arg(chanOrNick))); + } break; }