From: Manuel Nickschas Date: Tue, 12 Feb 2008 23:52:36 +0000 (+0000) Subject: All network settings can now be edited/stored properly. Most of the new options are not X-Git-Tag: 0.2.0-alpha1~68 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=8f237cecca9a6353bc4d150b4b55719a6bf37476 All network settings can now be edited/stored properly. Most of the new options are not honored yet though, even though they are enabled in the dialog. This will be coming in the next few days. NOTE: Most options will be set to random values in existing networks, so be sure to doublecheck your network settings after updating! Distclean mandatory, core protocol update. --- diff --git a/src/common/main.cpp b/src/common/main.cpp index f34cfd16..23ffbfbc 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -25,6 +25,7 @@ #include "global.h" #include "logger.h" +#include "network.h" #include "settings.h" #if defined BUILD_CORE @@ -92,6 +93,9 @@ int main(int argc, char **argv) { quasselTranslator.load(QString(":i18n/quassel_%1").arg(locale.name())); app.installTranslator(&quasselTranslator); + Network::setDefaultCodecForEncoding("UTF-8"); + Network::setDefaultCodecForDecoding("ISO-8859-15"); + QCoreApplication::setOrganizationDomain("quassel-irc.org"); QCoreApplication::setApplicationName("Quassel IRC"); QCoreApplication::setOrganizationName("Quassel Project"); diff --git a/src/common/network.cpp b/src/common/network.cpp index 0d367af2..c62d4463 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -28,6 +28,9 @@ #include "util.h" +QTextCodec *Network::_defaultCodecForEncoding = 0; +QTextCodec *Network::_defaultCodecForDecoding = 0; + // ==================== // Public: // ==================== @@ -109,6 +112,15 @@ NetworkInfo Network::networkInfo() const { info.codecForEncoding = codecForEncoding(); info.codecForDecoding = codecForDecoding(); info.serverList = serverList(); + info.useRandomServer = useRandomServer(); + info.perform = perform(); + info.useAutoIdentify = useAutoIdentify(); + info.autoIdentifyService = autoIdentifyService(); + info.autoIdentifyPassword = autoIdentifyPassword(); + info.useAutoReconnect = useAutoReconnect(); + info.autoReconnectInterval = autoReconnectInterval(); + info.autoReconnectRetries = autoReconnectRetries(); + info.rejoinChannels = rejoinChannels(); return info; } @@ -116,11 +128,18 @@ 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.codecForEncoding.isEmpty() && info.codecForEncoding != codecForEncoding()) - setCodecForEncoding(QTextCodec::codecForName(info.codecForEncoding)); - if(!info.codecForDecoding.isEmpty() && info.codecForDecoding != codecForDecoding()) - setCodecForDecoding(QTextCodec::codecForName(info.codecForDecoding)); + 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.useRandomServer != useRandomServer()) setUseRandomServer(info.useRandomServer); + if(info.perform != perform()) setPerform(info.perform); + if(info.useAutoIdentify != useAutoIdentify()) setUseAutoIdentify(info.useAutoIdentify); + if(info.autoIdentifyService != autoIdentifyService()) setAutoIdentifyService(info.autoIdentifyService); + if(info.autoIdentifyPassword != autoIdentifyPassword()) setAutoIdentifyPassword(info.autoIdentifyPassword); + if(info.useAutoReconnect != useAutoReconnect()) setUseAutoReconnect(info.useAutoReconnect); + if(info.autoReconnectInterval != autoReconnectInterval()) setAutoReconnectInterval(info.autoReconnectInterval); + if(info.autoReconnectRetries != autoReconnectRetries()) setAutoReconnectRetries(info.autoReconnectRetries); + if(info.rejoinChannels != rejoinChannels()) setRejoinChannels(info.rejoinChannels); } QString Network::prefixToMode(const QString &prefix) { @@ -179,6 +198,42 @@ QVariantList Network::serverList() const { return _serverList; } +bool Network::useRandomServer() const { + return _useRandomServer; +} + +QStringList Network::perform() const { + return _perform; +} + +bool Network::useAutoIdentify() const { + return _useAutoIdentify; +} + +QString Network::autoIdentifyService() const { + return _autoIdentifyService; +} + +QString Network::autoIdentifyPassword() const { + return _autoIdentifyPassword; +} + +bool Network::useAutoReconnect() const { + return _useAutoReconnect; +} + +quint32 Network::autoReconnectInterval() const { + return _autoReconnectInterval; +} + +qint16 Network::autoReconnectRetries() const { + return _autoReconnectRetries; +} + +bool Network::rejoinChannels() const { + return _rejoinChannels; +} + QString Network::prefixes() { if(_prefixes.isNull()) determinePrefixes(); @@ -325,6 +380,24 @@ quint32 Network::ircChannelCount() const { return _ircChannels.count(); } +QByteArray Network::defaultCodecForEncoding() { + if(_defaultCodecForEncoding) return _defaultCodecForEncoding->name(); + return QByteArray(); +} + +void Network::setDefaultCodecForEncoding(const QByteArray &name) { + _defaultCodecForEncoding = QTextCodec::codecForName(name); +} + +QByteArray Network::defaultCodecForDecoding() { + if(_defaultCodecForDecoding) return _defaultCodecForDecoding->name(); + return QByteArray(); +} + +void Network::setDefaultCodecForDecoding(const QByteArray &name) { + _defaultCodecForDecoding = QTextCodec::codecForName(name); +} + QByteArray Network::codecForEncoding() const { if(_codecForEncoding) return _codecForEncoding->name(); return QByteArray(); @@ -354,13 +427,17 @@ void Network::setCodecForDecoding(QTextCodec *codec) { } QString Network::decodeString(const QByteArray &text) const { - return ::decodeString(text, _codecForDecoding); + if(_codecForDecoding) return ::decodeString(text, _codecForDecoding); + else return ::decodeString(text, _defaultCodecForDecoding); } QByteArray Network::encodeString(const QString string) const { if(_codecForEncoding) { return _codecForEncoding->fromUnicode(string); } + if(_defaultCodecForEncoding) { + return _defaultCodecForEncoding->fromUnicode(string); + } return string.toAscii(); } @@ -407,6 +484,51 @@ void Network::setServerList(const QVariantList &serverList) { emit serverListSet(serverList); } +void Network::setUseRandomServer(bool use) { + _useRandomServer = use; + emit useRandomServerSet(use); +} + +void Network::setPerform(const QStringList &perform) { + _perform = perform; + emit performSet(perform); +} + +void Network::setUseAutoIdentify(bool use) { + _useAutoIdentify = use; + emit useAutoIdentifySet(use); +} + +void Network::setAutoIdentifyService(const QString &service) { + _autoIdentifyService = service; + emit autoIdentifyServiceSet(service); +} + +void Network::setAutoIdentifyPassword(const QString &password) { + _autoIdentifyPassword = password; + emit autoIdentifyPasswordSet(password); +} + +void Network::setUseAutoReconnect(bool use) { + _useAutoReconnect = use; + emit useAutoReconnectSet(use); +} + +void Network::setAutoReconnectInterval(quint32 interval) { + _autoReconnectInterval = interval; + emit autoReconnectIntervalSet(interval); +} + +void Network::setAutoReconnectRetries(qint16 retries) { + _autoReconnectRetries = retries; + emit autoReconnectRetriesSet(retries); +} + +void Network::setRejoinChannels(bool rejoin) { + _rejoinChannels = rejoin; + emit rejoinChannelsSet(rejoin); +} + void Network::addSupport(const QString ¶m, const QString &value) { if(!_supports.contains(param)) { _supports[param] = value; @@ -612,6 +734,15 @@ bool NetworkInfo::operator==(const NetworkInfo &other) const { if(codecForEncoding != other.codecForEncoding) return false; if(codecForDecoding != other.codecForDecoding) return false; if(serverList != other.serverList) return false; + if(useRandomServer != other.useRandomServer) return false; + if(perform != other.perform) return false; + if(useAutoIdentify != other.useAutoIdentify) return false; + if(autoIdentifyService != other.autoIdentifyService) return false; + if(autoIdentifyPassword != other.autoIdentifyPassword) return false; + if(useAutoReconnect != other.useAutoReconnect) return false; + if(autoReconnectInterval != other.autoReconnectInterval) return false; + if(autoReconnectRetries != other.autoReconnectRetries) return false; + if(rejoinChannels != other.rejoinChannels) return false; return true; } @@ -627,6 +758,15 @@ QDataStream &operator<<(QDataStream &out, const NetworkInfo &info) { i["CodecForEncoding"] = info.codecForEncoding; i["CodecForDecoding"] = info.codecForDecoding; i["ServerList"] = info.serverList; + i["UseRandomServer"] = info.useRandomServer; + i["Perform"] = info.perform; + i["UseAutoIdentify"] = info.useAutoIdentify; + i["AutoIdentifyService"] = info.autoIdentifyService; + i["AutoIdentifyPassword"] = info.autoIdentifyPassword; + i["UseAutoReconnect"] = info.useAutoReconnect; + i["AutoReconnectInterval"] = info.autoReconnectInterval; + i["AutoReconnectRetries"] = info.autoReconnectRetries; + i["RejoinChannels"] = info.rejoinChannels; out << i; return out; } @@ -640,5 +780,24 @@ QDataStream &operator>>(QDataStream &in, NetworkInfo &info) { info.codecForEncoding = i["CodecForEncoding"].toByteArray(); info.codecForDecoding = i["CodecForDecoding"].toByteArray(); info.serverList = i["ServerList"].toList(); + info.useRandomServer = i["UseRandomServer"].toBool(); + info.perform = i["Perform"].toStringList(); + info.useAutoIdentify = i["UseAutoIdentify"].toBool(); + info.autoIdentifyService = i["AutoIdentifyService"].toString(); + info.autoIdentifyPassword = i["AutoIdentifyPassword"].toString(); + info.useAutoReconnect = i["UseAutoReconnect"].toBool(); + info.autoReconnectInterval = i["AutoReconnectInterval"].toUInt(); + info.autoReconnectRetries = i["AutoReconnectRetries"].toInt(); + info.rejoinChannels = i["RejoinChannels"].toBool(); return in; } + + + + + + + + + + diff --git a/src/common/network.h b/src/common/network.h index b9a22363..6358baed 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -55,6 +55,15 @@ class Network : public SyncableObject { Q_PROPERTY(bool isConnected READ isConnected WRITE setConnected STORED false) //Q_PROPERTY(Network::ConnectionState connectionState READ connectionState WRITE setConnectionState STORED false) Q_PROPERTY(int connectionState READ connectionState WRITE setConnectionState STORED false) + Q_PROPERTY(bool useRandomServer READ useRandomServer WRITE setUseRandomServer STORED false) + Q_PROPERTY(QStringList perform READ perform WRITE setPerform STORED false) + Q_PROPERTY(bool useAutoIdentify READ useAutoIdentify WRITE setUseAutoIdentify STORED false) + Q_PROPERTY(QString autoIdentifyService READ autoIdentifyService WRITE setAutoIdentifyService STORED false) + 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(bool rejoinChannels READ rejoinChannels WRITE setRejoinChannels STORED false) public: enum ConnectionState { Disconnected, Connecting, Initializing, Initialized, Disconnecting }; @@ -88,6 +97,15 @@ public: QStringList nicks() const; QStringList channels() const; QVariantList serverList() const; + bool useRandomServer() const; + QStringList perform() const; + bool useAutoIdentify() const; + QString autoIdentifyService() const; + QString autoIdentifyPassword() const; + bool useAutoReconnect() const; + quint32 autoReconnectInterval() const; + qint16 autoReconnectRetries() const; // -1 => unlimited + bool rejoinChannels() const; NetworkInfo networkInfo() const; void setNetworkInfo(const NetworkInfo &); @@ -120,6 +138,11 @@ public: QString decodeString(const QByteArray &text) const; QByteArray encodeString(const QString string) const; + static QByteArray defaultCodecForEncoding(); + static QByteArray defaultCodecForDecoding(); + static void setDefaultCodecForEncoding(const QByteArray &name); + static void setDefaultCodecForDecoding(const QByteArray &name); + public slots: void setNetworkName(const QString &networkName); void setCurrentServer(const QString ¤tServer); @@ -130,6 +153,15 @@ public slots: void setIdentity(IdentityId); void setServerList(const QVariantList &serverList); + void setUseRandomServer(bool); + void setPerform(const QStringList &); + void setUseAutoIdentify(bool); + void setAutoIdentifyService(const QString &); + void setAutoIdentifyPassword(const QString &); + void setUseAutoReconnect(bool); + void setAutoReconnectInterval(quint32); + void setAutoReconnectRetries(qint16); + void setRejoinChannels(bool); void setCodecForEncoding(const QByteArray &codecName); void setCodecForDecoding(const QByteArray &codecName); @@ -184,9 +216,18 @@ signals: void identitySet(IdentityId); void serverListSet(QVariantList serverList); - - void codecForEncodingSet(const QString &codecName); - void codecForDecodingSet(const QString &codecName); + void useRandomServerSet(bool); + void performSet(const QStringList &); + void useAutoIdentifySet(bool); + void autoIdentifyServiceSet(const QString &); + void autoIdentifyPasswordSet(const QString &); + void useAutoReconnectSet(bool); + void autoReconnectIntervalSet(quint32); + void autoReconnectRetriesSet(qint16); + void rejoinChannelsSet(bool); + + void codecForEncodingSet(const QByteArray &codecName); + void codecForDecodingSet(const QByteArray &codecName); void supportAdded(const QString ¶m, const QString &value); void supportRemoved(const QString ¶m); @@ -227,8 +268,17 @@ private: QHash _supports; // stores results from RPL_ISUPPORT QVariantList _serverList; + bool _useRandomServer; QStringList _perform; - //QVariantMap networkSettings; + + bool _useAutoIdentify; + QString _autoIdentifyService; + QString _autoIdentifyPassword; + + bool _useAutoReconnect; + quint32 _autoReconnectInterval; + qint16 _autoReconnectRetries; + bool _rejoinChannels; QPointer _proxy; void determinePrefixes(); @@ -236,6 +286,8 @@ private: QTextCodec *_codecForEncoding; QTextCodec *_codecForDecoding; + static QTextCodec *_defaultCodecForEncoding; + static QTextCodec *_defaultCodecForDecoding; }; //! Stores all editable information about a network (as opposed to runtime state). diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index e1763041..81dc224b 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -113,6 +113,8 @@ void MainWin::init() { #ifdef SPUTDEV //showSettingsDlg(); //showAboutDlg(); + showNetworkDlg(); + exit(1); #endif } diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index ff582612..16aa61be 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -20,6 +20,7 @@ #include #include +#include #include "networkssettingspage.h" @@ -36,6 +37,13 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("G connectingIcon = QIcon(":/22x22/actions/gear"); disconnectedIcon = QIcon(":/22x22/actions/network-disconnect"); + foreach(int mib, QTextCodec::availableMibs()) { + QByteArray codec = QTextCodec::codecForMib(mib)->name(); + ui.sendEncoding->addItem(codec); + ui.recvEncoding->addItem(codec); + } + ui.sendEncoding->model()->sort(0); + ui.recvEncoding->model()->sort(0); currentId = 0; setEnabled(Client::isConnected()); // need a core connection! setWidgetStates(); @@ -46,6 +54,19 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("G connect(Client::instance(), SIGNAL(identityRemoved(IdentityId)), this, SLOT(clientIdentityRemoved(IdentityId))); connect(ui.identityList, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + connect(ui.randomServer, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.performEdit, SIGNAL(textChanged()), this, SLOT(widgetHasChanged())); + connect(ui.autoIdentify, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.autoIdentifyService, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); + connect(ui.autoIdentifyPassword, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); + connect(ui.useDefaultEncodings, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.sendEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + connect(ui.recvEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + connect(ui.autoReconnect, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.reconnectInterval, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); + connect(ui.reconnectRetries, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); + connect(ui.unlimitedRetries, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.rejoinOnReconnect, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); //connect(ui., SIGNAL(), this, SLOT(widgetHasChanged())); //connect(ui., SIGNAL(), this, SLOT(widgetHasChanged())); @@ -361,6 +382,30 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) { ui.serverList->addItem(QString("%1:%2").arg(v.toMap()["Host"].toString()).arg(v.toMap()["Port"].toUInt())); } setItemState(id); + ui.randomServer->setChecked(info.useRandomServer); + ui.performEdit->setPlainText(info.perform.join("\n")); + ui.autoIdentify->setChecked(info.useAutoIdentify); + ui.autoIdentifyService->setText(info.autoIdentifyService); + ui.autoIdentifyPassword->setText(info.autoIdentifyPassword); + if(info.codecForEncoding.isEmpty()) { + ui.sendEncoding->setCurrentIndex(ui.sendEncoding->findText(Network::defaultCodecForEncoding())); + ui.recvEncoding->setCurrentIndex(ui.recvEncoding->findText(Network::defaultCodecForDecoding())); + ui.useDefaultEncodings->setChecked(true); + } else { + ui.sendEncoding->setCurrentIndex(ui.sendEncoding->findText(info.codecForEncoding)); + ui.recvEncoding->setCurrentIndex(ui.recvEncoding->findText(info.codecForDecoding)); + ui.useDefaultEncodings->setChecked(false); + } + 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.rejoinOnReconnect->setChecked(info.rejoinChannels); } else { // just clear widgets ui.identityList->setCurrentIndex(-1); @@ -373,6 +418,23 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) { void NetworksSettingsPage::saveToNetworkInfo(NetworkInfo &info) { info.identity = ui.identityList->itemData(ui.identityList->currentIndex()).toInt(); + info.useRandomServer = ui.randomServer->isChecked(); + info.perform = ui.performEdit->toPlainText().split("\n"); + info.useAutoIdentify = ui.autoIdentify->isChecked(); + info.autoIdentifyService = ui.autoIdentifyService->text(); + info.autoIdentifyPassword = ui.autoIdentifyPassword->text(); + if(ui.useDefaultEncodings->isChecked()) { + info.codecForEncoding.clear(); + info.codecForDecoding.clear(); + } else { + info.codecForEncoding = ui.sendEncoding->currentText().toLatin1(); + info.codecForDecoding = ui.recvEncoding->currentText().toLatin1(); + } + info.useAutoReconnect = ui.autoReconnect->isChecked(); + info.autoReconnectInterval = ui.reconnectInterval->value(); + if(ui.unlimitedRetries->isChecked()) info.autoReconnectRetries = -1; + else info.autoReconnectRetries = ui.reconnectRetries->value(); + info.rejoinChannels = ui.rejoinOnReconnect->isChecked(); } /*** Network list ***/ diff --git a/src/qtui/settingspages/networkssettingspage.ui b/src/qtui/settingspages/networkssettingspage.ui index 01f1005e..c28c8521 100644 --- a/src/qtui/settingspages/networkssettingspage.ui +++ b/src/qtui/settingspages/networkssettingspage.ui @@ -335,7 +335,7 @@ - false + true Choose random server for connecting @@ -363,7 +363,7 @@ - false + true QTextEdit::NoWrap @@ -373,7 +373,7 @@ - false + true Auto Identify @@ -382,7 +382,7 @@ true - false + true @@ -395,7 +395,10 @@ - + + + true + NickServ @@ -403,13 +406,19 @@ + + true + Password: - + + + true + QLineEdit::PasswordEchoOnEdit @@ -431,6 +440,9 @@ + + true + Network Encoding @@ -457,6 +469,9 @@ 0 + + QComboBox::InsertAlphabetically + @@ -477,6 +492,9 @@ 0 + + QComboBox::InsertAlphabetically + @@ -499,7 +517,7 @@ - false + true Use defaults @@ -515,7 +533,7 @@ - false + true Automatic Reconnect diff --git a/version.inc b/version.inc index 7e125b64..d95f5e84 100644 --- a/version.inc +++ b/version.inc @@ -4,15 +4,15 @@ { using namespace Global; quasselVersion = "0.2.0-pre"; - quasselDate = "2008-02-12"; - quasselBuild = 510; + quasselDate = "2008-02-13"; + quasselBuild = 512; //! Minimum client build number the core needs - clientBuildNeeded = 509; + clientBuildNeeded = 512; clientVersionNeeded = quasselVersion; //! Minimum core build number the client needs - coreBuildNeeded = 509; + coreBuildNeeded = 512; coreVersionNeeded = quasselVersion; }