Merge branch 'dev' into dev-multi-outbound

Former-commit-id: aac36f2f9e
This commit is contained in:
Leroy.H.Y 2019-09-11 12:50:02 +08:00
commit 1545d4890d
10 changed files with 696 additions and 1758 deletions

View File

@ -63,8 +63,7 @@ RESOURCES += \
resources.qrc resources.qrc
TRANSLATIONS += \ TRANSLATIONS += \
translations/zh-CN.ts \ translations/source.ts
translations/en-US.ts
RC_ICONS += ./icons/Qv2ray.ico RC_ICONS += ./icons/Qv2ray.ico
ICON = ./icons/Qv2ray.icns ICON = ./icons/Qv2ray.icns

3
crowdin.yml Normal file
View File

@ -0,0 +1,3 @@
files:
- source: /translations/source.ts
translation: /translations/%locale%.ts

View File

@ -1,7 +1,5 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>translations/zh-CN.qm</file>
<file>translations/en-US.qm</file>
<file>icons/Qv2ray.ico</file> <file>icons/Qv2ray.ico</file>
<file>icons/add_connection_btn.png</file> <file>icons/add_connection_btn.png</file>
<file>icons/import_connection_btn.png</file> <file>icons/import_connection_btn.png</file>

View File

@ -13,8 +13,12 @@ using namespace Qv2ray::QvConfigModels;
bool initQv() bool initQv()
{ {
/// Qv2ray Config Path and ends with "/" #ifdef QT_DEBUG
QString configPath = QDir::homePath() + "/.qv2ray_debug";
#else
QString configPath = QDir::homePath() + "/.qv2ray"; QString configPath = QDir::homePath() + "/.qv2ray";
#endif
/// Qv2ray Config Path and ends with "/"
QString exeDefaultPath = configPath + "/vcore/v2ray"; QString exeDefaultPath = configPath + "/vcore/v2ray";
QString v2AssetsPath = configPath + "/vcore"; QString v2AssetsPath = configPath + "/vcore";
// //
@ -123,16 +127,16 @@ int main(int argc, char *argv[])
#ifdef __APPLE__ #ifdef __APPLE__
_qApp.setStyle("fusion"); _qApp.setStyle("fusion");
#endif #endif
auto lang = GetGlobalConfig().language;
if (_qApp.installTranslator(getTranslator(QString::fromStdString(GetGlobalConfig().language)))) { if (lang != "en-US") {
LOG(MODULE_UI, "Loaded translations " + GetGlobalConfig().language) if (_qApp.installTranslator(getTranslator(QSTRING(lang)))) {
} else if (_qApp.installTranslator(getTranslator("en-US"))) { LOG(MODULE_UI, "Loaded translations " + lang)
LOG(MODULE_UI, "Loaded default translations") } else {
} else { QvMessageBox(
QvMessageBox( nullptr, "Failed to load selected language.",
nullptr, "Failed to load translations 无法加载语言文件", "You may want to select another language in the Prefrences Window.\r\n");
"Failed to load translations, user experience may be downgraded. \r\n" }
"无法加载语言文件,用户体验可能会降级.");
} }
RunGuard guard("Qv2ray-Instance-Identifier" RunGuard guard("Qv2ray-Instance-Identifier"

View File

@ -37,7 +37,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="aliasLabel"> <widget class="QLabel" name="aliasLabel">
<property name="text"> <property name="text">
<string>#Name</string> <string>Name</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -47,7 +47,7 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>#ImportFrom</string> <string>Import Source</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -61,17 +61,17 @@
</property> </property>
<item> <item>
<property name="text"> <property name="text">
<string>#ExistingFile</string> <string>File</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>#VMessConnectionString</string> <string>VMess String</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>#Subcription</string> <string>Subscription Link</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -96,7 +96,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="fileLabel"> <widget class="QLabel" name="fileLabel">
<property name="text"> <property name="text">
<string>#Path</string> <string>Path</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -112,7 +112,7 @@
<item> <item>
<widget class="QPushButton" name="selectFileBtn"> <widget class="QPushButton" name="selectFileBtn">
<property name="text"> <property name="text">
<string>#SelectFile</string> <string>Select</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -121,14 +121,14 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>#Inbound</string> <string>Inbound</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QCheckBox" name="keepImportedInboundCheckBox"> <widget class="QCheckBox" name="keepImportedInboundCheckBox">
<property name="text"> <property name="text">
<string>#KeepImportedInbounds</string> <string>Keep imported inbound settings</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -141,7 +141,7 @@
<item> <item>
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>#VMessConnectionString</string> <string>VMess Connection String</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -155,7 +155,7 @@
<item> <item>
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>#SubscriptionLink</string> <string>Subscription Link</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -35,14 +35,14 @@ MainWindow::MainWindow(QWidget *parent)
hTray->setIcon(this->windowIcon()); hTray->setIcon(this->windowIcon());
hTray->setToolTip(TRAY_TOOLTIP_PREFIX); hTray->setToolTip(TRAY_TOOLTIP_PREFIX);
// //
QAction *action_Tray_ShowHide = new QAction(this->windowIcon(), tr("#Hide"), this); QAction *action_Tray_ShowHide = new QAction(this->windowIcon(), tr("Hide"), this);
QAction *action_Tray_Quit = new QAction(tr("#Quit"), this); QAction *action_Tray_Quit = new QAction(tr("Quit"), this);
QAction *action_Tray_Start = new QAction(tr("#Connect"), this); QAction *action_Tray_Start = new QAction(tr("Connect"), this);
QAction *action_Tray_Restart = new QAction(tr("#Reconnect"), this); QAction *action_Tray_Restart = new QAction(tr("Reconnect"), this);
QAction *action_Tray_Stop = new QAction(tr("#Disconnect"), this); QAction *action_Tray_Stop = new QAction(tr("Disconnect"), this);
// //
QAction *action_RCM_RenameConnection = new QAction(tr("#Rename"), this); QAction *action_RCM_RenameConnection = new QAction(tr("Rename"), this);
QAction *action_RCM_StartThis = new QAction(tr("#ConnectSelected"), this); QAction *action_RCM_StartThis = new QAction(tr("ConnectSelected"), this);
action_Tray_Start->setEnabled(true); action_Tray_Start->setEnabled(true);
action_Tray_Stop->setEnabled(false); action_Tray_Stop->setEnabled(false);
action_Tray_Restart->setEnabled(false); action_Tray_Restart->setEnabled(false);
@ -89,7 +89,7 @@ MainWindow::MainWindow(QWidget *parent)
on_startButton_clicked(); on_startButton_clicked();
//ToggleVisibility(); //ToggleVisibility();
this->hide(); this->hide();
trayMenu->actions()[0]->setText(tr("#Show")); trayMenu->actions()[0]->setText(tr("Show"));
} else { } else {
this->show(); this->show();
} }
@ -117,14 +117,14 @@ void MainWindow::VersionUpdate(QByteArray &data)
if (newversion > current && newversion > ignored) { if (newversion > current && newversion > ignored) {
LOG(MODULE_UPDATE, "New version detected.") LOG(MODULE_UPDATE, "New version detected.")
auto link = root["html_url"].toString(""); auto link = root["html_url"].toString("");
auto result = QvMessageBoxAsk(this, tr("#NewReleaseVersionFound"), auto result = QvMessageBoxAsk(this, tr("NewReleaseVersionFound"),
tr("#NewReleaseVersionFound") + ": " + root["tag_name"].toString("") + tr("NewReleaseVersionFound") + ": " + root["tag_name"].toString("") +
"\r\n" + "\r\n" +
root["name"].toString("") + root["name"].toString("") +
"\r\n------------\r\n" + "\r\n------------\r\n" +
root["body"].toString("") + root["body"].toString("") +
"\r\n------------\r\n" + "\r\n------------\r\n" +
tr("#ReleaseDownloadLink") + ": " + link, QMessageBox::Ignore); tr("ReleaseDownloadLink") + ": " + link, QMessageBox::Ignore);
if (result == QMessageBox::Yes) { if (result == QMessageBox::Yes) {
QDesktopServices::openUrl(QUrl::fromUserInput(link)); QDesktopServices::openUrl(QUrl::fromUserInput(link));
@ -185,7 +185,7 @@ void MainWindow::UpdateLog()
void MainWindow::on_startButton_clicked() void MainWindow::on_startButton_clicked()
{ {
if (CurrentConnectionName == "") { if (CurrentConnectionName == "") {
QvMessageBox(this, tr("#NoConfigSelected"), tr("#PleaseSelectAConfig")); QvMessageBox(this, tr("NoConfigSelected"), tr("PleaseSelectAConfig"));
return; return;
} }
@ -196,9 +196,9 @@ void MainWindow::on_startButton_clicked()
bool startFlag = this->vinstance->Start(); bool startFlag = this->vinstance->Start();
if (startFlag) { if (startFlag) {
this->hTray->showMessage("Qv2ray", tr("#ConnectedToServer") + " " + CurrentConnectionName, hTray->icon()); this->hTray->showMessage("Qv2ray", tr("ConnectedToServer") + " " + CurrentConnectionName, hTray->icon());
hTray->setToolTip(TRAY_TOOLTIP_PREFIX + tr("#ConnectedToServer") + ": " + CurrentConnectionName); hTray->setToolTip(TRAY_TOOLTIP_PREFIX + tr("ConnectedToServer") + ": " + CurrentConnectionName);
ui->statusLabel->setText(tr("#Connected") + ": " + CurrentConnectionName); ui->statusLabel->setText(tr("Connected") + ": " + CurrentConnectionName);
} }
trayMenu->actions()[2]->setEnabled(!startFlag); trayMenu->actions()[2]->setEnabled(!startFlag);
@ -215,7 +215,7 @@ void MainWindow::on_stopButton_clicked()
this->vinstance->Stop(); this->vinstance->Stop();
hTray->setToolTip(TRAY_TOOLTIP_PREFIX); hTray->setToolTip(TRAY_TOOLTIP_PREFIX);
QFile(QV2RAY_GENERATED_FILE_PATH).remove(); QFile(QV2RAY_GENERATED_FILE_PATH).remove();
ui->statusLabel->setText(tr("#Disconnected")); ui->statusLabel->setText(tr("Disconnected"));
ui->logText->clear(); ui->logText->clear();
trayMenu->actions()[2]->setEnabled(true); trayMenu->actions()[2]->setEnabled(true);
trayMenu->actions()[3]->setEnabled(false); trayMenu->actions()[3]->setEnabled(false);
@ -235,7 +235,7 @@ void MainWindow::on_restartButton_clicked()
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)
{ {
this->hide(); this->hide();
trayMenu->actions()[0]->setText(tr("#Show")); trayMenu->actions()[0]->setText(tr("Show"));
event->ignore(); event->ignore();
} }
@ -280,10 +280,10 @@ void MainWindow::ToggleVisibility()
SetWindowPos(HWND(this->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); SetWindowPos(HWND(this->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
SetWindowPos(HWND(this->winId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); SetWindowPos(HWND(this->winId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
#endif #endif
trayMenu->actions()[0]->setText(tr("#Hide")); trayMenu->actions()[0]->setText(tr("Hide"));
} else { } else {
this->hide(); this->hide();
trayMenu->actions()[0]->setText(tr("#Show")); trayMenu->actions()[0]->setText(tr("Show"));
} }
} }
@ -317,31 +317,31 @@ void MainWindow::ShowAndSetConnection(int index, bool SetConnection, bool ApplyC
ui->_OutBoundTypeLabel->setText(outboundType); ui->_OutBoundTypeLabel->setText(outboundType);
if (outboundType == "vmess") { if (outboundType == "vmess") {
auto x = StructFromJsonString<VMessServerObject>(JsonToString(outBoundRoot["settings"].toObject()["vnext"].toArray().first().toObject())); auto Server = StructFromJsonString<VMessServerObject>(JsonToString(outBoundRoot["settings"].toObject()["vnext"].toArray().first().toObject()));
ui->_hostLabel->setText(QSTRING(x.address)); ui->_hostLabel->setText(QSTRING(Server.address));
ui->_portLabel->setText(QSTRING(to_string(x.port))); ui->_portLabel->setText(QSTRING(to_string(Server.port)));
auto user = QList<VMessServerObject::UserObject>::fromStdList(x.users).first(); auto user = QList<VMessServerObject::UserObject>::fromStdList(Server.users).first();
auto _configString = tr("#UUID") + ": " + QSTRING(user.id) auto _configString = tr("UUID") + ": " + QSTRING(user.id)
+ "\r\n" + "\r\n"
+ tr("#AlterID") + ": " + QSTRING(to_string(user.alterId)) + tr("AlterID") + ": " + QSTRING(to_string(user.alterId))
+ "\r\n" + "\r\n"
+ tr("#Transport") + ": " + outBoundRoot["streamSettings"].toObject()["network"].toString(); + tr("Transport") + ": " + outBoundRoot["streamSettings"].toObject()["network"].toString();
ui->detailInfoTxt->setPlainText(_configString); ui->detailInfoTxt->setPlainText(_configString);
} else if (outboundType == "shadowsocks") { } else if (outboundType == "shadowsocks") {
auto x = JsonToString(outBoundRoot["settings"].toObject()["servers"].toArray().first().toObject()); auto x = JsonToString(outBoundRoot["settings"].toObject()["servers"].toArray().first().toObject());
auto Server = StructFromJsonString<ShadowSocksServer>(x); auto Server = StructFromJsonString<ShadowSocksServer>(x);
ui->_hostLabel->setText(QSTRING(Server.address)); ui->_hostLabel->setText(QSTRING(Server.address));
ui->_portLabel->setText(QSTRING(to_string(Server.port))); ui->_portLabel->setText(QSTRING(to_string(Server.port)));
auto _configString = tr("#Email") + ": " + QSTRING(Server.email) auto _configString = tr("Email") + ": " + QSTRING(Server.email)
+ "\r\n" + "\r\n"
+ tr("#Encryption") + ": " + QSTRING(Server.method); + tr("Encryption") + ": " + QSTRING(Server.method);
ui->detailInfoTxt->setPlainText(_configString); ui->detailInfoTxt->setPlainText(_configString);
} else if (outboundType == "socks") { } else if (outboundType == "socks") {
auto x = JsonToString(outBoundRoot["settings"].toObject()["servers"].toArray().first().toObject()); auto x = JsonToString(outBoundRoot["settings"].toObject()["servers"].toArray().first().toObject());
auto Server = StructFromJsonString<SocksServerObject>(x); auto Server = StructFromJsonString<SocksServerObject>(x);
ui->_hostLabel->setText(QSTRING(Server.address)); ui->_hostLabel->setText(QSTRING(Server.address));
ui->_portLabel->setText(QSTRING(to_string(Server.port))); ui->_portLabel->setText(QSTRING(to_string(Server.port)));
auto _configString = tr("#Username") + ": " + QSTRING(Server.users.front().user); auto _configString = tr("Username") + ": " + QSTRING(Server.users.front().user);
ui->detailInfoTxt->setPlainText(_configString); ui->detailInfoTxt->setPlainText(_configString);
} }
@ -416,7 +416,7 @@ void MainWindow::on_connectionListWidget_itemChanged(QListWidgetItem *item)
auto configList = QList<string>::fromStdList(config.configs); auto configList = QList<string>::fromStdList(config.configs);
if (newName.trimmed().isEmpty()) { if (newName.trimmed().isEmpty()) {
QvMessageBox(this, tr("#RenameConnection"), tr("#CannotUseEmptyName")); QvMessageBox(this, tr("RenameConnection"), tr("CannotUseEmptyName"));
return; return;
} }
@ -425,7 +425,7 @@ void MainWindow::on_connectionListWidget_itemChanged(QListWidgetItem *item)
if (originalName != newName) { if (originalName != newName) {
if (configList.contains(newName.toStdString())) { if (configList.contains(newName.toStdString())) {
QvMessageBox(this, tr("#RenameConnection"), tr("#DuplicatedConnectionName")); QvMessageBox(this, tr("RenameConnection"), tr("DuplicatedConnectionName"));
return; return;
} }
@ -452,7 +452,7 @@ void MainWindow::on_connectionListWidget_itemChanged(QListWidgetItem *item)
void MainWindow::on_removeConfigButton_clicked() void MainWindow::on_removeConfigButton_clicked()
{ {
if (QvMessageBoxAsk(this, tr("#RemoveConnection"), tr("#RemoveConnectionConfirm")) == QMessageBox::Yes) { if (QvMessageBoxAsk(this, tr("RemoveConnection"), tr("RemoveConnectionConfirm")) == QMessageBox::Yes) {
auto conf = GetGlobalConfig(); auto conf = GetGlobalConfig();
QList<string> list = QList<string>::fromStdList(conf.configs); QList<string> list = QList<string>::fromStdList(conf.configs);
auto currentSelected = ui->connectionListWidget->currentIndex().row(); auto currentSelected = ui->connectionListWidget->currentIndex().row();
@ -492,7 +492,7 @@ void MainWindow::on_editConfigButton_clicked()
auto index = ui->connectionListWidget->currentIndex().row(); auto index = ui->connectionListWidget->currentIndex().row();
if (index < 0) { if (index < 0) {
QvMessageBox(this, tr("#NoConfigSelected"), tr("#PleaseSelectAConfig")); QvMessageBox(this, tr("NoConfigSelected"), tr("PleaseSelectAConfig"));
return; return;
} }

View File

@ -44,7 +44,7 @@
<item> <item>
<widget class="QPushButton" name="startButton"> <widget class="QPushButton" name="startButton">
<property name="text"> <property name="text">
<string>#Connect</string> <string>Connect</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -54,21 +54,21 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text"> <property name="text">
<string>#Disconnect</string> <string>Disconnect</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="clearlogButton"> <widget class="QPushButton" name="clearlogButton">
<property name="text"> <property name="text">
<string>#ClearLog</string> <string>Clear Log</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="prefrencesBtn"> <widget class="QPushButton" name="prefrencesBtn">
<property name="text"> <property name="text">
<string>#Preferences</string> <string>Prefrences</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -91,7 +91,7 @@
<item> <item>
<widget class="QLabel" name="statusLabel"> <widget class="QLabel" name="statusLabel">
<property name="text"> <property name="text">
<string>#Stopped</string> <string>Stopped</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -100,20 +100,20 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="text"> <property name="text">
<string>#HostList</string> <string>Host List</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1" rowspan="3"> <item row="1" column="1" rowspan="3">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>#CurrentConfigDetail</string> <string>Config Details</string>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>#OutBoundType</string> <string>Type</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -127,7 +127,7 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>#Host</string> <string>Host</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -141,7 +141,7 @@
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>#Port</string> <string>Port</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -155,7 +155,7 @@
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>#DetailInfo</string> <string>Detail</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -323,7 +323,7 @@
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_10"> <widget class="QLabel" name="label_10">
<property name="text"> <property name="text">
<string>#Log</string> <string>Log</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -33,13 +33,13 @@
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
<string>#General</string> <string>General</string>
</attribute> </attribute>
<layout class="QFormLayout" name="formLayout_5"> <layout class="QFormLayout" name="formLayout_5">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="text"> <property name="text">
<string>#Language</string> <string>Language</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -66,7 +66,7 @@
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_7"> <widget class="QLabel" name="label_7">
<property name="text"> <property name="text">
<string>#RunAsRoot</string> <string>Run As Root</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -80,7 +80,7 @@
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>#LogLevel</string> <string>Log Level</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -128,7 +128,7 @@
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_19"> <widget class="QLabel" name="label_19">
<property name="text"> <property name="text">
<string>#AutoStartEntry</string> <string>Automatically Connect To</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -144,7 +144,7 @@
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_14">
<property name="text"> <property name="text">
<string>#VCoreExePath</string> <string>v2ray Core Path</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -165,7 +165,7 @@
<item row="5" column="0"> <item row="5" column="0">
<widget class="QLabel" name="label_15"> <widget class="QLabel" name="label_15">
<property name="text"> <property name="text">
<string>#VCoreAssetsPath</string> <string>v2ray Assets Path</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -187,27 +187,27 @@
</widget> </widget>
<widget class="QWidget" name="tab_2"> <widget class="QWidget" name="tab_2">
<attribute name="title"> <attribute name="title">
<string>#MuxSettings</string> <string>Mux Settings</string>
</attribute> </attribute>
<layout class="QFormLayout" name="formLayout_3"> <layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QCheckBox" name="muxEnabledCB"> <widget class="QCheckBox" name="muxEnabledCB">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="text"> <property name="text">
<string>#Concurrency</string> <string>Concurrency</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -228,7 +228,7 @@
</widget> </widget>
<widget class="QWidget" name="tab_3"> <widget class="QWidget" name="tab_3">
<attribute name="title"> <attribute name="title">
<string>#InBoundSettings</string> <string>InBound Settings</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1"> <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1">
<item> <item>
@ -236,7 +236,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_22"> <widget class="QLabel" name="label_22">
<property name="text"> <property name="text">
<string>#ListenIP</string> <string>Listen IP</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -250,20 +250,20 @@
<item> <item>
<widget class="QGroupBox" name="groupBox_2"> <widget class="QGroupBox" name="groupBox_2">
<property name="title"> <property name="title">
<string>#SOCKSBoundSettings</string> <string>SOCKS InBound Settings</string>
</property> </property>
<layout class="QFormLayout" name="formLayout_2"> <layout class="QFormLayout" name="formLayout_2">
<item row="0" column="1"> <item row="0" column="1">
<widget class="QCheckBox" name="socksCB"> <widget class="QCheckBox" name="socksCB">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>#Port</string> <string>Port</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -277,21 +277,21 @@
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_10"> <widget class="QLabel" name="label_10">
<property name="text"> <property name="text">
<string>#Auth</string> <string>Authentication</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QCheckBox" name="socksAuthCB"> <widget class="QCheckBox" name="socksAuthCB">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_11"> <widget class="QLabel" name="label_11">
<property name="text"> <property name="text">
<string>#Username</string> <string>Username</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -301,7 +301,7 @@
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_12"> <widget class="QLabel" name="label_12">
<property name="text"> <property name="text">
<string>#Password</string> <string>Password</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -314,7 +314,7 @@
<item> <item>
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>#HTTPInBoundSettings</string> <string>HTTP InBound Settings</string>
</property> </property>
<layout class="QFormLayout" name="formLayout_7"> <layout class="QFormLayout" name="formLayout_7">
<item row="0" column="1"> <item row="0" column="1">
@ -323,14 +323,14 @@
<enum>Qt::LeftToRight</enum> <enum>Qt::LeftToRight</enum>
</property> </property>
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>#Port</string> <string>Port</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -350,21 +350,21 @@
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="text"> <property name="text">
<string>#Auth</string> <string>Authentication</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QCheckBox" name="httpAuthCB"> <widget class="QCheckBox" name="httpAuthCB">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>#Username</string> <string>Username</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -374,7 +374,7 @@
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="text"> <property name="text">
<string>#Password</string> <string>Password</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -403,7 +403,7 @@
</widget> </widget>
<widget class="QWidget" name="tab_4"> <widget class="QWidget" name="tab_4">
<attribute name="title"> <attribute name="title">
<string>#RouteSettings</string> <string>Route Settings</string>
</attribute> </attribute>
<layout class="QHBoxLayout" name="horizontalLayout_3"> <layout class="QHBoxLayout" name="horizontalLayout_3">
<item> <item>
@ -411,42 +411,42 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_16"> <widget class="QLabel" name="label_16">
<property name="text"> <property name="text">
<string>#ProxyGlobal</string> <string>Enable Proxy</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QCheckBox" name="proxyDefaultCb"> <widget class="QCheckBox" name="proxyDefaultCb">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_17"> <widget class="QLabel" name="label_17">
<property name="text"> <property name="text">
<string>#ProxyCN</string> <string>Chinese Addresses</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_18"> <widget class="QLabel" name="label_18">
<property name="text"> <property name="text">
<string>#WithLocalDNS</string> <string>Use Local DNS</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QCheckBox" name="proxyCNCb"> <widget class="QCheckBox" name="proxyCNCb">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QCheckBox" name="localDNSCb"> <widget class="QCheckBox" name="localDNSCb">
<property name="text"> <property name="text">
<string>#Enabled</string> <string>Enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -458,7 +458,7 @@
<item> <item>
<widget class="QLabel" name="label_21"> <widget class="QLabel" name="label_21">
<property name="text"> <property name="text">
<string>#DNSList</string> <string>DNS List</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -472,7 +472,7 @@
</widget> </widget>
<widget class="QWidget" name="tab_5"> <widget class="QWidget" name="tab_5">
<attribute name="title"> <attribute name="title">
<string>#About</string> <string>About</string>
</attribute> </attribute>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0"> <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
<item> <item>
@ -542,7 +542,7 @@
<item> <item>
<widget class="QLabel" name="label_24"> <widget class="QLabel" name="label_24">
<property name="text"> <property name="text">
<string>#Version:</string> <string>Version:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -575,7 +575,7 @@
<item> <item>
<widget class="QLabel" name="label_27"> <widget class="QLabel" name="label_27">
<property name="text"> <property name="text">
<string>#OfficialRepo:</string> <string>Official Repo:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -626,7 +626,7 @@
<item> <item>
<widget class="QLabel" name="label_29"> <widget class="QLabel" name="label_29">
<property name="text"> <property name="text">
<string>#License:</string> <string>License:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -681,7 +681,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>#AboutQt</string> <string>About Qt</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -716,14 +716,14 @@
<item> <item>
<widget class="QLabel" name="label_23"> <widget class="QLabel" name="label_23">
<property name="text"> <property name="text">
<string>#IgnoreNextVersion</string> <string>Ingore Next Version</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="cancelIgnoreVersionBtn"> <widget class="QPushButton" name="cancelIgnoreVersionBtn">
<property name="text"> <property name="text">
<string>#CancelIngore</string> <string>Cancel</string>
</property> </property>
</widget> </widget>
</item> </item>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff