_whoTimer.setInterval(60 * 1000);
_whoTimer.setSingleShot(false);
+ QHash<QString, QString> channels = coreSession()->persistentChannels(networkId());
+ foreach(QString chan, channels.keys()) {
+ _channelKeys[chan.toLower()] = channels[chan];
+ }
+
connect(&_autoReconnectTimer, SIGNAL(timeout()), this, SLOT(doAutoReconnect()));
connect(&_whoTimer, SIGNAL(timeout()), this, SLOT(sendWho()));
NetworkConnection::~NetworkConnection() {
if(connectionState() != Network::Disconnected && connectionState() != Network::Reconnecting)
- disconnectFromIrc();
+ disconnectFromIrc(false); // clean up, but this does not count as requested disconnect!
delete _ircServerHandler;
delete _userInputHandler;
delete _ctcpHandler;
// rejoin channels we've been in
QStringList channels, keys;
- foreach(QString chan, network()->persistentChannels().keys()) {
- QString key = network()->persistentChannels()[chan];
+ foreach(QString chan, persistentChannels()) {
+ QString key = channelKey(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(",")));
+ QString joinString = QString("%1 %2").arg(channels.join(",")).arg(keys.join(",")).trimmed();
+ if(!joinString.isEmpty()) userInputHandler()->handleJoin(statusBuf, joinString);
}
-void NetworkConnection::disconnectFromIrc() {
+void NetworkConnection::disconnectFromIrc(bool requested) {
_autoReconnectTimer.stop();
_autoReconnectCount = 0;
displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Disconnecting."));
setConnectionState(Network::Disconnected);
socketDisconnected();
} else socket.disconnectFromHost();
+
+ if(requested) {
+ emit quitRequested(networkId());
+ }
}
void NetworkConnection::socketHasData() {
setConnectionState(Network::Disconnected);
socketDisconnected();
}
+ //qDebug() << "exiting...";
+ //exit(1);
}
void NetworkConnection::socketConnected() {
_whoTimer.stop();
network()->setConnected(false);
emit disconnected(networkId());
- if(_autoReconnectCount == 0) emit quitRequested(networkId());
- else {
+ if(_autoReconnectCount != 0) {
setConnectionState(Network::Reconnecting);
if(_autoReconnectCount == network()->autoReconnectRetries()) doAutoReconnect(); // first try is immediate
else _autoReconnectTimer.start();
}
}
+void NetworkConnection::setChannelJoined(const QString &channel) {
+ emit channelJoined(networkId(), channel, _channelKeys[channel.toLower()]);
+}
+
+void NetworkConnection::setChannelParted(const QString &channel) {
+ removeChannelKey(channel);
+ emit channelParted(networkId(), channel);
+}
+
void NetworkConnection::addChannelKey(const QString &channel, const QString &key) {
- if(key.isEmpty()) removeChannelKey(channel);
- else _channelKeys[channel] = key;
+ if(key.isEmpty()) {
+ removeChannelKey(channel);
+ } else {
+ _channelKeys[channel.toLower()] = key;
+ }
}
void NetworkConnection::removeChannelKey(const QString &channel) {
- _channelKeys.remove(channel);
+ _channelKeys.remove(channel.toLower());
}
void NetworkConnection::nickChanged(const QString &newNick, const QString &oldNick) {
- emit nickChanged(_network->networkId(), newNick, oldNick);
+ emit nickChanged(networkId(), newNick, oldNick);
}
/* Exception classes for message handling */