Implement proxy settings
This commit is contained in:
parent
fcb8612c10
commit
0a312d3b08
125
MultiMC.cpp
125
MultiMC.cpp
@ -198,56 +198,12 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override)
|
|||||||
// init the http meta cache
|
// init the http meta cache
|
||||||
initHttpMetaCache();
|
initHttpMetaCache();
|
||||||
|
|
||||||
// set up a basic autodetected proxy (system default)
|
|
||||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
|
||||||
|
|
||||||
QLOG_INFO() << "Detecting system proxy settings...";
|
|
||||||
auto proxies = QNetworkProxyFactory::systemProxyForQuery();
|
|
||||||
if (proxies.size() == 1 && proxies[0].type() == QNetworkProxy::NoProxy)
|
|
||||||
{
|
|
||||||
QLOG_INFO() << "No proxy found.";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
for (auto proxy : proxies)
|
|
||||||
{
|
|
||||||
QString proxyDesc;
|
|
||||||
if (proxy.type() == QNetworkProxy::NoProxy)
|
|
||||||
{
|
|
||||||
QLOG_INFO() << "Using no proxy is an option!";
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch (proxy.type())
|
|
||||||
{
|
|
||||||
case QNetworkProxy::DefaultProxy:
|
|
||||||
proxyDesc = "Default proxy: ";
|
|
||||||
break;
|
|
||||||
case QNetworkProxy::Socks5Proxy:
|
|
||||||
proxyDesc = "Socks5 proxy: ";
|
|
||||||
break;
|
|
||||||
case QNetworkProxy::HttpProxy:
|
|
||||||
proxyDesc = "HTTP proxy: ";
|
|
||||||
break;
|
|
||||||
case QNetworkProxy::HttpCachingProxy:
|
|
||||||
proxyDesc = "HTTP caching: ";
|
|
||||||
break;
|
|
||||||
case QNetworkProxy::FtpCachingProxy:
|
|
||||||
proxyDesc = "FTP caching: ";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
proxyDesc = "DERP proxy: ";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
proxyDesc += QString("%3@%1:%2 pass %4")
|
|
||||||
.arg(proxy.hostName())
|
|
||||||
.arg(proxy.port())
|
|
||||||
.arg(proxy.user())
|
|
||||||
.arg(proxy.password());
|
|
||||||
QLOG_INFO() << proxyDesc;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create the global network manager
|
// create the global network manager
|
||||||
m_qnam.reset(new QNetworkAccessManager(this));
|
m_qnam.reset(new QNetworkAccessManager(this));
|
||||||
|
|
||||||
|
// init proxy settings
|
||||||
|
updateProxySettings();
|
||||||
|
|
||||||
// launch instance, if that's what should be done
|
// launch instance, if that's what should be done
|
||||||
// WARNING: disabled until further notice
|
// WARNING: disabled until further notice
|
||||||
/*
|
/*
|
||||||
@ -424,6 +380,13 @@ void MultiMC::initGlobalSettings()
|
|||||||
m_settings->registerSetting({"MinecraftWinWidth", "MCWindowWidth"}, 854);
|
m_settings->registerSetting({"MinecraftWinWidth", "MCWindowWidth"}, 854);
|
||||||
m_settings->registerSetting({"MinecraftWinHeight", "MCWindowHeight"}, 480);
|
m_settings->registerSetting({"MinecraftWinHeight", "MCWindowHeight"}, 480);
|
||||||
|
|
||||||
|
// Proxy Settings
|
||||||
|
m_settings->registerSetting("ProxyType", "Default");
|
||||||
|
m_settings->registerSetting({"ProxyAddr", "ProxyHostName"}, "127.0.0.1");
|
||||||
|
m_settings->registerSetting("ProxyPort", 8080);
|
||||||
|
m_settings->registerSetting({"ProxyUser", "ProxyUsername"}, "");
|
||||||
|
m_settings->registerSetting({"ProxyPass", "ProxyPassword"}, "");
|
||||||
|
|
||||||
// Memory
|
// Memory
|
||||||
m_settings->registerSetting({"MinMemAlloc", "MinMemoryAlloc"}, 512);
|
m_settings->registerSetting({"MinMemAlloc", "MinMemoryAlloc"}, 512);
|
||||||
m_settings->registerSetting({"MaxMemAlloc", "MaxMemoryAlloc"}, 1024);
|
m_settings->registerSetting({"MaxMemAlloc", "MaxMemoryAlloc"}, 1024);
|
||||||
@ -467,6 +430,74 @@ void MultiMC::initHttpMetaCache()
|
|||||||
m_metacache->Load();
|
m_metacache->Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MultiMC::updateProxySettings()
|
||||||
|
{
|
||||||
|
QString proxyTypeStr = settings()->get("ProxyType").toString();
|
||||||
|
|
||||||
|
// Get the proxy settings from the settings object.
|
||||||
|
QString addr = settings()->get("ProxyAddr").toString();
|
||||||
|
int port = settings()->get("ProxyPort").value<qint16>();
|
||||||
|
QString user = settings()->get("ProxyUser").toString();
|
||||||
|
QString pass = settings()->get("ProxyPass").toString();
|
||||||
|
|
||||||
|
// Set the application proxy settings.
|
||||||
|
if (proxyTypeStr == "SOCKS5")
|
||||||
|
{
|
||||||
|
QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, addr, port, user, pass));
|
||||||
|
}
|
||||||
|
else if (proxyTypeStr == "HTTP")
|
||||||
|
{
|
||||||
|
QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy, addr, port, user, pass));
|
||||||
|
}
|
||||||
|
else if (proxyTypeStr == "None")
|
||||||
|
{
|
||||||
|
// If we have no proxy set, set no proxy and return.
|
||||||
|
QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::NoProxy));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If we have "Default" selected, set Qt to use the system proxy settings.
|
||||||
|
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
QLOG_INFO() << "Detecting proxy settings...";
|
||||||
|
QNetworkProxy proxy = QNetworkProxy::applicationProxy();
|
||||||
|
if (m_qnam.get()) m_qnam->setProxy(proxy);
|
||||||
|
QString proxyDesc;
|
||||||
|
if (proxy.type() == QNetworkProxy::NoProxy)
|
||||||
|
{
|
||||||
|
QLOG_INFO() << "Using no proxy is an option!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (proxy.type())
|
||||||
|
{
|
||||||
|
case QNetworkProxy::DefaultProxy:
|
||||||
|
proxyDesc = "Default proxy: ";
|
||||||
|
break;
|
||||||
|
case QNetworkProxy::Socks5Proxy:
|
||||||
|
proxyDesc = "Socks5 proxy: ";
|
||||||
|
break;
|
||||||
|
case QNetworkProxy::HttpProxy:
|
||||||
|
proxyDesc = "HTTP proxy: ";
|
||||||
|
break;
|
||||||
|
case QNetworkProxy::HttpCachingProxy:
|
||||||
|
proxyDesc = "HTTP caching: ";
|
||||||
|
break;
|
||||||
|
case QNetworkProxy::FtpCachingProxy:
|
||||||
|
proxyDesc = "FTP caching: ";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
proxyDesc = "DERP proxy: ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
proxyDesc += QString("%3@%1:%2 pass %4")
|
||||||
|
.arg(proxy.hostName())
|
||||||
|
.arg(proxy.port())
|
||||||
|
.arg(proxy.user())
|
||||||
|
.arg(proxy.password());
|
||||||
|
QLOG_INFO() << proxyDesc;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<IconList> MultiMC::icons()
|
std::shared_ptr<IconList> MultiMC::icons()
|
||||||
{
|
{
|
||||||
if (!m_icons)
|
if (!m_icons)
|
||||||
|
@ -123,6 +123,11 @@ public:
|
|||||||
|
|
||||||
void installUpdates(const QString updateFilesDir, UpdateFlags flags = None);
|
void installUpdates(const QString updateFilesDir, UpdateFlags flags = None);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Updates the application proxy settings from the settings object.
|
||||||
|
*/
|
||||||
|
void updateProxySettings();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Opens a json file using either a system default editor, or, if note empty, the editor
|
* Opens a json file using either a system default editor, or, if note empty, the editor
|
||||||
* specified in the settings
|
* specified in the settings
|
||||||
|
@ -83,6 +83,8 @@ void SettingsDialog::updateCheckboxStuff()
|
|||||||
{
|
{
|
||||||
ui->windowWidthSpinBox->setEnabled(!ui->maximizedCheckBox->isChecked());
|
ui->windowWidthSpinBox->setEnabled(!ui->maximizedCheckBox->isChecked());
|
||||||
ui->windowHeightSpinBox->setEnabled(!ui->maximizedCheckBox->isChecked());
|
ui->windowHeightSpinBox->setEnabled(!ui->maximizedCheckBox->isChecked());
|
||||||
|
ui->proxyAddrBox->setEnabled(!ui->proxyNoneBtn->isChecked() && !ui->proxyDefaultBtn->isChecked());
|
||||||
|
ui->proxyAuthBox->setEnabled(!ui->proxyNoneBtn->isChecked() && !ui->proxyDefaultBtn->isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsDialog::on_ftbLauncherBrowseBtn_clicked()
|
void SettingsDialog::on_ftbLauncherBrowseBtn_clicked()
|
||||||
@ -202,6 +204,9 @@ void SettingsDialog::on_buttonBox_accepted()
|
|||||||
{
|
{
|
||||||
applySettings(MMC->settings().get());
|
applySettings(MMC->settings().get());
|
||||||
|
|
||||||
|
// Apply proxy settings
|
||||||
|
MMC->updateProxySettings();
|
||||||
|
|
||||||
MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
|
MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,6 +215,12 @@ void SettingsDialog::on_buttonBox_rejected()
|
|||||||
MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
|
MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsDialog::on_proxyNoneBtn_toggled(bool checked)
|
||||||
|
{
|
||||||
|
Q_UNUSED(checked);
|
||||||
|
updateCheckboxStuff();
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsDialog::refreshUpdateChannelList()
|
void SettingsDialog::refreshUpdateChannelList()
|
||||||
{
|
{
|
||||||
// Stop listening for selection changes. It's going to change a lot while we update it and we don't need to update the
|
// Stop listening for selection changes. It's going to change a lot while we update it and we don't need to update the
|
||||||
@ -310,6 +321,19 @@ void SettingsDialog::applySettings(SettingsObject *s)
|
|||||||
s->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
|
s->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
|
||||||
s->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
|
s->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
|
||||||
|
|
||||||
|
// Proxy
|
||||||
|
QString proxyType = "None";
|
||||||
|
if (ui->proxyDefaultBtn->isChecked()) proxyType = "Default";
|
||||||
|
else if (ui->proxyNoneBtn->isChecked()) proxyType = "None";
|
||||||
|
else if (ui->proxySOCKS5Btn->isChecked()) proxyType = "SOCKS5";
|
||||||
|
else if (ui->proxyHTTPBtn->isChecked()) proxyType = "HTTP";
|
||||||
|
|
||||||
|
s->set("ProxyType", proxyType);
|
||||||
|
s->set("ProxyAddr", ui->proxyAddrEdit->text());
|
||||||
|
s->set("ProxyPort", ui->proxyPortEdit->value());
|
||||||
|
s->set("ProxyUser", ui->proxyUserEdit->text());
|
||||||
|
s->set("ProxyPass", ui->proxyPassEdit->text());
|
||||||
|
|
||||||
// Memory
|
// Memory
|
||||||
s->set("MinMemAlloc", ui->minMemSpinBox->value());
|
s->set("MinMemAlloc", ui->minMemSpinBox->value());
|
||||||
s->set("MaxMemAlloc", ui->maxMemSpinBox->value());
|
s->set("MaxMemAlloc", ui->maxMemSpinBox->value());
|
||||||
@ -384,6 +408,18 @@ void SettingsDialog::loadSettings(SettingsObject *s)
|
|||||||
ui->sortByNameBtn->setChecked(true);
|
ui->sortByNameBtn->setChecked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Proxy
|
||||||
|
QString proxyType = s->get("ProxyType").toString();
|
||||||
|
if (proxyType == "Default") ui->proxyDefaultBtn->setChecked(true);
|
||||||
|
else if (proxyType == "None") ui->proxyNoneBtn->setChecked(true);
|
||||||
|
else if (proxyType == "SOCKS5") ui->proxySOCKS5Btn->setChecked(true);
|
||||||
|
else if (proxyType == "HTTP") ui->proxyHTTPBtn->setChecked(true);
|
||||||
|
|
||||||
|
ui->proxyAddrEdit->setText(s->get("ProxyAddr").toString());
|
||||||
|
ui->proxyPortEdit->setValue(s->get("ProxyPort").value<qint16>());
|
||||||
|
ui->proxyUserEdit->setText(s->get("ProxyUser").toString());
|
||||||
|
ui->proxyPassEdit->setText(s->get("ProxyPass").toString());
|
||||||
|
|
||||||
// Java Settings
|
// Java Settings
|
||||||
ui->javaPathTextBox->setText(s->get("JavaPath").toString());
|
ui->javaPathTextBox->setText(s->get("JavaPath").toString());
|
||||||
ui->jvmArgsTextBox->setText(s->get("JvmArgs").toString());
|
ui->jvmArgsTextBox->setText(s->get("JvmArgs").toString());
|
||||||
@ -447,4 +483,3 @@ void SettingsDialog::checkFinished(JavaCheckResult result)
|
|||||||
"or set the path to the java executable."));
|
"or set the path to the java executable."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,6 +75,8 @@ slots:
|
|||||||
|
|
||||||
void checkFinished(JavaCheckResult result);
|
void checkFinished(JavaCheckResult result);
|
||||||
|
|
||||||
|
void on_proxyNoneBtn_toggled(bool checked);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Updates the list of update channels in the combo box.
|
* Updates the list of update channels in the combo box.
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>526</width>
|
<width>526</width>
|
||||||
<height>639</height>
|
<height>683</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -33,7 +33,7 @@
|
|||||||
<enum>QTabWidget::Rounded</enum>
|
<enum>QTabWidget::Rounded</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="generalTab">
|
<widget class="QWidget" name="generalTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
@ -424,6 +424,153 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="networkTab">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Network settings.</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Network</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="proxySettingsBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Proxy</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="proxyTypeBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Type</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="proxyDefaultBtn">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Uses your system's default proxy settings.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Default</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="proxyNoneBtn">
|
||||||
|
<property name="text">
|
||||||
|
<string>None</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="proxySOCKS5Btn">
|
||||||
|
<property name="text">
|
||||||
|
<string>SOCKS5</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="proxyHTTPBtn">
|
||||||
|
<property name="text">
|
||||||
|
<string>HTTP</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="proxyAddrBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Address and Port</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="proxyAddrEdit">
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>127.0.0.1</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="proxyPortEdit">
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::PlusMinus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>65535</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>8080</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="proxyAuthBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Authentication</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="proxyUserEdit"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="proxyUsernameLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Username:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="proxyPasswordLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Password:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="proxyPassEdit">
|
||||||
|
<property name="echoMode">
|
||||||
|
<enum>QLineEdit::Password</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="proxyPlainTextWarningLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Note: Proxy username and password are stored in plain text inside MultiMC's configuration file!</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
<widget class="QWidget" name="javaTab">
|
<widget class="QWidget" name="javaTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Java</string>
|
<string>Java</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user