X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.cpp;h=2fbde1e39b395dd0764011db1ce1867f85849529;hp=99b647a22602d6687685b8c43a972907dce0f341;hb=56607f81246f04db3a0e71c9a8757d7f75d6cfcf;hpb=dd2b40bf10da0309a72a9b2e8f49af752646fd92 diff --git a/src/common/network.cpp b/src/common/network.cpp index 99b647a2..2fbde1e3 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -36,6 +36,7 @@ QTextCodec *Network::_defaultCodecForDecoding = 0; // Public: // ==================== Network::Network(const NetworkId &networkid, QObject *parent) : SyncableObject(parent), + _proxy(0), _networkId(networkid), _identity(0), _myNick(QString()), @@ -45,7 +46,6 @@ Network::Network(const NetworkId &networkid, QObject *parent) : SyncableObject(p _connectionState(Disconnected), _prefixes(QString()), _prefixModes(QString()), - _proxy(0), _useRandomServer(false), _useAutoIdentify(false), _useAutoReconnect(false), @@ -117,6 +117,7 @@ NetworkInfo Network::networkInfo() const { info.networkName = networkName(); info.networkId = networkId(); info.identity = identity(); + info.codecForServer = codecForServer(); info.codecForEncoding = codecForEncoding(); info.codecForDecoding = codecForDecoding(); info.serverList = serverList(); @@ -128,6 +129,7 @@ NetworkInfo Network::networkInfo() const { info.useAutoReconnect = useAutoReconnect(); info.autoReconnectInterval = autoReconnectInterval(); info.autoReconnectRetries = autoReconnectRetries(); + info.unlimitedReconnectRetries = unlimitedReconnectRetries(); info.rejoinChannels = rejoinChannels(); return info; } @@ -288,6 +290,7 @@ IrcUser *Network::newIrcUser(const QString &hostmask) { connect(ircuser, SIGNAL(nickSet(QString)), this, SLOT(ircUserNickChanged(QString))); connect(ircuser, SIGNAL(initDone()), this, SLOT(ircUserInitDone())); + connect(ircuser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed())); _ircUsers[nick] = ircuser; emit ircUserAdded(hostmask); emit ircUserAdded(ircuser); @@ -296,7 +299,22 @@ IrcUser *Network::newIrcUser(const QString &hostmask) { } IrcUser *Network::newIrcUser(const QByteArray &hostmask) { - return newIrcUser(decodeString(hostmask)); + return newIrcUser(decodeServerString(hostmask)); +} + +void Network::ircUserDestroyed() { + IrcUser *ircUser = static_cast(sender()); + if(!ircUser) + return; + + QHash::iterator ircUserIter = _ircUsers.begin(); + while(ircUserIter != _ircUsers.end()) { + if(ircUser == *ircUserIter) { + ircUserIter = _ircUsers.erase(ircUserIter); + break; + } + ircUserIter++; + } } void Network::removeIrcUser(IrcUser *ircuser) { @@ -311,6 +329,12 @@ void Network::removeIrcUser(IrcUser *ircuser) { ircuser->deleteLater(); } +void Network::removeIrcUser(const QString &nick) { + IrcUser *ircuser; + if((ircuser = ircUser(nick)) != 0) + removeIrcUser(ircuser); +} + void Network::removeChansAndUsers() { QList users = ircUsers(); foreach(IrcUser *user, users) { @@ -322,12 +346,6 @@ void Network::removeChansAndUsers() { } } -void Network::removeIrcUser(const QString &nick) { - IrcUser *ircuser; - if((ircuser = ircUser(nick)) != 0) - removeIrcUser(ircuser); -} - IrcUser *Network::ircUser(QString nickname) const { nickname = nickname.toLower(); if(_ircUsers.contains(nickname)) @@ -337,7 +355,7 @@ IrcUser *Network::ircUser(QString nickname) const { } IrcUser *Network::ircUser(const QByteArray &nickname) const { - return ircUser(decodeString(nickname)); + return ircUser(decodeServerString(nickname)); } QList Network::ircUsers() const { @@ -370,7 +388,7 @@ IrcChannel *Network::newIrcChannel(const QString &channelname) { } IrcChannel *Network::newIrcChannel(const QByteArray &channelname) { - return newIrcChannel(decodeString(channelname)); + return newIrcChannel(decodeServerString(channelname)); } IrcChannel *Network::ircChannel(QString channelname) const { @@ -382,7 +400,7 @@ IrcChannel *Network::ircChannel(QString channelname) const { } IrcChannel *Network::ircChannel(const QByteArray &channelname) const { - return ircChannel(decodeString(channelname)); + return ircChannel(decodeServerString(channelname)); } @@ -469,7 +487,7 @@ QString Network::decodeString(const QByteArray &text) const { else return ::decodeString(text, _defaultCodecForDecoding); } -QByteArray Network::encodeString(const QString string) const { +QByteArray Network::encodeString(const QString &string) const { if(_codecForEncoding) { return _codecForEncoding->fromUnicode(string); } @@ -479,6 +497,21 @@ QByteArray Network::encodeString(const QString string) const { return string.toAscii(); } +QString Network::decodeServerString(const QByteArray &text) const { + if(_codecForServer) return ::decodeString(text, _codecForServer); + else return ::decodeString(text, _defaultCodecForServer); +} + +QByteArray Network::encodeServerString(const QString &string) const { + if(_codecForServer) { + return _codecForServer->fromUnicode(string); + } + if(_defaultCodecForServer) { + return _defaultCodecForServer->fromUnicode(string); + } + return string.toAscii(); +} + // ==================== // Public Slots: // ==================== @@ -634,7 +667,11 @@ void Network::initSetIrcUsers(const QStringList &hostmasks) { } } -void Network::initSetChannels(const QStringList &channels) { +void Network::initSetIrcChannels(const QStringList &channels) { + // FIXME This does not work correctly, "received data for unknown User" triggers + // So we disable this for now + return; + if(!_ircChannels.empty()) return; foreach(QString channel, channels) @@ -708,7 +745,7 @@ void Network::requestConnect() const { if(proxy()->proxyMode() == SignalProxy::Client) emit connectRequested(); // on the client this triggers calling this slot on the core else { if(connectionState() != Disconnected) { - qWarning() << "Requesting connect while not being disconnected!"; + qWarning() << "Requesting connect while already being connected!"; return; } emit connectRequested(networkId()); // and this is for CoreSession :) @@ -843,11 +880,16 @@ QDataStream &operator>>(QDataStream &in, NetworkInfo &info) { return in; } - - - - - +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 << ")"; + return dbg.space(); +}