fix: added more checks and fixed #334

This commit is contained in:
Qv2ray-dev 2020-02-10 22:38:43 +08:00
parent e4dc48ba6c
commit ba420156b4
5 changed files with 15 additions and 9 deletions

View File

@ -54,12 +54,18 @@ namespace Qv2ray::core
} }
} }
bool CheckIsComplexConfig(CONFIGROOT root) bool IsComplexConfig(CONFIGROOT root)
{ {
bool cRouting = root.contains("routing"); bool cRouting = root.contains("routing");
bool cRule = cRouting && root["routing"].toObject().contains("rules"); bool cRule = cRouting && root["routing"].toObject().contains("rules");
bool cRules = cRule && root["routing"].toObject()["rules"].toArray().count() > 0; bool cRules = cRule && root["routing"].toObject()["rules"].toArray().count() > 0;
return cRules; //
bool cInbounds = root.contains("inbounds");
bool cInboundCount = cInbounds && root["inbounds"].toArray().count() > 0;
//
bool cOutbounds = root.contains("outbounds");
bool cOutboundCount = cOutbounds && root["outbounds"].toArray().count() > 1;
return cRules || cInboundCount || cOutboundCount;
} }
} }

View File

@ -23,7 +23,7 @@ namespace Qv2ray::core
/// Host, port, type /// Host, port, type
tuple<QString, int, QString> GetConnectionInfo(const CONFIGROOT &alias); tuple<QString, int, QString> GetConnectionInfo(const CONFIGROOT &alias);
bool GetOutboundData(const OUTBOUND &out, QString *host, int *port, QString *protocol); bool GetOutboundData(const OUTBOUND &out, QString *host, int *port, QString *protocol);
bool CheckIsComplexConfig(CONFIGROOT root); bool IsComplexConfig(CONFIGROOT root);
} }
using namespace Qv2ray::core; using namespace Qv2ray::core;

View File

@ -284,7 +284,7 @@ namespace Qv2ray::core::connection
// BE EXTREME CAREFUL when changing these code below... // BE EXTREME CAREFUL when changing these code below...
// See: https://github.com/lhy0403/Qv2ray/issues/129 // See: https://github.com/lhy0403/Qv2ray/issues/129
// routeCountLabel in Mainwindow makes here failed to ENOUGH-ly check the routing tables // routeCountLabel in Mainwindow makes here failed to ENOUGH-ly check the routing tables
bool isComplex = CheckIsComplexConfig(root); bool isComplex = IsComplexConfig(root);
if (isComplex) { if (isComplex) {
// For some config files that has routing entries already. // For some config files that has routing entries already.

View File

@ -572,7 +572,7 @@ void MainWindow::ShowAndSetConnection(ConnectionIdentifier fullIdentifier, bool
// --------- BRGIN Show Connection // --------- BRGIN Show Connection
auto conf = connections[fullIdentifier]; auto conf = connections[fullIdentifier];
// //
auto isComplexConfig = CheckIsComplexConfig(conf.config); auto isComplexConfig = IsComplexConfig(conf.config);
routeCountLabel->setText(isComplexConfig ? tr("Complex") : tr("Simple")); routeCountLabel->setText(isComplexConfig ? tr("Complex") : tr("Simple"));
if (conf.latency == 0.0) { if (conf.latency == 0.0) {
@ -833,7 +833,7 @@ void MainWindow::on_editConfigButton_clicked()
CONFIGROOT root; CONFIGROOT root;
bool isChanged = false; bool isChanged = false;
if (CheckIsComplexConfig(outBoundRoot)) { if (IsComplexConfig(outBoundRoot)) {
LOG(UI, "INFO: Opening route editor.") LOG(UI, "INFO: Opening route editor.")
RouteEditor routeWindow(outBoundRoot, this); RouteEditor routeWindow(outBoundRoot, this);
root = routeWindow.OpenEditor(); root = routeWindow.OpenEditor();
@ -974,7 +974,7 @@ void MainWindow::on_shareBtn_clicked()
auto root = connections[_identifier].config; auto root = connections[_identifier].config;
auto type = get<2>(GetConnectionInfo(root)); auto type = get<2>(GetConnectionInfo(root));
if (!CheckIsComplexConfig(root) && (type == "vmess" || type == "shadowsocks")) { if (!IsComplexConfig(root) && (type == "vmess" || type == "shadowsocks")) {
ConfigExporter v(root, _identifier, this); ConfigExporter v(root, _identifier, this);
v.OpenExport(); v.OpenExport();
} else { } else {
@ -1031,7 +1031,7 @@ void MainWindow::on_duplicateBtn_clicked()
CONFIGROOT conf; CONFIGROOT conf;
// Alias may change. // Alias may change.
QString alias = _identifier.connectionName; QString alias = _identifier.connectionName;
bool isComplex = CheckIsComplexConfig(connections[_identifier].config); bool isComplex = IsComplexConfig(connections[_identifier].config);
if (connections[_identifier].configType == CONNECTION_REGULAR) { if (connections[_identifier].configType == CONNECTION_REGULAR) {
conf = ConvertConfigFromFile(QV2RAY_CONFIG_DIR + _identifier.connectionName + QV2RAY_CONFIG_FILE_EXTENSION, isComplex); conf = ConvertConfigFromFile(QV2RAY_CONFIG_DIR + _identifier.connectionName + QV2RAY_CONFIG_FILE_EXTENSION, isComplex);

View File

@ -79,7 +79,7 @@ void MainWindow::MWSetSystemProxy()
bool socksEnabled = GlobalConfig.inboundConfig.useSocks; bool socksEnabled = GlobalConfig.inboundConfig.useSocks;
// //
// Set system proxy if necessary // Set system proxy if necessary
bool isComplex = CheckIsComplexConfig(connections[CurrentConnectionIdentifier].config); bool isComplex = IsComplexConfig(connections[CurrentConnectionIdentifier].config);
if (!isComplex) { if (!isComplex) {
// Is simple config and we will try to set system proxy. // Is simple config and we will try to set system proxy.