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 translations 无法加载语言文件", nullptr, "Failed to load selected language.",
"Failed to load translations, user experience may be downgraded. \r\n" "You may want to select another language in the Prefrences Window.\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