diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index b14df782f2..20e01cb5a5 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -672,6 +672,46 @@ + + + + + + Try to keep upload traffic under + + + + + + + + + + MB per day + + + Qt::PlainText + + + maxuploadtargetCheckbox + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 4767337d6d..d4ed792c92 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -132,6 +132,10 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) connect(ui->connectSocksTor, &QPushButton::toggled, ui->proxyPortTor, &QWidget::setEnabled); connect(ui->connectSocksTor, &QPushButton::toggled, this, &OptionsDialog::updateProxyValidationState); + ui->maxuploadtarget->setMinimum(144 /* MB/day */); + ui->maxuploadtarget->setMaximum(std::numeric_limits::max()); + connect(ui->maxuploadtargetCheckbox, SIGNAL(toggled(bool)), ui->maxuploadtarget, SLOT(setEnabled(bool))); + /* Window elements init */ #ifdef Q_OS_MACOS /* remove Window tab on Mac */ @@ -324,6 +328,20 @@ void OptionsDialog::setMapper() mapper->addMapping(ui->proxyIpTor, OptionsModel::ProxyIPTor); mapper->addMapping(ui->proxyPortTor, OptionsModel::ProxyPortTor); + int current_maxuploadtarget = model->data(model->index(OptionsModel::maxuploadtarget, 0), Qt::EditRole).toInt(); + if (current_maxuploadtarget == 0) { + ui->maxuploadtargetCheckbox->setChecked(false); + ui->maxuploadtarget->setEnabled(false); + ui->maxuploadtarget->setValue(ui->maxuploadtarget->minimum()); + } else { + if (current_maxuploadtarget < ui->maxuploadtarget->minimum()) { + ui->maxuploadtarget->setMinimum(current_maxuploadtarget); + } + ui->maxuploadtargetCheckbox->setChecked(true); + ui->maxuploadtarget->setEnabled(true); + ui->maxuploadtarget->setValue(current_maxuploadtarget); + } + /* Window */ #ifndef Q_OS_MACOS if (QSystemTrayIcon::isSystemTrayAvailable()) { @@ -431,6 +449,12 @@ void OptionsDialog::on_okButton_clicked() model->setData(model->index(OptionsModel::FontForMoney, 0), ui->moneyFont->itemData(ui->moneyFont->currentIndex())); model->setData(model->index(OptionsModel::FontForQRCodes, 0), ui->qrFont->itemData(ui->qrFont->currentIndex())); + if (ui->maxuploadtargetCheckbox->isChecked()) { + model->setData(model->index(OptionsModel::maxuploadtarget, 0), ui->maxuploadtarget->value()); + } else { + model->setData(model->index(OptionsModel::maxuploadtarget, 0), 0); + } + mapper->submit(); accept(); updateDefaultProxyNets(); diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 2beecc4aa9..c1d34481bf 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include // for -dbcache defaults #include #include // For DEFAULT_SCRIPTCHECK_THREADS @@ -512,6 +513,8 @@ QVariant OptionsModel::getOption(OptionID option, const std::string& suffix) con return SettingToBool(setting(), false); case MaskValues: return m_mask_values; + case maxuploadtarget: + return qlonglong(node().context()->connman->GetMaxOutboundTarget() / 1024 / 1024); default: return QVariant(); } @@ -752,6 +755,14 @@ bool OptionsModel::setOption(OptionID option, const QVariant& value, const std:: m_mask_values = value.toBool(); settings.setValue("mask_values", m_mask_values); break; + case maxuploadtarget: + { + if (changed()) { + gArgs.ModifyRWConfigFile("maxuploadtarget", value.toString().toStdString()); + node().context()->connman->SetMaxOutboundTarget(value.toLongLong() * 1024 * 1024); + } + break; + } default: break; } diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 027dd42fe1..85342558d5 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -78,6 +78,7 @@ public: Server, // bool EnablePSBTControls, // bool MaskValues, // bool + maxuploadtarget, OptionIDRowCount, };