X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fnetworkconnection.cpp;h=651a1bea9dc0875d88d88822a4bdcb2a95f621c1;hp=24238def567c6c720f76489256836b5ce0784eff;hb=da3aa4136fe01e142238f0f42fe1273481037b9d;hpb=28f1a9d9d96645757691cdea19500aefce4bcdac diff --git a/src/core/networkconnection.cpp b/src/core/networkconnection.cpp index 24238def..651a1bea 100644 --- a/src/core/networkconnection.cpp +++ b/src/core/networkconnection.cpp @@ -36,14 +36,13 @@ #include "userinputhandler.h" #include "ctcphandler.h" -NetworkConnection::NetworkConnection(Network *network, CoreSession *session, const QVariant &state) : QObject(network), +NetworkConnection::NetworkConnection(Network *network, CoreSession *session) : QObject(network), _connectionState(Network::Disconnected), _network(network), _coreSession(session), _ircServerHandler(new IrcServerHandler(this)), _userInputHandler(new UserInputHandler(this)), _ctcpHandler(new CtcpHandler(this)), - _previousState(state), _autoReconnectCount(0) { _autoReconnectTimer.setSingleShot(true); @@ -60,6 +59,8 @@ NetworkConnection::NetworkConnection(Network *network, CoreSession *session, con connect(&socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(socketStateChanged(QAbstractSocket::SocketState))); connect(&socket, SIGNAL(readyRead()), this, SLOT(socketHasData())); + connect(_ircServerHandler, SIGNAL(nickChanged(const QString &, const QString &)), + this, SLOT(nickChanged(const QString &, const QString &))); } NetworkConnection::~NetworkConnection() { @@ -199,20 +200,11 @@ void NetworkConnection::networkInitialized(const QString ¤tServer) { sendPerform(); - // rejoin channels we've been in - QStringList chans = _previousState.toStringList(); - if(chans.count() > 0) { - qDebug() << "autojoining" << chans; - QVariantList list; - 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 - _previousState = QVariant(); // now we are initialized setConnectionState(Network::Initialized); network()->setConnected(true); emit connected(networkId()); + } void NetworkConnection::sendPerform() { @@ -225,12 +217,18 @@ void NetworkConnection::sendPerform() { foreach(QString line, network()->perform()) { if(!line.isEmpty()) userInput(statusBuf, line); } -} -QVariant NetworkConnection::state() const { - IrcUser *me = network()->ircUser(network()->myNick()); - if(!me) return QVariant(); // this shouldn't really happen, I guess - return me->channels(); + // rejoin channels we've been in + QStringList channels, keys; + foreach(QString chan, network()->persistentChannels().keys()) { + QString key = network()->persistentChannels()[chan]; + if(!key.isEmpty()) { + channels.prepend(chan); keys.prepend(key); + } else { + channels.append(chan); + } + } + userInputHandler()->handleJoin(statusBuf, QString("%1 %2").arg(channels.join(",")).arg(keys.join(","))); } void NetworkConnection::disconnectFromIrc() { @@ -301,7 +299,6 @@ void NetworkConnection::socketDisconnected() { if(_autoReconnectCount == 0) emit quitRequested(networkId()); else { setConnectionState(Network::Reconnecting); - qDebug() << "trying to reconnect... " << _autoReconnectTimer.interval(); if(_autoReconnectCount == network()->autoReconnectRetries()) doAutoReconnect(); // first try is immediate else _autoReconnectTimer.start(); } @@ -341,6 +338,19 @@ void NetworkConnection::putCmd(const QString &cmd, const QVariantList ¶ms, c putRawLine(msg); } +void NetworkConnection::addChannelKey(const QString &channel, const QString &key) { + if(key.isEmpty()) removeChannelKey(channel); + else _channelKeys[channel] = key; +} + +void NetworkConnection::removeChannelKey(const QString &channel) { + _channelKeys.remove(channel); +} + +void NetworkConnection::nickChanged(const QString &newNick, const QString &oldNick) { + emit nickChanged(_network->networkId(), newNick, oldNick); +} + /* Exception classes for message handling */ NetworkConnection::ParseError::ParseError(QString cmd, QString prefix, QStringList params) { Q_UNUSED(prefix); @@ -351,3 +361,4 @@ NetworkConnection::UnknownCmdError::UnknownCmdError(QString cmd, QString prefix, Q_UNUSED(prefix); _msg = QString("Unknown Command: ") + cmd + params.join(" "); } +