X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.cpp;h=3162bd4c43ef6300f4e3012b451dea0aa540b8d5;hp=be61b5746ab421c131737b47ef15936e2058a5a3;hb=1f02b7201ab7b86238e705d2ce5b22f50bf6acfe;hpb=6bff16ce4afeea153ffaf3d1916b6ba977853a27 diff --git a/src/common/network.cpp b/src/common/network.cpp index be61b574..3162bd4c 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -28,6 +28,7 @@ #include "util.h" +QTextCodec *Network::_defaultCodecForServer = 0; QTextCodec *Network::_defaultCodecForEncoding = 0; QTextCodec *Network::_defaultCodecForDecoding = 0; @@ -35,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()), @@ -44,7 +46,13 @@ Network::Network(const NetworkId &networkid, QObject *parent) : SyncableObject(p _connectionState(Disconnected), _prefixes(QString()), _prefixModes(QString()), - _proxy(0), + _useRandomServer(false), + _useAutoIdentify(false), + _useAutoReconnect(false), + _autoReconnectInterval(60), + _autoReconnectRetries(10), + _unlimitedReconnectRetries(false), + _codecForServer(0), _codecForEncoding(0), _codecForDecoding(0) { @@ -109,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(); @@ -120,6 +129,7 @@ NetworkInfo Network::networkInfo() const { info.useAutoReconnect = useAutoReconnect(); info.autoReconnectInterval = autoReconnectInterval(); info.autoReconnectRetries = autoReconnectRetries(); + info.unlimitedReconnectRetries = unlimitedReconnectRetries(); info.rejoinChannels = rejoinChannels(); return info; } @@ -128,6 +138,7 @@ void Network::setNetworkInfo(const NetworkInfo &info) { // we don't set our ID! if(!info.networkName.isEmpty() && info.networkName != networkName()) setNetworkName(info.networkName); if(info.identity > 0 && info.identity != identity()) setIdentity(info.identity); + 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 @@ -139,6 +150,7 @@ void Network::setNetworkInfo(const NetworkInfo &info) { if(info.useAutoReconnect != useAutoReconnect()) setUseAutoReconnect(info.useAutoReconnect); if(info.autoReconnectInterval != autoReconnectInterval()) setAutoReconnectInterval(info.autoReconnectInterval); if(info.autoReconnectRetries != autoReconnectRetries()) setAutoReconnectRetries(info.autoReconnectRetries); + if(info.unlimitedReconnectRetries != unlimitedReconnectRetries()) setUnlimitedReconnectRetries(info.unlimitedReconnectRetries); if(info.rejoinChannels != rejoinChannels()) setRejoinChannels(info.rejoinChannels); } @@ -226,10 +238,14 @@ quint32 Network::autoReconnectInterval() const { return _autoReconnectInterval; } -qint16 Network::autoReconnectRetries() const { +quint16 Network::autoReconnectRetries() const { return _autoReconnectRetries; } +bool Network::unlimitedReconnectRetries() const { + return _unlimitedReconnectRetries; +} + bool Network::rejoinChannels() const { return _rejoinChannels; } @@ -282,7 +298,7 @@ IrcUser *Network::newIrcUser(const QString &hostmask) { } IrcUser *Network::newIrcUser(const QByteArray &hostmask) { - return newIrcUser(decodeString(hostmask)); + return newIrcUser(decodeServerString(hostmask)); } void Network::removeIrcUser(IrcUser *ircuser) { @@ -323,7 +339,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 { @@ -356,7 +372,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 { @@ -368,7 +384,7 @@ IrcChannel *Network::ircChannel(QString channelname) const { } IrcChannel *Network::ircChannel(const QByteArray &channelname) const { - return ircChannel(decodeString(channelname)); + return ircChannel(decodeServerString(channelname)); } @@ -380,6 +396,15 @@ quint32 Network::ircChannelCount() const { return _ircChannels.count(); } +QByteArray Network::defaultCodecForServer() { + if(_defaultCodecForServer) return _defaultCodecForServer->name(); + return QByteArray(); +} + +void Network::setDefaultCodecForServer(const QByteArray &name) { + _defaultCodecForServer = QTextCodec::codecForName(name); +} + QByteArray Network::defaultCodecForEncoding() { if(_defaultCodecForEncoding) return _defaultCodecForEncoding->name(); return QByteArray(); @@ -398,6 +423,20 @@ void Network::setDefaultCodecForDecoding(const QByteArray &name) { _defaultCodecForDecoding = QTextCodec::codecForName(name); } +QByteArray Network::codecForServer() const { + if(_codecForServer) return _codecForServer->name(); + return QByteArray(); +} + +void Network::setCodecForServer(const QByteArray &name) { + setCodecForServer(QTextCodec::codecForName(name)); +} + +void Network::setCodecForServer(QTextCodec *codec) { + _codecForServer = codec; + emit codecForServerSet(codecForServer()); +} + QByteArray Network::codecForEncoding() const { if(_codecForEncoding) return _codecForEncoding->name(); return QByteArray(); @@ -426,12 +465,13 @@ void Network::setCodecForDecoding(QTextCodec *codec) { emit codecForDecodingSet(codecForDecoding()); } +// FIXME use server encoding if appropriate QString Network::decodeString(const QByteArray &text) const { if(_codecForDecoding) return ::decodeString(text, _codecForDecoding); 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); } @@ -441,6 +481,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: // ==================== @@ -521,11 +576,16 @@ void Network::setAutoReconnectInterval(quint32 interval) { emit autoReconnectIntervalSet(interval); } -void Network::setAutoReconnectRetries(qint16 retries) { +void Network::setAutoReconnectRetries(quint16 retries) { _autoReconnectRetries = retries; emit autoReconnectRetriesSet(retries); } +void Network::setUnlimitedReconnectRetries(bool unlimited) { + _unlimitedReconnectRetries = unlimited; + emit unlimitedReconnectRetriesSet(unlimited); +} + void Network::setRejoinChannels(bool rejoin) { _rejoinChannels = rejoin; emit rejoinChannelsSet(rejoin); @@ -733,6 +793,7 @@ bool NetworkInfo::operator==(const NetworkInfo &other) const { if(networkId != other.networkId) return false; if(networkName != other.networkName) return false; if(identity != other.identity) return false; + if(codecForServer != other.codecForServer) return false; if(codecForEncoding != other.codecForEncoding) return false; if(codecForDecoding != other.codecForDecoding) return false; if(serverList != other.serverList) return false; @@ -744,6 +805,7 @@ bool NetworkInfo::operator==(const NetworkInfo &other) const { if(useAutoReconnect != other.useAutoReconnect) return false; if(autoReconnectInterval != other.autoReconnectInterval) return false; if(autoReconnectRetries != other.autoReconnectRetries) return false; + if(unlimitedReconnectRetries != other.unlimitedReconnectRetries) return false; if(rejoinChannels != other.rejoinChannels) return false; return true; } @@ -757,6 +819,7 @@ QDataStream &operator<<(QDataStream &out, const NetworkInfo &info) { i["NetworkId"] = QVariant::fromValue(info.networkId); i["NetworkName"] = info.networkName; i["Identity"] = QVariant::fromValue(info.identity); + i["CodecForServer"] = info.codecForServer; i["CodecForEncoding"] = info.codecForEncoding; i["CodecForDecoding"] = info.codecForDecoding; i["ServerList"] = info.serverList; @@ -768,6 +831,7 @@ QDataStream &operator<<(QDataStream &out, const NetworkInfo &info) { i["UseAutoReconnect"] = info.useAutoReconnect; i["AutoReconnectInterval"] = info.autoReconnectInterval; i["AutoReconnectRetries"] = info.autoReconnectRetries; + i["UnlimitedReconnectRetries"] = info.unlimitedReconnectRetries; i["RejoinChannels"] = info.rejoinChannels; out << i; return out; @@ -779,6 +843,7 @@ QDataStream &operator>>(QDataStream &in, NetworkInfo &info) { info.networkId = i["NetworkId"].value(); info.networkName = i["NetworkName"].toString(); info.identity = i["Identity"].value(); + info.codecForServer = i["CodecForServer"].toByteArray(); info.codecForEncoding = i["CodecForEncoding"].toByteArray(); info.codecForDecoding = i["CodecForDecoding"].toByteArray(); info.serverList = i["ServerList"].toList(); @@ -790,6 +855,7 @@ QDataStream &operator>>(QDataStream &in, NetworkInfo &info) { info.useAutoReconnect = i["UseAutoReconnect"].toBool(); info.autoReconnectInterval = i["AutoReconnectInterval"].toUInt(); info.autoReconnectRetries = i["AutoReconnectRetries"].toInt(); + info.unlimitedReconnectRetries = i["UnlimitedReconnectRetries"].toBool(); info.rejoinChannels = i["RejoinChannels"].toBool(); return in; }