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,
};