From dd2b40bf10da0309a72a9b2e8f49af752646fd92 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Wed, 13 Feb 2008 13:10:58 +0000 Subject: [PATCH] Extended NetworkInfo again to prepare for even more sophisticated encoding stuff. --- src/client/networkmodel.cpp | 3 ++ src/common/main.cpp | 1 + src/common/network.cpp | 53 ++++++++++++++++++- src/common/network.h | 28 +++++++--- src/core/coresession.cpp | 1 + .../settingspages/networkssettingspage.cpp | 14 ++--- .../settingspages/networkssettingspage.ui | 2 +- 7 files changed, 84 insertions(+), 18 deletions(-) diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 83d57094..00604471 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -401,6 +401,9 @@ void NetworkItem::setCurrentServer(const QString &serverName) { *****************************************/ // we hardcode this even though we have PREFIX in network... but that wouldn't help with mapping modes to // category strings anyway. +// TODO make this translateable depending on the number of users in a category +// -> we can't set the real string here, because tr() needs to get the actual number as second param +// -> tr("%n User(s)", n) needs to be used somewhere where we do know the user number n const QList UserCategoryItem::categories = QList() << UserCategoryItem::Category('q', tr("Owners")) << UserCategoryItem::Category('a', tr("Admins")) diff --git a/src/common/main.cpp b/src/common/main.cpp index 23ffbfbc..378d8fe8 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -93,6 +93,7 @@ int main(int argc, char **argv) { quasselTranslator.load(QString(":i18n/quassel_%1").arg(locale.name())); app.installTranslator(&quasselTranslator); + Network::setDefaultCodecForServer("UTF-8"); Network::setDefaultCodecForEncoding("UTF-8"); Network::setDefaultCodecForDecoding("ISO-8859-15"); diff --git a/src/common/network.cpp b/src/common/network.cpp index be61b574..99b647a2 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; @@ -45,6 +46,13 @@ Network::Network(const NetworkId &networkid, QObject *parent) : SyncableObject(p _prefixes(QString()), _prefixModes(QString()), _proxy(0), + _useRandomServer(false), + _useAutoIdentify(false), + _useAutoReconnect(false), + _autoReconnectInterval(60), + _autoReconnectRetries(10), + _unlimitedReconnectRetries(false), + _codecForServer(0), _codecForEncoding(0), _codecForDecoding(0) { @@ -128,6 +136,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 +148,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 +236,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; } @@ -380,6 +394,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 +421,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,6 +463,7 @@ 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); @@ -521,11 +559,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 +776,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 +788,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 +802,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 +814,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 +826,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 +838,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; } diff --git a/src/common/network.h b/src/common/network.h index 6358baed..6c2ff403 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -49,6 +49,7 @@ class Network : public SyncableObject { Q_PROPERTY(QString networkName READ networkName WRITE setNetworkName STORED false) Q_PROPERTY(QString currentServer READ currentServer WRITE setCurrentServer STORED false) Q_PROPERTY(QString myNick READ myNick WRITE setMyNick STORED false) + Q_PROPERTY(QByteArray codecForServer READ codecForServer WRITE setCodecForServer STORED false) Q_PROPERTY(QByteArray codecForEncoding READ codecForEncoding WRITE setCodecForEncoding STORED false) Q_PROPERTY(QByteArray codecForDecoding READ codecForDecoding WRITE setCodecForDecoding STORED false) Q_PROPERTY(IdentityId identityId READ identity WRITE setIdentity STORED false) @@ -62,7 +63,8 @@ class Network : public SyncableObject { Q_PROPERTY(QString autoIdentifyPassword READ autoIdentifyPassword WRITE setAutoIdentifyPassword STORED false) Q_PROPERTY(bool useAutoReconnect READ useAutoReconnect WRITE setUseAutoReconnect STORED false) Q_PROPERTY(quint32 autoReconnectInterval READ autoReconnectInterval WRITE setAutoReconnectInterval STORED false) - Q_PROPERTY(qint16 autoReconnectRetries READ autoReconnectRetries WRITE setAutoReconnectRetries STORED false) + Q_PROPERTY(quint16 autoReconnectRetries READ autoReconnectRetries WRITE setAutoReconnectRetries STORED false) + Q_PROPERTY(bool unlimitedReconnectRetries READ unlimitedReconnectRetries WRITE setUnlimitedReconnectRetries STORED false) Q_PROPERTY(bool rejoinChannels READ rejoinChannels WRITE setRejoinChannels STORED false) public: @@ -104,7 +106,8 @@ public: QString autoIdentifyPassword() const; bool useAutoReconnect() const; quint32 autoReconnectInterval() const; - qint16 autoReconnectRetries() const; // -1 => unlimited + quint16 autoReconnectRetries() const; + bool unlimitedReconnectRetries() const; bool rejoinChannels() const; NetworkInfo networkInfo() const; @@ -130,16 +133,20 @@ public: QList ircChannels() const; quint32 ircChannelCount() const; + QByteArray codecForServer() const; QByteArray codecForEncoding() const; QByteArray codecForDecoding() const; + void setCodecForServer(QTextCodec *codec); void setCodecForEncoding(QTextCodec *codec); void setCodecForDecoding(QTextCodec *codec); QString decodeString(const QByteArray &text) const; QByteArray encodeString(const QString string) const; + static QByteArray defaultCodecForServer(); static QByteArray defaultCodecForEncoding(); static QByteArray defaultCodecForDecoding(); + static void setDefaultCodecForServer(const QByteArray &name); static void setDefaultCodecForEncoding(const QByteArray &name); static void setDefaultCodecForDecoding(const QByteArray &name); @@ -160,9 +167,11 @@ public slots: void setAutoIdentifyPassword(const QString &); void setUseAutoReconnect(bool); void setAutoReconnectInterval(quint32); - void setAutoReconnectRetries(qint16); + void setAutoReconnectRetries(quint16); + void setUnlimitedReconnectRetries(bool); void setRejoinChannels(bool); + void setCodecForServer(const QByteArray &codecName); void setCodecForEncoding(const QByteArray &codecName); void setCodecForDecoding(const QByteArray &codecName); @@ -224,8 +233,10 @@ signals: void useAutoReconnectSet(bool); void autoReconnectIntervalSet(quint32); void autoReconnectRetriesSet(qint16); + void unlimitedReconnectRetriesSet(bool); void rejoinChannelsSet(bool); + void codecForServerSet(const QByteArray &codecName); void codecForEncodingSet(const QByteArray &codecName); void codecForDecodingSet(const QByteArray &codecName); @@ -277,15 +288,18 @@ private: bool _useAutoReconnect; quint32 _autoReconnectInterval; - qint16 _autoReconnectRetries; + quint16 _autoReconnectRetries; + bool _unlimitedReconnectRetries; bool _rejoinChannels; QPointer _proxy; void determinePrefixes(); + QTextCodec *_codecForServer; QTextCodec *_codecForEncoding; QTextCodec *_codecForDecoding; + static QTextCodec *_defaultCodecForServer; static QTextCodec *_defaultCodecForEncoding; static QTextCodec *_defaultCodecForDecoding; }; @@ -296,7 +310,8 @@ struct NetworkInfo { QString networkName; IdentityId identity; - bool useCustomEncodings; + bool useCustomEncodings; // not used! + QByteArray codecForServer; QByteArray codecForEncoding; QByteArray codecForDecoding; @@ -312,7 +327,8 @@ struct NetworkInfo { bool useAutoReconnect; quint32 autoReconnectInterval; - qint16 autoReconnectRetries; // -1 => Unlimited + quint16 autoReconnectRetries; + bool unlimitedReconnectRetries; bool rejoinChannels; bool operator==(const NetworkInfo &other) const; diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index bce4cf70..d39498ab 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -141,6 +141,7 @@ void CoreSession::loadSettings() { info.useAutoReconnect = true; info.autoReconnectInterval = 60; info.autoReconnectRetries = 20; + info.unlimitedReconnectRetries = false; info.useAutoIdentify = false; info.autoIdentifyService = "NickServ"; info.rejoinChannels = true; diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index e7c35123..88980f69 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -398,13 +398,8 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) { } ui.autoReconnect->setChecked(info.useAutoReconnect); ui.reconnectInterval->setValue(info.autoReconnectInterval); - if(info.autoReconnectRetries >= 0) { - ui.reconnectRetries->setValue(info.autoReconnectRetries); - ui.unlimitedRetries->setChecked(false); - } else { - ui.reconnectRetries->setValue(1); - ui.unlimitedRetries->setChecked(true); - } + ui.reconnectRetries->setValue(info.autoReconnectRetries); + ui.unlimitedRetries->setChecked(info.unlimitedReconnectRetries); ui.rejoinOnReconnect->setChecked(info.rejoinChannels); } else { // just clear widgets @@ -432,8 +427,8 @@ void NetworksSettingsPage::saveToNetworkInfo(NetworkInfo &info) { } info.useAutoReconnect = ui.autoReconnect->isChecked(); info.autoReconnectInterval = ui.reconnectInterval->value(); - if(ui.unlimitedRetries->isChecked()) info.autoReconnectRetries = -1; - else info.autoReconnectRetries = ui.reconnectRetries->value(); + info.autoReconnectRetries = ui.reconnectRetries->value(); + info.unlimitedReconnectRetries = ui.unlimitedRetries->isChecked(); info.rejoinChannels = ui.rejoinOnReconnect->isChecked(); } /*** Network list ***/ @@ -474,6 +469,7 @@ void NetworksSettingsPage::on_addNetwork_clicked() { info.useAutoReconnect = true; info.autoReconnectInterval = 60; info.autoReconnectRetries = 20; + info.unlimitedReconnectRetries = false; info.useAutoIdentify = false; info.autoIdentifyService = "NickServ"; info.rejoinChannels = true; diff --git a/src/qtui/settingspages/networkssettingspage.ui b/src/qtui/settingspages/networkssettingspage.ui index f4730121..eaf1a8c1 100644 --- a/src/qtui/settingspages/networkssettingspage.ui +++ b/src/qtui/settingspages/networkssettingspage.ui @@ -170,7 +170,7 @@ true - 0 + 2 -- 2.20.1