add proxy scheme selection to windows

This commit is contained in:
Nova 2025-02-23 20:29:00 +03:30
parent d0aa0c5e05
commit 4034b19f85
7 changed files with 46 additions and 6 deletions

View File

@ -225,7 +225,7 @@ namespace Qv2ray::components::proxy {
}
#endif
void SetSystemProxy(int httpPort, int socksPort) {
void SetSystemProxy(int httpPort, int socksPort, QString scheme) {
const QString &address = "127.0.0.1";
bool hasHTTP = (httpPort > 0 && httpPort < 65536);
bool hasSOCKS = (socksPort > 0 && socksPort < 65536);
@ -253,8 +253,11 @@ namespace Qv2ray::components::proxy {
#endif
#ifdef Q_OS_WIN
QString str = "http://{ip}:{socks_port}";
str = str.replace("{ip}", address)
if (scheme == "http") scheme = "http://";
else if (scheme == "socks") scheme = "socks=";
QString str = "{scheme}{ip}:{socks_port}";
str = str.replace("{scheme}", scheme)
.replace("{ip}", address)
.replace("{socks_port}", Int2String(socksPort));
//
LOG("Windows proxy string: " + str);

View File

@ -5,7 +5,7 @@
//
namespace Qv2ray::components::proxy {
void ClearSystemProxy();
void SetSystemProxy(int http_port, int socks_port);
void SetSystemProxy(int http_port, int socks_port, QString scheme);
} // namespace Qv2ray::components::proxy
using namespace Qv2ray::components;

View File

@ -53,6 +53,7 @@ namespace NekoGui {
bool need_keep_vpn_off = false;
QString appdataDir = "";
QStringList ignoreConnTag = {};
QString proxy_scheme = "http";
std::unique_ptr<Routing> routing;
int imported_count = 0;

View File

@ -94,6 +94,36 @@
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="proxy_scheme_box">
<property name="title">
<string/>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<item row="0" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Proxy Format</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="proxy_scheme">
<item>
<property name="text">
<string>Http</string>
</property>
</item>
<item>
<property name="text">
<string>Socks</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hlayout_l2">
<item>
@ -390,7 +420,7 @@
</sizepolicy>
</property>
<property name="text">
<string notr="true">Language</string>
<string>Language</string>
</property>
</widget>
</item>

View File

@ -311,6 +311,7 @@ namespace NekoGui {
_add(new configItem("windows_set_admin", &windows_set_admin, itemType::boolean));
_add(new configItem("enable_stats", &enable_stats, itemType::boolean));
_add(new configItem("stats_tab", &stats_tab, itemType::string));
_add(new configItem("proxy_scheme", &proxy_scheme, itemType::string));
}
void DataStore::UpdateStartedId(int id) {

View File

@ -350,7 +350,7 @@ void MainWindow::neko_set_spmode_system_proxy(bool enable, bool save) {
if (enable != NekoGui::dataStore->spmode_system_proxy) {
if (enable) {
auto socks_port = NekoGui::dataStore->inbound_socks_port;
SetSystemProxy(socks_port, socks_port);
SetSystemProxy(socks_port, socks_port, NekoGui::dataStore->proxy_scheme);
} else {
ClearSystemProxy();
}

View File

@ -37,6 +37,10 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
C_EDIT_JSON_ALLOW_EMPTY(custom_inbound)
});
#ifndef Q_OS_WIN
ui->proxy_scheme_box->hide();
#endif
// Style
ui->connection_statistics->setChecked(NekoGui::dataStore->enable_stats);
//
@ -172,6 +176,7 @@ void DialogBasicSettings::accept() {
D_SAVE_INT(inbound_socks_port)
D_SAVE_INT(test_concurrent)
D_SAVE_STRING(test_latency_url)
NekoGui::dataStore->proxy_scheme = ui->proxy_scheme->currentText().toLower();
// Style