added missing queries
[quassel.git] / src / core / networkconnection.cpp
index ed1a72b..3799e03 100644 (file)
@@ -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 &currentServer) {
   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() {