feat: support many new settings;

refactor: config format
This commit is contained in:
Chenx Dust
2025-02-25 00:51:39 +08:00
parent faeda31823
commit 711d254ded
14 changed files with 887 additions and 521 deletions

View File

@@ -25,70 +25,34 @@ SettingWindow::SettingWindow(QWidget *parent, QSettings *inputSettings) :
connect(ui->portForwardingPushButton, &QPushButton::clicked,
[&]()
{
portForwardingWindow = new PortForwardingWindow(this);
portForwardingWindow->setPortForwarding(tcpPortForwarding, udpPortForwarding);
extraSettingWindow = new ExtraSettingWindow(this);
extraSettingWindow->setup(tcpPortForwarding, udpPortForwarding, customDNS, customProxyDomain, extraArguments);
connect(portForwardingWindow, &PortForwardingWindow::applied, this,
[&](const QString &tcpForwarding, const QString &udpForwarding)
{
tcpPortForwarding = tcpForwarding;
udpPortForwarding = udpForwarding;
});
connect(extraSettingWindow, &ExtraSettingWindow::applied, this,
[&](const QString& tcpForwarding, const QString& udpForwarding, const QString& customDNS_, const QString& customProxyDomain_, const QString& extraArg)
{
tcpPortForwarding = tcpForwarding;
udpPortForwarding = udpForwarding;
customDNS = customDNS_;
customProxyDomain = customProxyDomain_;
extraArguments = extraArg;
});
portForwardingWindow->show();
extraSettingWindow->show();
});
auto applySettings = [&]()
{
if (settings->value("Common/AutoStart").toBool() != ui->autoStartCheckBox->isChecked())
Utils::setAutoStart(ui->autoStartCheckBox->isChecked());
settings->setValue("Common/Username", ui->usernameLineEdit->text());
settings->setValue("Common/Password", QString(ui->passwordLineEdit->text().toUtf8().toBase64()));
settings->setValue("Common/AutoStart", ui->autoStartCheckBox->isChecked());
settings->setValue("Common/ConnectAfterStart", ui->connectAfterStartCheckBox->isChecked());
settings->setValue("Common/CheckUpdateAfterStart", ui->checkUpdateAfterStartCheckBox->isChecked());
settings->setValue("ZJUConnect/ServerAddress", ui->serverAddressLineEdit->text());
settings->setValue("ZJUConnect/ServerPort", ui->serverPortSpinBox->value());
settings->setValue("ZJUConnect/DNS", ui->dnsLineEdit->text());
settings->setValue("ZJUConnect/DNSAuto", ui->dnsAutoCheckBox->isChecked());
settings->setValue("ZJUConnect/Socks5Port", ui->socks5PortSpinBox->value());
settings->setValue("ZJUConnect/HttpPort", ui->httpPortSpinBox->value());
settings->setValue("ZJUConnect/MultiLine", ui->multiLineCheckBox->isChecked());
settings->setValue("ZJUConnect/ProxyAll", ui->proxyAllCheckBox->isChecked());
settings->setValue("ZJUConnect/Debug", ui->debugCheckBox->isChecked());
settings->setValue("ZJUConnect/TcpPortForwarding", tcpPortForwarding);
settings->setValue("ZJUConnect/UdpPortForwarding", udpPortForwarding);
settings->setValue("ZJUConnect/AutoReconnect", ui->autoReconnectCheckBox->isChecked());
settings->setValue("ZJUConnect/ReconnectTime", ui->reconnectTimeSpinBox->value());
settings->setValue("ZJUConnect/AutoSetProxy", ui->autoSetProxyCheckBox->isChecked());
settings->setValue("ZJUConnect/Route", ui->routeCheckBox->isChecked());
settings->setValue("ZJUConnect/SecondaryDNS", ui->secondaryDnsLineEdit->text());
settings->setValue("ZJUConnect/ShadowsocksUrl", ui->shadowsocksUrlLineEdit->text());
settings->setValue("ZJUConnect/SystemProxyBypass", ui->systemProxyBypassLineEdit->text());
settings->setValue("ZJUConnect/KeepAlive", ui->keepAliveCheckBox->isChecked());
settings->setValue("ZJUConnect/TunMode", ui->tunCheckBox->isChecked());
settings->setValue("ZJUConnect/DNSHijack", ui->dnsHijackCheckBox->isChecked());
settings->setValue("ZJUConnect/OutsideAccess", ui->outsideAccessCheckBox->isChecked());
settings->setValue("ZJUConnect/SkipDomainResource", ui->skipDomainResourceCheckBox->isChecked());
settings->setValue("Common/ConfigVersion", Utils::CONFIG_VERSION);
settings->sync();
};
connect(ui->buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, [&, applySettings](){
connect(ui->buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, [&](){
if (!Utils::credentialCheck(ui->usernameLineEdit->text(), ui->passwordLineEdit->text()))
return;
applySettings();
accept();
});
connect(ui->buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, [&, applySettings](){
connect(ui->buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, [&](){
if (!Utils::credentialCheck(ui->usernameLineEdit->text(), ui->passwordLineEdit->text()))
return;
applySettings();
loadSettings();
});
connect(ui->resetDefaultPushButton, &QPushButton::clicked,
@@ -98,7 +62,8 @@ SettingWindow::SettingWindow(QWidget *parent, QSettings *inputSettings) :
if (status == QMessageBox::Ok)
{
settings->clear();
settings->sync();
loadSettings();
applySettings();
loadSettings();
}
});
@@ -156,6 +121,12 @@ SettingWindow::SettingWindow(QWidget *parent, QSettings *inputSettings) :
{
ui->passwordLineEdit->setEchoMode(state == Qt::Checked ? QLineEdit::Normal : QLineEdit::Password);
});
connect(ui->totpSecretVisibleCheckBox, &QCheckBox::checkStateChanged,
[&](Qt::CheckState state)
{
ui->totpSecretLineEdit->setEchoMode(state == Qt::Checked ? QLineEdit::Normal : QLineEdit::Password);
});
}
SettingWindow::~SettingWindow()
@@ -165,41 +136,119 @@ SettingWindow::~SettingWindow()
void SettingWindow::loadSettings()
{
ui->usernameLineEdit->setText(settings->value("Common/Username", "").toString());
ui->passwordLineEdit->setText(
QByteArray::fromBase64(settings->value("Common/Password", "").toString().toUtf8())
ui->configVersionLabel->setText(
"当前配置文件版本:" + QString::number(settings->value("Common/ConfigVersion").toInt()) +
"\n程序配置文件版本:" + QString::number(Utils::CONFIG_VERSION)
);
ui->usernameLineEdit->setText(settings->value("Credential/Username", "").toString());
ui->passwordLineEdit->setText(
QByteArray::fromBase64(settings->value("Credential/Password", "").toString().toUtf8())
);
ui->totpSecretLineEdit->setText(settings->value("Credential/TOTPSecret", "").toString());
ui->autoStartCheckBox->setChecked(settings->value("Common/AutoStart", false).toBool());
ui->connectAfterStartCheckBox->setChecked(settings->value("Common/ConnectAfterStart", false).toBool());
ui->checkUpdateAfterStartCheckBox->setChecked(settings->value("Common/CheckUpdateAfterStart", true).toBool());
ui->autoSetProxyCheckBox->setChecked(settings->value("Common/AutoSetProxy", false).toBool());
ui->reconnectTimeSpinBox->setValue(settings->value("Common/ReconnectTime", 1).toInt());
ui->autoReconnectCheckBox->setChecked(settings->value("Common/AutoReconnect", false).toBool());
ui->systemProxyBypassLineEdit->setText(settings->value("Common/SystemProxyBypass", "localhost").toString());
ui->serverAddressLineEdit->setText(settings->value("ZJUConnect/ServerAddress", "vpn.hitsz.edu.cn").toString());
ui->serverPortSpinBox->setValue(settings->value("ZJUConnect/ServerPort", 443).toInt());
ui->dnsLineEdit->setText(settings->value("ZJUConnect/DNS").toString());
ui->dnsAutoCheckBox->setChecked(settings->value("ZJUConnect/DNSAuto", true).toBool());
ui->secondaryDnsLineEdit->setText(settings->value("ZJUConnect/SecondaryDNS", "").toString());
ui->dnsTTLSpinBox->setValue(settings->value("ZJUConnect/DNSTTL", 3600).toInt());
ui->socks5PortSpinBox->setValue(settings->value("ZJUConnect/Socks5Port", 11080).toInt());
ui->httpPortSpinBox->setValue(settings->value("ZJUConnect/HttpPort", 11081).toInt());
ui->shadowsocksUrlLineEdit->setText(settings->value("ZJUConnect/ShadowsocksURL", "").toString());
ui->dialDirectProxyLineEdit->setText(settings->value("ZJUConnect/DialDirectProxy", "").toString());
ui->multiLineCheckBox->setChecked(settings->value("ZJUConnect/MultiLine", false).toBool());
ui->keepAliveCheckBox->setChecked(settings->value("ZJUConnect/KeepAlive", false).toBool());
ui->outsideAccessCheckBox->setChecked(settings->value("ZJUConnect/OutsideAccess", false).toBool());
ui->skipDomainResourceCheckBox->setChecked(settings->value("ZJUConnect/SkipDomainResource", true).toBool());
ui->disableServerConfigCheckBox->setChecked(settings->value("ZJUConnect/DisableServerConfig", false).toBool());
ui->proxyAllCheckBox->setChecked(settings->value("ZJUConnect/ProxyAll", false).toBool());
ui->zjuDefaultCheckBox->setChecked(settings->value("ZJUConnect/ZJUDefault", false).toBool());
ui->disableDNSCheckBox->setChecked(settings->value("ZJUConnect/DisableZJUDNS", false).toBool());
ui->debugCheckBox->setChecked(settings->value("ZJUConnect/Debug", false).toBool());
ui->tunCheckBox->setChecked(settings->value("ZJUConnect/TunMode", false).toBool());
ui->routeCheckBox->setChecked(settings->value("ZJUConnect/AddRoute", false).toBool());
ui->dnsHijackCheckBox->setChecked(settings->value("ZJUConnect/DNSHijack", false).toBool());
tcpPortForwarding = settings->value("ZJUConnect/TcpPortForwarding", "").toString();
udpPortForwarding = settings->value("ZJUConnect/UdpPortForwarding", "").toString();
ui->autoReconnectCheckBox->setChecked(settings->value("ZJUConnect/AutoReconnect", false).toBool());
ui->reconnectTimeSpinBox->setValue(settings->value("ZJUConnect/ReconnectTime", 1).toInt());
ui->autoSetProxyCheckBox->setChecked(settings->value("ZJUConnect/AutoSetProxy", false).toBool());
ui->routeCheckBox->setChecked(settings->value("ZJUConnect/Route", false).toBool());
ui->secondaryDnsLineEdit->setText(settings->value("ZJUConnect/SecondaryDNS", "").toString());
ui->shadowsocksUrlLineEdit->setText(settings->value("ZJUConnect/ShadowsocksUrl", "").toString());
ui->systemProxyBypassLineEdit->setText(settings->value("ZJUConnect/SystemProxyBypass", "localhost").toString());
ui->keepAliveCheckBox->setChecked(settings->value("ZJUConnect/KeepAlive", false).toBool());
ui->tunCheckBox->setChecked(settings->value("ZJUConnect/TunMode", false).toBool());
ui->dnsHijackCheckBox->setChecked(settings->value("ZJUConnect/DNSHijack", false).toBool());
ui->outsideAccessCheckBox->setChecked(settings->value("ZJUConnect/OutsideAccess", false).toBool());
ui->skipDomainResourceCheckBox->setChecked(settings->value("ZJUConnect/SkipDomainResource", true).toBool());
customDNS = settings->value("ZJUConnect/CustomDNS", "").toString();
customProxyDomain = settings->value("ZJUConnect/CustomProxyDomain", "").toString();
extraArguments = settings->value("ZJUConnect/ExtraArguments", "").toString();
ui->routeCheckBox->setEnabled(ui->tunCheckBox->isChecked());
ui->dnsHijackCheckBox->setEnabled(ui->tunCheckBox->isChecked());
ui->dnsLineEdit->setEnabled(!ui->dnsAutoCheckBox->isChecked());
}
void SettingWindow::applySettings()
{
if (settings->value("Common/AutoStart", false).toBool() != ui->autoStartCheckBox->isChecked())
Utils::setAutoStart(ui->autoStartCheckBox->isChecked());
settings->setValue("Credential/Username", ui->usernameLineEdit->text());
settings->setValue("Credential/Password", QString(ui->passwordLineEdit->text().toUtf8().toBase64()));
settings->setValue("Credential/TOTPSecret", ui->totpSecretLineEdit->text());
settings->setValue("Common/AutoStart", ui->autoStartCheckBox->isChecked());
settings->setValue("Common/ConnectAfterStart", ui->connectAfterStartCheckBox->isChecked());
settings->setValue("Common/CheckUpdateAfterStart", ui->checkUpdateAfterStartCheckBox->isChecked());
settings->setValue("Common/AutoSetProxy", ui->autoSetProxyCheckBox->isChecked());
settings->setValue("Common/ReconnectTime", ui->reconnectTimeSpinBox->value());
settings->setValue("Common/AutoReconnect", ui->autoReconnectCheckBox->isChecked());
settings->setValue("Common/SystemProxyBypass", ui->systemProxyBypassLineEdit->text());
settings->setValue("ZJUConnect/ServerAddress", ui->serverAddressLineEdit->text());
settings->setValue("ZJUConnect/ServerPort", ui->serverPortSpinBox->value());
settings->setValue("ZJUConnect/DNS", ui->dnsLineEdit->text());
settings->setValue("ZJUConnect/DNSAuto", ui->dnsAutoCheckBox->isChecked());
settings->setValue("ZJUConnect/SecondaryDNS", ui->secondaryDnsLineEdit->text());
settings->setValue("ZJUConnect/DNSTTL", ui->dnsTTLSpinBox->value());
settings->setValue("ZJUConnect/Socks5Port", ui->socks5PortSpinBox->value());
settings->setValue("ZJUConnect/HttpPort", ui->httpPortSpinBox->value());
settings->setValue("ZJUConnect/ShadowsocksURL", ui->shadowsocksUrlLineEdit->text());
settings->setValue("ZJUConnect/DialDirectProxy", ui->dialDirectProxyLineEdit->text());
settings->setValue("ZJUConnect/MultiLine", ui->multiLineCheckBox->isChecked());
settings->setValue("ZJUConnect/KeepAlive", ui->keepAliveCheckBox->isChecked());
settings->setValue("ZJUConnect/OutsideAccess", ui->outsideAccessCheckBox->isChecked());
settings->setValue("ZJUConnect/SkipDomainResource", ui->skipDomainResourceCheckBox->isChecked());
settings->setValue("ZJUConnect/DisableServerConfig", ui->disableServerConfigCheckBox->isChecked());
settings->setValue("ZJUConnect/ProxyAll", ui->proxyAllCheckBox->isChecked());
settings->setValue("ZJUConnect/DisableZJUDNS", ui->disableDNSCheckBox->isChecked());
settings->setValue("ZJUConnect/ZJUDefault", ui->zjuDefaultCheckBox->isChecked());
settings->setValue("ZJUConnect/Debug", ui->debugCheckBox->isChecked());
settings->setValue("ZJUConnect/TunMode", ui->tunCheckBox->isChecked());
settings->setValue("ZJUConnect/AddRoute", ui->routeCheckBox->isChecked());
settings->setValue("ZJUConnect/DNSHijack", ui->dnsHijackCheckBox->isChecked());
settings->setValue("ZJUConnect/TcpPortForwarding", tcpPortForwarding);
settings->setValue("ZJUConnect/UdpPortForwarding", udpPortForwarding);
settings->setValue("ZJUConnect/CustomDNS", customDNS);
settings->setValue("ZJUConnect/CustomProxyDomain", customProxyDomain);
settings->setValue("ZJUConnect/ExtraArguments", extraArguments);
settings->setValue("Common/ConfigVersion", Utils::CONFIG_VERSION);
settings->sync();
}