X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fnetworkconnection.cpp;h=3799e03de8cf59e67501d947dc96bbb9d3363624;hb=3361bcc5945293951a62ebd2fb2a21f3b90bd115;hp=ed1a72b3d1e3f64c5e8df2b0abea3a497eaa8544;hpb=6bff16ce4afeea153ffaf3d1916b6ba977853a27;p=quassel.git diff --git a/src/core/networkconnection.cpp b/src/core/networkconnection.cpp index ed1a72b3..3799e03d 100644 --- a/src/core/networkconnection.cpp +++ b/src/core/networkconnection.cpp @@ -27,6 +27,7 @@ #include "core.h" #include "coresession.h" +#include "ircchannel.h" #include "ircuser.h" #include "network.h" #include "identity.h" @@ -109,12 +110,14 @@ CtcpHandler *NetworkConnection::ctcpHandler() const { } QString NetworkConnection::serverDecode(const QByteArray &string) const { - return network()->decodeString(string); + return network()->decodeServerString(string); } -QString NetworkConnection::bufferDecode(const QString &bufferName, const QByteArray &string) const { - Q_UNUSED(bufferName); - // TODO: Implement buffer-specific encodings +QString NetworkConnection::channelDecode(const QString &bufferName, const QByteArray &string) const { + if(!bufferName.isEmpty()) { + IrcChannel *channel = network()->ircChannel(bufferName); + if(channel) return channel->decodeString(string); + } return network()->decodeString(string); } @@ -125,12 +128,14 @@ QString NetworkConnection::userDecode(const QString &userNick, const QByteArray } QByteArray NetworkConnection::serverEncode(const QString &string) const { - return network()->encodeString(string); + return network()->encodeServerString(string); } -QByteArray NetworkConnection::bufferEncode(const QString &bufferName, const QString &string) const { - Q_UNUSED(bufferName); - // TODO: Implement buffer-specific encodings +QByteArray NetworkConnection::channelEncode(const QString &bufferName, const QString &string) const { + if(!bufferName.isEmpty()) { + IrcChannel *channel = network()->ircChannel(bufferName); + if(channel) return channel->encodeString(string); + } return network()->encodeString(string); } @@ -169,7 +174,7 @@ void NetworkConnection::networkInitialized(const QString ¤tServer) { if(chans.count() > 0) { qDebug() << "autojoining" << chans; QVariantList list; - foreach(QString chan, chans) list << serverEncode(chan); + list << serverEncode(chans.join(",")); // TODO add channel passwords putCmd("JOIN", list); // FIXME check for 512 byte limit! } // delete _previousState, we won't need it again @@ -199,7 +204,10 @@ QVariant NetworkConnection::state() const { } void NetworkConnection::disconnectFromIrc() { - socket.disconnectFromHost(); + if(socket.state() < QAbstractSocket::ConnectedState) { + setConnectionState(Network::Disconnected); + socketDisconnected(); + } else socket.disconnectFromHost(); } void NetworkConnection::socketHasData() {