X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.cpp;h=44004b3ffcb1366156727a1b34c20be1da905fad;hp=9c0f915b7a47868403e85b115a0c3d9cd7ced1c2;hb=0324c701d9cc8c656e6188b4e102e19e05c98201;hpb=c6fc5ae878a4f92b658c3da2861bcc7da9c2594f diff --git a/src/common/network.cpp b/src/common/network.cpp index 9c0f915b..44004b3f 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -22,11 +22,10 @@ #include #include -#include "util.h" - QTextCodec *Network::_defaultCodecForServer = 0; QTextCodec *Network::_defaultCodecForEncoding = 0; QTextCodec *Network::_defaultCodecForDecoding = 0; + // ==================== // Public: // ==================== @@ -100,7 +99,7 @@ void Network::setNetworkInfo(const NetworkInfo &info) { if(info.codecForServer != codecForServer()) setCodecForServer(QTextCodec::codecForName(info.codecForServer)); if(info.codecForEncoding != codecForEncoding()) setCodecForEncoding(QTextCodec::codecForName(info.codecForEncoding)); if(info.codecForDecoding != codecForDecoding()) setCodecForDecoding(QTextCodec::codecForName(info.codecForDecoding)); - if(info.serverList.count()) setServerList(info.serverList); // FIXME compare components + if(info.serverList.count()) setServerList(toVariantList(info.serverList)); // FIXME compare components if(info.useRandomServer != useRandomServer()) setUseRandomServer(info.useRandomServer); if(info.perform != perform()) setPerform(info.perform); if(info.useAutoIdentify != useAutoIdentify()) setUseAutoIdentify(info.useAutoIdentify); @@ -240,14 +239,21 @@ void Network::removeChansAndUsers() { _ircUsers.clear(); QList channels = ircChannels(); _ircChannels.clear(); - + foreach(IrcChannel *channel, channels) { + proxy()->detachObject(channel); disconnect(channel, 0, this, 0); } foreach(IrcUser *user, users) { + proxy()->detachObject(user); disconnect(user, 0, this, 0); + } + + // the second loop is needed because quit can have sideffects + foreach(IrcUser *user, users) { user->quit(); } + qDeleteAll(users); qDeleteAll(channels); } @@ -445,7 +451,7 @@ void Network::setIdentity(IdentityId id) { } void Network::setServerList(const QVariantList &serverList) { - _serverList = serverList; + _serverList = fromVariantList(serverList); emit serverListSet(serverList); } @@ -569,7 +575,6 @@ void Network::initSetIrcUsersAndChannels(const QVariantMap &usersAndChannels) { newIrcChannel(channelIter.key(), channelIter.value().toMap()); channelIter++; } - } void Network::initSetSupports(const QVariantMap &supports) { @@ -689,7 +694,7 @@ QDataStream &operator<<(QDataStream &out, const NetworkInfo &info) { i["CodecForServer"] = info.codecForServer; i["CodecForEncoding"] = info.codecForEncoding; i["CodecForDecoding"] = info.codecForDecoding; - i["ServerList"] = info.serverList; + i["ServerList"] = toVariantList(info.serverList); i["UseRandomServer"] = info.useRandomServer; i["Perform"] = info.perform; i["UseAutoIdentify"] = info.useAutoIdentify; @@ -713,7 +718,7 @@ QDataStream &operator>>(QDataStream &in, NetworkInfo &info) { info.codecForServer = i["CodecForServer"].toByteArray(); info.codecForEncoding = i["CodecForEncoding"].toByteArray(); info.codecForDecoding = i["CodecForDecoding"].toByteArray(); - info.serverList = i["ServerList"].toList(); + info.serverList = fromVariantList(i["ServerList"].toList()); info.useRandomServer = i["UseRandomServer"].toBool(); info.perform = i["Perform"].toStringList(); info.useAutoIdentify = i["UseAutoIdentify"].toBool(); @@ -729,11 +734,70 @@ QDataStream &operator>>(QDataStream &in, NetworkInfo &info) { QDebug operator<<(QDebug dbg, const NetworkInfo &i) { dbg.nospace() << "(id = " << i.networkId << " name = " << i.networkName << " identity = " << i.identity - << " codecForServer = " << i.codecForServer << " codecForEncoding = " << i.codecForEncoding << " codecForDecoding = " << i.codecForDecoding - << " serverList = " << i.serverList << " useRandomServer = " << i.useRandomServer << " perform = " << i.perform - << " useAutoIdentify = " << i.useAutoIdentify << " autoIdentifyService = " << i.autoIdentifyService << " autoIdentifyPassword = " << i.autoIdentifyPassword - << " useAutoReconnect = " << i.useAutoReconnect << " autoReconnectInterval = " << i.autoReconnectInterval - << " autoReconnectRetries = " << i.autoReconnectRetries << " unlimitedReconnectRetries = " << i.unlimitedReconnectRetries - << " rejoinChannels = " << i.rejoinChannels << ")"; + << " codecForServer = " << i.codecForServer << " codecForEncoding = " << i.codecForEncoding << " codecForDecoding = " << i.codecForDecoding + << " serverList = " << i.serverList << " useRandomServer = " << i.useRandomServer << " perform = " << i.perform + << " useAutoIdentify = " << i.useAutoIdentify << " autoIdentifyService = " << i.autoIdentifyService << " autoIdentifyPassword = " << i.autoIdentifyPassword + << " useAutoReconnect = " << i.useAutoReconnect << " autoReconnectInterval = " << i.autoReconnectInterval + << " autoReconnectRetries = " << i.autoReconnectRetries << " unlimitedReconnectRetries = " << i.unlimitedReconnectRetries + << " rejoinChannels = " << i.rejoinChannels << ")"; + return dbg.space(); +} + +QDataStream &operator<<(QDataStream &out, const Network::Server &server) { + QVariantMap serverMap; + serverMap["Host"] = server.host; + serverMap["Port"] = server.port; + serverMap["Password"] = server.password; + serverMap["UseSSL"] = server.useSsl; + serverMap["sslVersion"] = server.sslVersion; + serverMap["UseProxy"] = server.useProxy; + serverMap["ProxyType"] = server.proxyType; + serverMap["ProxyHost"] = server.proxyHost; + serverMap["ProxyPort"] = server.proxyPort; + serverMap["ProxyUser"] = server.proxyUser; + serverMap["ProxyPass"] = server.proxyPass; + out << serverMap; + return out; +} + +QDataStream &operator>>(QDataStream &in, Network::Server &server) { + QVariantMap serverMap; + in >> serverMap; + server.host = serverMap["Host"].toString(); + server.port = serverMap["Port"].toUInt(); + server.password = serverMap["Password"].toString(); + server.useSsl = serverMap["UseSSL"].toBool(); + server.sslVersion = serverMap["sslVersion"].toInt(); + server.useProxy = serverMap["UseProxy"].toBool(); + server.proxyType = serverMap["ProxyType"].toInt(); + server.proxyHost = serverMap["ProxyHost"].toString(); + server.proxyPort = serverMap["ProxyPort"].toUInt(); + server.proxyUser = serverMap["ProxyUser"].toString(); + server.proxyPass = serverMap["ProxyPass"].toString(); + return in; +} + + +bool Network::Server::operator==(const Server &other) const { + if(host != other.host) return false; + if(port != other.port) return false; + if(password != other.password) return false; + if(useSsl != other.useSsl) return false; + if(sslVersion != other.sslVersion) return false; + if(useProxy != other.useProxy) return false; + if(proxyType != other.proxyType) return false; + if(proxyHost != other.proxyHost) return false; + if(proxyPort != other.proxyPort) return false; + if(proxyUser != other.proxyUser) return false; + if(proxyPass != other.proxyPass) return false; + return true; +} + +bool Network::Server::operator!=(const Server &other) const { + return !(*this == other); +} + +QDebug operator<<(QDebug dbg, const Network::Server &server) { + dbg.nospace() << "Server(host = " << server.host << ":" << server.port << ", useSsl = " << server.useSsl << ")"; return dbg.space(); }