diff --git a/IConfig/IConfigOptions.cpp b/IConfig/IConfigOptions.cpp index 9a83886..572d928 100644 --- a/IConfig/IConfigOptions.cpp +++ b/IConfig/IConfigOptions.cpp @@ -63,24 +63,26 @@ IConfigOptions::~IConfigOptions() bool IConfigOptions::isChanged() const { bool changed = cf_ShowOptions != ui->chkShowOptions->isChecked() - || cf_Reconnect != ui->chkReconnect->isChecked() - || cf_RejoinChannelsOnConnect != ui->chkRejoinConnect->isChecked() - || cf_ShowWhoisActiveWindow != ui->chkWhoisActive->isChecked() - || cf_ShowModeInMessage != ui->chkShowModeMsg->isChecked() - || cf_TrayNotify != ui->chkTrayNotify->isChecked() - || cf_TrayNotifyDelay != ui->edTrayDelay->value() - || cf_ShowTimestamp != ui->chkTimestamp->isChecked() - || cf_TimestampFormat != ui->edTimestamp->text() - || cf_QuitMessage != ui->edQuit->text() - || cf_Font.family() != ui->edFont->currentFont().family() - || cf_FontSize != ui->edFontSize->value() - || cf_BgImageEnabled != ui->chkEnableBgImage->isChecked() - || cf_BgImagePath != ui->edImage->text() - // TODO background image scaling combo box - || cf_BgImageOpacity != ui->hsImageOpacity->value() - || cf_SSLSelfSigned != ui->chkSSLSelfsigned->isChecked() - || cf_SSLExpired != ui->chkSSLExpired->isChecked() - || cf_SSLCNMismatch != ui->chkSSLCNMismatch->isChecked(); + || cf_Reconnect != ui->chkReconnect->isChecked() + || cf_RejoinChannelsOnConnect != ui->chkRejoinConnect->isChecked() + || cf_ShowWhoisActiveWindow != ui->chkWhoisActive->isChecked() + || cf_ShowModeInMessage != ui->chkShowModeMsg->isChecked() + || cf_TrayNotify != ui->chkTrayNotify->isChecked() + || cf_TrayNotifyDelay != ui->edTrayDelay->value() + || cf_ShowTimestamp != ui->chkTimestamp->isChecked() + || cf_TimestampFormat != ui->edTimestamp->text() + || cf_ManualKeepaliveEnabled != ui->chkManualKeepalive->isChecked() + || cf_ManualKeepalive != ui->edManualKeepalive->value() + || cf_QuitMessage != ui->edQuit->text() + || cf_Font.family() != ui->edFont->currentFont().family() + || cf_FontSize != ui->edFontSize->value() + || cf_BgImageEnabled != ui->chkEnableBgImage->isChecked() + || cf_BgImagePath != ui->edImage->text() + // TODO background image scaling combo box + || cf_BgImageOpacity != ui->hsImageOpacity->value() + || cf_SSLSelfSigned != ui->chkSSLSelfsigned->isChecked() + || cf_SSLExpired != ui->chkSSLExpired->isChecked() + || cf_SSLCNMismatch != ui->chkSSLCNMismatch->isChecked(); if (changed) return true; @@ -90,27 +92,29 @@ bool IConfigOptions::isChanged() const void IConfigOptions::save() { - ConfigMgr& conf = ConfigMgr::instance(); - conf.setCommon("ShowOptions", QString::number(ui->chkShowOptions->isChecked())); - conf.setCommon("Reconnect", QString::number(ui->chkReconnect->isChecked())); - conf.setCommon("RejoinChannelsOnConnect", QString::number(ui->chkRejoinConnect->isChecked())); - conf.setCommon("ShowWhoisActiveWindow", QString::number(ui->chkWhoisActive->isChecked())); - conf.setCommon("ShowModeInMessage", QString::number(ui->chkShowModeMsg->isChecked())); - conf.setCommon("TrayNotify", QString::number(ui->chkTrayNotify->isChecked())); - conf.setCommon("TrayNotifyDelay", QString::number(ui->edTrayDelay->value())); - conf.setCommon("ShowTimestamp", QString::number(ui->chkTimestamp->isChecked())); - conf.setCommon("TimestampFormat", ui->edTimestamp->text()); - conf.setCommon("QuitMessage", ui->edQuit->text()); - conf.setCommon("Font", ui->edFont->currentFont().family()); - conf.setCommon("FontSize", QString::number(ui->edFontSize->value())); - conf.setCommon("BgImageEnabled", QString::number(ui->chkEnableBgImage->isChecked())); - conf.setCommon("BgImagePath", ui->edImage->text()); - conf.setCommon("BgImageOpacity", QString::number(ui->hsImageOpacity->value())); - conf.setCommon("SSLSelfsigned", QString::number(ui->chkSSLSelfsigned->isChecked())); - conf.setCommon("SSLExpired", QString::number(ui->chkSSLExpired->isChecked())); - conf.setCommon("SSLCNMismatch", QString::number(ui->chkSSLCNMismatch->isChecked())); - reload(); - colorCfg->save(); + ConfigMgr& conf = ConfigMgr::instance(); + conf.setCommon("ShowOptions", QString::number(ui->chkShowOptions->isChecked())); + conf.setCommon("Reconnect", QString::number(ui->chkReconnect->isChecked())); + conf.setCommon("RejoinChannelsOnConnect", QString::number(ui->chkRejoinConnect->isChecked())); + conf.setCommon("ShowWhoisActiveWindow", QString::number(ui->chkWhoisActive->isChecked())); + conf.setCommon("ShowModeInMessage", QString::number(ui->chkShowModeMsg->isChecked())); + conf.setCommon("TrayNotify", QString::number(ui->chkTrayNotify->isChecked())); + conf.setCommon("TrayNotifyDelay", QString::number(ui->edTrayDelay->value())); + conf.setCommon("ShowTimestamp", QString::number(ui->chkTimestamp->isChecked())); + conf.setCommon("TimestampFormat", ui->edTimestamp->text()); + conf.setCommon("ManualKeepaliveEnabled", QString::number(ui->chkManualKeepalive->isChecked())); + conf.setCommon("ManualKeepalive", QString::number(ui->edManualKeepalive->value())); + conf.setCommon("QuitMessage", ui->edQuit->text()); + conf.setCommon("Font", ui->edFont->currentFont().family()); + conf.setCommon("FontSize", QString::number(ui->edFontSize->value())); + conf.setCommon("BgImageEnabled", QString::number(ui->chkEnableBgImage->isChecked())); + conf.setCommon("BgImagePath", ui->edImage->text()); + conf.setCommon("BgImageOpacity", QString::number(ui->hsImageOpacity->value())); + conf.setCommon("SSLSelfsigned", QString::number(ui->chkSSLSelfsigned->isChecked())); + conf.setCommon("SSLExpired", QString::number(ui->chkSSLExpired->isChecked())); + conf.setCommon("SSLCNMismatch", QString::number(ui->chkSSLCNMismatch->isChecked())); + reload(); + colorCfg->save(); } void IConfigOptions::reset() @@ -124,6 +128,8 @@ void IConfigOptions::reset() ui->edTrayDelay->setValue(cf_TrayNotifyDelay); ui->chkTimestamp->setChecked(cf_ShowTimestamp); ui->edTimestamp->setText(cf_TimestampFormat); + ui->chkManualKeepalive->setChecked(cf_ManualKeepaliveEnabled); + ui->edManualKeepalive->setValue(cf_ManualKeepalive); ui->edQuit->setText(cf_QuitMessage); ui->edFont->setCurrentFont(cf_Font); ui->edFontSize->setValue(cf_FontSize); @@ -155,8 +161,10 @@ void IConfigOptions::reload() cf_TrayNotify = conf.common("TrayNotify").toInt(); cf_TrayNotifyDelay = conf.common("TrayNotifyDelay").toInt(); cf_ShowTimestamp = conf.common("ShowTimestamp").toInt(); - cf_TimestampFormat = conf.common("TimestampFormat"); - cf_QuitMessage = conf.common("QuitMessage"); + cf_TimestampFormat = conf.common("TimestampFormat"); + cf_ManualKeepaliveEnabled = conf.common("ManualKeepaliveEnabled").toInt(); + cf_ManualKeepalive = conf.common("ManualKeepalive").toInt(); + cf_QuitMessage = conf.common("QuitMessage"); cf_Font = conf.common("Font"); cf_FontSize = conf.common("FontSize").toInt(); cf_BgImageEnabled = conf.common("BgImageEnabled").toInt(); diff --git a/IConfig/IConfigOptions.h b/IConfig/IConfigOptions.h index 0933c6e..13df438 100644 --- a/IConfig/IConfigOptions.h +++ b/IConfig/IConfigOptions.h @@ -42,7 +42,6 @@ public: private slots: void on_chkSSLExpired_toggled(bool checked); - void on_btnImageBrowse_clicked(); private: @@ -59,6 +58,8 @@ private: int cf_TrayNotifyDelay; bool cf_ShowTimestamp; QString cf_TimestampFormat; + bool cf_ManualKeepaliveEnabled; + int cf_ManualKeepalive; QString cf_QuitMessage; QFont cf_Font; int cf_FontSize; diff --git a/IConfig/IConfigOptions.ui b/IConfig/IConfigOptions.ui index dbb2d31..6ce4078 100644 --- a/IConfig/IConfigOptions.ui +++ b/IConfig/IConfigOptions.ui @@ -120,6 +120,43 @@ </item> </layout> </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <item> + <widget class="QCheckBox" name="chkManualKeepalive"> + <property name="text"> + <string>Manual keep-alive</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="edManualKeepalive"> + <property name="suffix"> + <string> sec</string> + </property> + <property name="minimum"> + <number>10</number> + </property> + <property name="maximum"> + <number>120</number> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> <item> <widget class="QLabel" name="label"> <property name="text"> @@ -364,6 +401,8 @@ <tabstop>edTrayDelay</tabstop> <tabstop>chkTimestamp</tabstop> <tabstop>edTimestamp</tabstop> + <tabstop>chkManualKeepalive</tabstop> + <tabstop>edManualKeepalive</tabstop> <tabstop>edQuit</tabstop> <tabstop>edFont</tabstop> <tabstop>edFontSize</tabstop> diff --git a/IdealIRC/ConfigMgr.cpp b/IdealIRC/ConfigMgr.cpp index 2b3f7ae..fd0da29 100644 --- a/IdealIRC/ConfigMgr.cpp +++ b/IdealIRC/ConfigMgr.cpp @@ -166,6 +166,8 @@ void ConfigMgr::loadCommon(IniFile& ini) commonData.insert("TrayNotifyDelay", ini.value("Common", "TrayNotifyDelay", "5")); commonData.insert("ShowTimestamp", ini.value("Common", "ShowTimestamp", "1")); commonData.insert("TimestampFormat", ini.value("Common", "TimestampFormat", "[HH:mm]")); + commonData.insert("ManualKeepaliveEnabled", ini.value("Common", "ManualKeepaliveEnabled", "0")); + commonData.insert("ManualKeepalive", ini.value("Common", "ManualKeepalive", "10")); commonData.insert("QuitMessage", ini.value("Common", "QuitMessage")); commonData.insert("Font", ini.value("Common", "Font", defaultFontName)); commonData.insert("FontSize", ini.value("Common", "FontSize", "12")); diff --git a/IdealIRC/IdealIRC.cpp b/IdealIRC/IdealIRC.cpp index 467fba9..1bc99f5 100644 --- a/IdealIRC/IdealIRC.cpp +++ b/IdealIRC/IdealIRC.cpp @@ -214,7 +214,11 @@ void IdealIRC::connectToServer(bool newStatus) con.setIdent(username.toStdString()); con.setNickname(nickname.toStdString()); - const auto cfgSSLExcept_Expired = conf.common("SSLExpired"); + bool manualKeepaliveEnabled = conf.common("ManualKeepaliveEnabled").toInt(); + int manualKeepalive = manualKeepaliveEnabled ? conf.common("ManualKeepalive").toInt() : 0; + con.setManualKeepalive(std::chrono::seconds(manualKeepalive)); + + const auto cfgSSLExcept_Expired = conf.common("SSLExpired"); const auto cfgSSLExcept_Selfsigned = conf.common("SSLSelfsigned"); const auto cfgSSLExcept_CNMismatch = conf.common("SSLCNMismatch"); con.exceptSSL_Expired(cfgSSLExcept_Expired == "1");