From b9e2b3896587a70e16a7fe76d6282ed1f41ca8d8 Mon Sep 17 00:00:00 2001 From: QwQ <59914293+Qv2ray-dev@users.noreply.github.com> Date: Thu, 16 Jul 2020 22:31:32 +0800 Subject: [PATCH] update: fixed build (by removing all codes?) --- cmake/components/qv2ray-ui.cmake | 12 +- makespec/BUILDVERSION | 2 +- src/base/models/CoreObjectModels.hpp | 3 +- src/base/models/QvComplexConfigModels.hpp | 16 +- src/base/models/QvConfigIdentifier.hpp | 4 +- src/base/models/QvSafeType.hpp | 5 +- src/ui/editors/w_RoutesEditor.cpp | 352 +++++++++--------- src/ui/editors/w_RoutesEditor_extra.cpp | 181 ++++----- src/ui/models/InboundNodeModel.cpp | 4 +- src/ui/models/InboundNodeModel.hpp | 4 +- src/ui/models/NodeModelsBase.hpp | 11 +- src/ui/models/OutboundNodeModel.cpp | 2 +- src/ui/models/OutboundNodeModel.hpp | 6 +- src/ui/widgets/node/InboundOutboundWidget.hpp | 19 - ...ndOutboundWidget.cpp => InboundWidget.cpp} | 6 +- src/ui/widgets/node/InboundWidget.hpp | 19 + ...oundOutboundWidget.ui => InboundWidget.ui} | 4 +- ...dBalancerWidget.cpp => OutboundWidget.cpp} | 10 +- ...dBalancerWidget.hpp => OutboundWidget.hpp} | 8 +- ...undBalancerWidget.ui => OutboundWidget.ui} | 4 +- 20 files changed, 344 insertions(+), 328 deletions(-) delete mode 100644 src/ui/widgets/node/InboundOutboundWidget.hpp rename src/ui/widgets/node/{InboundOutboundWidget.cpp => InboundWidget.cpp} (52%) create mode 100644 src/ui/widgets/node/InboundWidget.hpp rename src/ui/widgets/node/{InboundOutboundWidget.ui => InboundWidget.ui} (94%) rename src/ui/widgets/node/{OutboundBalancerWidget.cpp => OutboundWidget.cpp} (77%) rename src/ui/widgets/node/{OutboundBalancerWidget.hpp => OutboundWidget.hpp} (55%) rename src/ui/widgets/node/{OutboundBalancerWidget.ui => OutboundWidget.ui} (94%) diff --git a/cmake/components/qv2ray-ui.cmake b/cmake/components/qv2ray-ui.cmake index b03a916e..6c704e9b 100644 --- a/cmake/components/qv2ray-ui.cmake +++ b/cmake/components/qv2ray-ui.cmake @@ -48,12 +48,12 @@ set(QV2RAY_UI_SOURCES ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/RuleWidget.cpp ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/RuleWidget.hpp ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/RuleWidget.ui - ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/InboundOutboundWidget.cpp - ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/InboundOutboundWidget.hpp - ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/InboundOutboundWidget.ui - ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/OutboundBalancerWidget.cpp - ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/OutboundBalancerWidget.hpp - ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/OutboundBalancerWidget.ui + ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/InboundWidget.cpp + ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/InboundWidget.hpp + ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/InboundWidget.ui + ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/OutboundWidget.cpp + ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/OutboundWidget.hpp + ${CMAKE_SOURCE_DIR}/src/ui/widgets/node/OutboundWidget.ui # Style Manager ${CMAKE_SOURCE_DIR}/src/ui/styles/StyleManager.cpp ${CMAKE_SOURCE_DIR}/src/ui/styles/StyleManager.hpp diff --git a/makespec/BUILDVERSION b/makespec/BUILDVERSION index bae75be6..201d6812 100644 --- a/makespec/BUILDVERSION +++ b/makespec/BUILDVERSION @@ -1 +1 @@ -5793 +5794 diff --git a/src/base/models/CoreObjectModels.hpp b/src/base/models/CoreObjectModels.hpp index e24be207..4b97b5d1 100644 --- a/src/base/models/CoreObjectModels.hpp +++ b/src/base/models/CoreObjectModels.hpp @@ -405,8 +405,7 @@ namespace Qv2ray::base::objects bool ota; int level; int port; - ShadowSocksServerObject() - : email(""), address("0.0.0.0"), method("aes-256-cfb"), password(""), ota(false), level(0), port(0){}; + ShadowSocksServerObject() : email(""), address("0.0.0.0"), method("aes-256-cfb"), password(""), ota(false), level(0), port(0){}; JSONSTRUCT_REGISTER(ShadowSocksServerObject, F(email, address, port, method, password, ota, level)) }; } // namespace protocol diff --git a/src/base/models/QvComplexConfigModels.hpp b/src/base/models/QvComplexConfigModels.hpp index 53fce161..9b945a7c 100644 --- a/src/base/models/QvComplexConfigModels.hpp +++ b/src/base/models/QvComplexConfigModels.hpp @@ -17,6 +17,21 @@ namespace Qv2ray::base::objects::complex OutboundObjectMode mode; ConnectionId connectionId; QJsonObject json; + JSONSTRUCT_REGISTER(OutboundObject, F(tag, mode, connectionId, json)) + }; + + enum MetaOutboundObjectType + { + METAOUTBOUND_ORIGINAL, + METAOUTBOUND_BALANCER, + METAOUTBOUND_CHAINED + }; + + struct OutboundObjectMeta + { + MetaOutboundObjectType metaType; + OutboundObject object; + JSONSTRUCT_REGISTER(OutboundObjectMeta, F(metaType, object)) }; class __ChainID; @@ -25,5 +40,4 @@ namespace Qv2ray::base::objects::complex typedef IDType<__BalancerID> BalancerID; typedef QList ChainObject; typedef BalancerObject BalancerObject; - } // namespace Qv2ray::base::objects::complex diff --git a/src/base/models/QvConfigIdentifier.hpp b/src/base/models/QvConfigIdentifier.hpp index bee94ab1..6fa4c2f8 100644 --- a/src/base/models/QvConfigIdentifier.hpp +++ b/src/base/models/QvConfigIdentifier.hpp @@ -199,12 +199,12 @@ namespace Qv2ray::base } QJsonValue toJson() const { - return JsonStructHelper::___json_struct_store_data(entries); + return JsonStructHelper::Serialize(entries); } void loadJson(const QJsonValue &d) { entries.clear(); - JsonStructHelper::___json_struct_load_data(entries, d); + JsonStructHelper::Deserialize(entries, d); } void Clear() { diff --git a/src/base/models/QvSafeType.hpp b/src/base/models/QvSafeType.hpp index 96146ddf..e018ab65 100644 --- a/src/base/models/QvSafeType.hpp +++ b/src/base/models/QvSafeType.hpp @@ -47,11 +47,12 @@ namespace Qv2ray::base::safetype template::value>::type> struct QvEnumMap : QMap { + // WARN: Changing this will bread all existing JSON. static constexpr auto ENUM_JSON_KEY_PREFIX = "$"; void loadJson(const QJsonValue &json_object) { QMap data; - JsonStructHelper::___json_struct_load_data(data, json_object); + JsonStructHelper::Deserialize(data, json_object); this->clear(); for (QString k_str : data.keys()) { @@ -72,7 +73,7 @@ namespace Qv2ray::base::safetype { data[ENUM_JSON_KEY_PREFIX + QString::number(k)] = this->value(k); } - return JsonStructHelper::___json_struct_store_data(data).toObject(); + return JsonStructHelper::Serialize(data).toObject(); } }; diff --git a/src/ui/editors/w_RoutesEditor.cpp b/src/ui/editors/w_RoutesEditor.cpp index 49956985..7afcfafd 100644 --- a/src/ui/editors/w_RoutesEditor.cpp +++ b/src/ui/editors/w_RoutesEditor.cpp @@ -87,45 +87,45 @@ RouteEditor::RouteEditor(QJsonObject connection, QWidget *parent) : QvDialog(par // updateColorScheme(); // - domainStrategy = root["routing"].toObject()["domainStrategy"].toString(); - domainStrategyCombo->setCurrentText(domainStrategy); - - // Show connections in the node graph - for (const auto &in : root["inbounds"].toArray()) - { - AddInbound(INBOUND(in.toObject())); - } - - for (const auto &out : root["outbounds"].toArray()) - { - AddOutbound(OUTBOUND(out.toObject())); - } - - for (const auto &item : root["routing"].toObject()["rules"].toArray()) - { - AddRule(RuleObject::fromJson(item.toObject())); - } - - // Set default outboung combo text AFTER adding all outbounds. - defaultOutbound = getTag(OUTBOUND(root["outbounds"].toArray().first().toObject())); - defaultOutboundCombo->setCurrentText(defaultOutbound); - - // // Find and add balancers. - // for (auto _balancer : root["routing"].toObject()["balancers"].toArray()) - // { - // auto _balancerObject = _balancer.toObject(); - // if (!_balancerObject["tag"].toString().isEmpty()) - // { - // balancers.insert(_balancerObject["tag"].toString(), _balancerObject["selector"].toVariant().toStringList()); - // } - // } - + // domainStrategy = root["routing"].toObject()["domainStrategy"].toString(); + // domainStrategyCombo->setCurrentText(domainStrategy); + // + //// Show connections in the node graph + // for (const auto &in : root["inbounds"].toArray()) + //{ + // AddInbound(INBOUND(in.toObject())); + //} + // + // for (const auto &out : root["outbounds"].toArray()) + //{ + // AddOutbound(OUTBOUND(out.toObject())); + //} + // + // for (const auto &item : root["routing"].toObject()["rules"].toArray()) + //{ + // AddRule(RuleObject::fromJson(item.toObject())); + //} + // + //// Set default outboung combo text AFTER adding all outbounds. + // defaultOutbound = getTag(OUTBOUND(root["outbounds"].toArray().first().toObject())); + // defaultOutboundCombo->setCurrentText(defaultOutbound); + // + //// // Find and add balancers. + //// for (auto _balancer : root["routing"].toObject()["balancers"].toArray()) + //// { + //// auto _balancerObject = _balancer.toObject(); + //// if (!_balancerObject["tag"].toString().isEmpty()) + //// { + //// balancers.insert(_balancerObject["tag"].toString(), _balancerObject["selector"].toVariant().toStringList()); + //// } + //// } + // for (const auto &group : ConnectionManager->AllGroups()) { importGroupBtn->addItem(GetDisplayName(group), group.toString()); } - - isLoading = false; + // + // isLoading = false; } QvMessageBusSlotImpl(RouteEditor) @@ -141,52 +141,52 @@ QvMessageBusSlotImpl(RouteEditor) void RouteEditor::onNodeClicked(Node &n) { - LOADINGCHECK - - if (isExiting) - return; - - auto isOut = outboundNodes.values().contains(n.id()); - auto isIn = inboundNodes.values().contains(n.id()); - auto isRule = ruleNodes.values().contains(n.id()); - - /* if (isRule) - { - // It's a rule object - currentRuleTag = GetFirstNodeData(n.id(), RuleNode)->GetRuleTag(); - DEBUG(MODULE_GRAPH, "Selecting rule: " + currentRuleTag) - // ShowCurrentRuleDetail(); - toolBox->setCurrentIndex(1); - } - else*/ - if (isOut || isIn) - { - // It's an inbound or an outbound. - QString tag; - QString host; - int port; - QString protocol; - - if (isOut) - { - const auto root = GetFirstNodeData(n.id(), OutboundNode)->GetOutbound(); - GetOutboundInfo(*root, &host, &port, &protocol); - } - else - { - const auto root = GetFirstNodeData(n.id(), InboundNode)->GetInbound(); - GetInboundInfo(*root, &host, &port, &protocol); - } - - tagLabel->setText(tag); - protocolLabel->setText(protocol); - portLabel->setText(QSTRN(port)); - hostLabel->setText(host); - } - else - { - LOG(MODULE_GRAPH, "Selected an unknown node, RARE.") - } + // LOADINGCHECK + // + // if (isExiting) + // return; + // + // auto isOut = outboundNodes.values().contains(n.id()); + // auto isIn = inboundNodes.values().contains(n.id()); + // auto isRule = ruleNodes.values().contains(n.id()); + // + // /* if (isRule) + // { + // // It's a rule object + // currentRuleTag = GetFirstNodeData(n.id(), RuleNode)->GetRuleTag(); + // DEBUG(MODULE_GRAPH, "Selecting rule: " + currentRuleTag) + // // ShowCurrentRuleDetail(); + // toolBox->setCurrentIndex(1); + // } + // else*/ + // if (isOut || isIn) + // { + // // It's an inbound or an outbound. + // QString tag; + // QString host; + // int port; + // QString protocol; + // + // if (isOut) + // { + // const auto root = GetFirstNodeData(n.id(), OutboundNode)->GetOutbound(); + // GetOutboundInfo(*root, &host, &port, &protocol); + // } + // else + // { + // const auto root = GetFirstNodeData(n.id(), InboundNode)->GetInbound(); + // GetInboundInfo(*root, &host, &port, &protocol); + // } + // + // tagLabel->setText(tag); + // protocolLabel->setText(protocol); + // portLabel->setText(QSTRN(port)); + // hostLabel->setText(host); + // } + // else + // { + // LOG(MODULE_GRAPH, "Selected an unknown node, RARE.") + // } } void RouteEditor::onConnectionCreated(QtNodes::Connection const &c) @@ -308,96 +308,96 @@ CONFIGROOT RouteEditor::OpenEditor() on_addRouteBtn_clicked(); } - // If clicking OK - if (result == QDialog::Accepted) - { - QJsonArray rulesArray; - QJsonArray _balancers; + // // If clicking OK + // if (result == QDialog::Accepted) + // { + // QJsonArray rulesArray; + // QJsonArray _balancers; + // + //// Append rules by order + // for (auto i = 0; i < ruleListWidget->count(); i++) + //{ + // auto _rule = rules[i]; + // auto ruleJsonObject = _rule.toJson(); + // + // // Process balancer for a rule + // if (_rule.QV2RAY_RULE_USE_BALANCER) + // { + // // Do not use outbound tag. + // ruleJsonObject.remove("outboundTag"); + // + // // // Find balancer list + // // if (!balancers.contains(_rule.balancerTag)) + // // { + // // LOG(MODULE_UI, "Cannot find a balancer for tag: " + _rule.balancerTag) + // // } + // // else + // // { + // // auto _balancerList = balancers[_rule.balancerTag]; + // // QJsonObject balancerEntry; + // // balancerEntry["tag"] = _rule.balancerTag; + // // balancerEntry["selector"] = QJsonArray::fromStringList(_balancerList); + // // _balancers.append(balancerEntry); + // // } + // } + // + // // Remove some empty fields. + // if (_rule.port.isEmpty()) + // { + // ruleJsonObject.remove("port"); + // } + // + // if (_rule.network.isEmpty()) + // { + // ruleJsonObject.remove("network"); + // } + // + // rulesArray.append(ruleJsonObject); + //} - // Append rules by order - for (auto i = 0; i < ruleListWidget->count(); i++) - { - auto _rule = rules[i]; - auto ruleJsonObject = _rule.toJson(); - - // Process balancer for a rule - if (_rule.QV2RAY_RULE_USE_BALANCER) - { - // Do not use outbound tag. - ruleJsonObject.remove("outboundTag"); - - // // Find balancer list - // if (!balancers.contains(_rule.balancerTag)) - // { - // LOG(MODULE_UI, "Cannot find a balancer for tag: " + _rule.balancerTag) - // } - // else - // { - // auto _balancerList = balancers[_rule.balancerTag]; - // QJsonObject balancerEntry; - // balancerEntry["tag"] = _rule.balancerTag; - // balancerEntry["selector"] = QJsonArray::fromStringList(_balancerList); - // _balancers.append(balancerEntry); - // } - } - - // Remove some empty fields. - if (_rule.port.isEmpty()) - { - ruleJsonObject.remove("port"); - } - - if (_rule.network.isEmpty()) - { - ruleJsonObject.remove("network"); - } - - rulesArray.append(ruleJsonObject); - } - - QJsonObject routing; - routing["domainStrategy"] = domainStrategy; - routing["rules"] = rulesArray; - routing["balancers"] = _balancers; - // - QJsonArray _inbounds; - QJsonArray _outbounds; - - // Convert our internal data format to QJsonArray - for (auto x : inbounds) - { - if (x.isEmpty()) - continue; - - _inbounds.append(x.raw()); - } - - for (auto x : outbounds) - { - if (x.isEmpty()) - continue; - - if (getTag(x) == defaultOutbound) - { - LOG(MODULE_CONNECTION, "Pushing default outbound to the front.") - // Put the default outbound to the first. - _outbounds.push_front(x.raw()); - } - else - { - _outbounds.push_back(x.raw()); - } - } - - root["inbounds"] = _inbounds; - root["outbounds"] = _outbounds; - root["routing"] = routing; - return root; - } - else - { - return original; - } + // QJsonObject routing; + // routing["domainStrategy"] = domainStrategy; + // routing["rules"] = rulesArray; + // routing["balancers"] = _balancers; + // // + // QJsonArray _inbounds; + // QJsonArray _outbounds; + // + // // Convert our internal data format to QJsonArray + // for (auto x : inbounds) + // { + // if (x.isEmpty()) + // continue; + // + // _inbounds.append(x.raw()); + // } + // + // for (auto x : outbounds) + // { + // if (x.isEmpty()) + // continue; + // + // if (getTag(x) == defaultOutbound) + // { + // LOG(MODULE_CONNECTION, "Pushing default outbound to the front.") + // // Put the default outbound to the first. + // _outbounds.push_front(x.raw()); + // } + // else + // { + // _outbounds.push_back(x.raw()); + // } + // } + // + // root["inbounds"] = _inbounds; + // root["outbounds"] = _outbounds; + // root["routing"] = routing; + // return root; + //} + // else + //{ + return original; + //} } RouteEditor::~RouteEditor() @@ -414,12 +414,12 @@ void RouteEditor::on_buttonBox_accepted() void RouteEditor::on_insertDirectBtn_clicked() { - auto freedom = GenerateFreedomOUT("AsIs", "", 0); - auto tag = "Freedom_" + QSTRN(QTime::currentTime().msecsSinceStartOfDay()); - auto out = GenerateOutboundEntry("freedom", freedom, QJsonObject(), QJsonObject(), "0.0.0.0", tag); - // ADD NODE - AddOutbound(out); - statusLabel->setText(tr("Added DIRECT outbound")); + // auto freedom = GenerateFreedomOUT("AsIs", "", 0); + // auto tag = "Freedom_" + QSTRN(QTime::currentTime().msecsSinceStartOfDay()); + // auto out = GenerateOutboundEntry("freedom", freedom, QJsonObject(), QJsonObject(), "0.0.0.0", tag); + //// ADD NODE + // AddOutbound(out); + // statusLabel->setText(tr("Added DIRECT outbound")); } void RouteEditor::on_addDefaultBtn_clicked() diff --git a/src/ui/editors/w_RoutesEditor_extra.cpp b/src/ui/editors/w_RoutesEditor_extra.cpp index 0b49362d..f244d09e 100644 --- a/src/ui/editors/w_RoutesEditor_extra.cpp +++ b/src/ui/editors/w_RoutesEditor_extra.cpp @@ -11,108 +11,109 @@ void RouteEditor::AddInbound(INBOUND in) { - QString tag = getTag(in); - - if (inboundNodes.contains(tag)) - tag.append("_" + GenerateRandomString(5)); - - in["tag"] = tag; - inbounds << in; - auto _nodeData = std::make_unique(std::make_shared(std::make_shared(inbounds.last()))); - auto &node = nodeScene->createNode(std::move(_nodeData)); - QPointF pos; - pos.setX(0 + GRAPH_GLOBAL_OFFSET_X); - pos.setY(inboundNodes.count() * 130 + GRAPH_GLOBAL_OFFSET_Y); - nodeScene->setNodePosition(node, pos); - inboundNodes.insert(tag, node.id()); + // QString tag = getTag(in); + // + // if (inboundNodes.contains(tag)) + // tag.append("_" + GenerateRandomString(5)); + // + // in["tag"] = tag; + // inbounds << in; + // auto _nodeData = std::make_unique(std::make_shared(std::make_shared(inbounds.last()))); + // auto &node = nodeScene->createNode(std::move(_nodeData)); + // QPointF pos; + // pos.setX(0 + GRAPH_GLOBAL_OFFSET_X); + // pos.setY(inboundNodes.count() * 130 + GRAPH_GLOBAL_OFFSET_Y); + // nodeScene->setNodePosition(node, pos); + // inboundNodes.insert(tag, node.id()); } void RouteEditor::AddOutbound(OUTBOUND out) { - QString tag = getTag(out); - - if (outboundNodes.contains(tag)) - tag.append("_" + GenerateRandomString(5)); - - out["tag"] = tag; - outbounds << out; - auto _nodeData = std::make_unique(std::make_shared(std::make_shared(outbounds.last()))); - auto pos = nodeGraphWidget->pos(); - pos.setX(pos.x() + 850 + GRAPH_GLOBAL_OFFSET_X); - pos.setY(pos.y() + outboundNodes.count() * 120 + GRAPH_GLOBAL_OFFSET_Y); - auto &node = nodeScene->createNode(std::move(_nodeData)); - nodeScene->setNodePosition(node, pos); - outboundNodes.insert(tag, node.id()); - defaultOutboundCombo->addItem(tag); + // QString tag = getTag(out); + // + // if (outboundNodes.contains(tag)) + // tag.append("_" + GenerateRandomString(5)); + // + // out["tag"] = tag; + // outbounds << out; + // auto _nodeData = std::make_unique(std::make_shared(std::make_shared(outbounds.last()))); + // auto pos = nodeGraphWidget->pos(); + // pos.setX(pos.x() + 850 + GRAPH_GLOBAL_OFFSET_X); + // pos.setY(pos.y() + outboundNodes.count() * 120 + GRAPH_GLOBAL_OFFSET_Y); + // auto &node = nodeScene->createNode(std::move(_nodeData)); + // nodeScene->setNodePosition(node, pos); + // outboundNodes.insert(tag, node.id()); + // defaultOutboundCombo->addItem(tag); } QString RouteEditor::AddNewRule() { - // Add Route - RuleObject rule; - // - rule.QV2RAY_RULE_ENABLED = true; - rule.QV2RAY_RULE_USE_BALANCER = false; - // Default balancer tag, it's a random string. - auto bTag = GenerateRandomString(); - rule.QV2RAY_RULE_TAG = rules.isEmpty() ? tr("Default rule") : (tr("rule") + "-" + GenerateRandomString(6)); - rule.balancerTag = bTag; - // balancers[bTag] = QStringList(); - AddRule(rule); - return rule.QV2RAY_RULE_TAG; + //// Add Route + // RuleObject rule; + //// + // rule.QV2RAY_RULE_ENABLED = true; + // rule.QV2RAY_RULE_USE_BALANCER = false; + //// Default balancer tag, it's a random string. + // auto bTag = GenerateRandomString(); + // rule.QV2RAY_RULE_TAG = rules.isEmpty() ? tr("Default rule") : (tr("rule") + "-" + GenerateRandomString(6)); + // rule.balancerTag = bTag; + //// balancers[bTag] = QStringList(); + // AddRule(rule); + // return rule.QV2RAY_RULE_TAG; + return ""; } void RouteEditor::AddRule(RuleObject rule) { - // Prevent duplicate - if (ruleNodes.contains(rule.QV2RAY_RULE_TAG)) - { - rule.QV2RAY_RULE_TAG += "-" + GenerateRandomString(5); - } - - rules << rule; - auto pos = nodeGraphWidget->pos(); - pos.setX(pos.x() + 350 + GRAPH_GLOBAL_OFFSET_X); - pos.setY(pos.y() + ruleNodes.count() * 120 + GRAPH_GLOBAL_OFFSET_Y); - auto _nodeData = std::make_unique(std::make_shared(std::make_shared(rules.last()))); - auto &node = nodeScene->createNode(std::move(_nodeData)); - nodeScene->setNodePosition(node, pos); - - for (auto inTag : rule.inboundTag) - { - if (!inboundNodes.contains(inTag)) - { - LOG(MODULE_UI, "No inbound tag found for rule: " + rule.QV2RAY_RULE_TAG + ", inbound tag: " + inTag) - QvMessageBoxWarn(this, tr("No Inbound"), tr("No inbound item found: ") + inTag); - rule.inboundTag.removeAll(inTag); - } - else - { - auto inboundNode = inboundNodes.value(inTag); - auto conn = nodeScene->createConnection(node, 0, *nodeScene->node(inboundNode), 0); - connect(conn.get(), &QtNodes::Connection::connectionCompleted, this, &RouteEditor::onConnectionCreated); - } - } - - // If not using balancers (use outbound tag) - if (!rule.QV2RAY_RULE_USE_BALANCER) - { - if (outboundNodes.contains(rule.outboundTag)) - { - DEBUG(MODULE_GRAPH, "Found outbound tag: " + rule.outboundTag + ", for rule: " + rule.QV2RAY_RULE_TAG) - auto conn = nodeScene->createConnection(*nodeScene->node(outboundNodes.value(rule.outboundTag)), 0, node, 0); - connect(conn.get(), &QtNodes::Connection::connectionCompleted, this, &RouteEditor::onConnectionCreated); - } - else - { - LOG(MODULE_GRAPH, "Outbound tag not found: " + rule.outboundTag + ", for: " + rule.QV2RAY_RULE_TAG) - // QvMessageBoxWarn(this, tr("No outbound tag"), tr("Please connect - // the rule with an outbound.")); - } - } - - this->ruleNodes.insert(rule.QV2RAY_RULE_TAG, node.id()); - ruleListWidget->addItem(rule.QV2RAY_RULE_TAG); + //// Prevent duplicate + // if (ruleNodes.contains(rule.QV2RAY_RULE_TAG)) + //{ + // rule.QV2RAY_RULE_TAG += "-" + GenerateRandomString(5); + //} + // + // rules << rule; + // auto pos = nodeGraphWidget->pos(); + // pos.setX(pos.x() + 350 + GRAPH_GLOBAL_OFFSET_X); + // pos.setY(pos.y() + ruleNodes.count() * 120 + GRAPH_GLOBAL_OFFSET_Y); + // auto _nodeData = std::make_unique(std::make_shared(std::make_shared(rules.last()))); + // auto &node = nodeScene->createNode(std::move(_nodeData)); + // nodeScene->setNodePosition(node, pos); + // + // for (auto inTag : rule.inboundTag) + //{ + // if (!inboundNodes.contains(inTag)) + // { + // LOG(MODULE_UI, "No inbound tag found for rule: " + rule.QV2RAY_RULE_TAG + ", inbound tag: " + inTag) + // QvMessageBoxWarn(this, tr("No Inbound"), tr("No inbound item found: ") + inTag); + // rule.inboundTag.removeAll(inTag); + // } + // else + // { + // auto inboundNode = inboundNodes.value(inTag); + // auto conn = nodeScene->createConnection(node, 0, *nodeScene->node(inboundNode), 0); + // connect(conn.get(), &QtNodes::Connection::connectionCompleted, this, &RouteEditor::onConnectionCreated); + // } + //} + // + //// If not using balancers (use outbound tag) + // if (!rule.QV2RAY_RULE_USE_BALANCER) + //{ + // if (outboundNodes.contains(rule.outboundTag)) + // { + // DEBUG(MODULE_GRAPH, "Found outbound tag: " + rule.outboundTag + ", for rule: " + rule.QV2RAY_RULE_TAG) + // auto conn = nodeScene->createConnection(*nodeScene->node(outboundNodes.value(rule.outboundTag)), 0, node, 0); + // connect(conn.get(), &QtNodes::Connection::connectionCompleted, this, &RouteEditor::onConnectionCreated); + // } + // else + // { + // LOG(MODULE_GRAPH, "Outbound tag not found: " + rule.outboundTag + ", for: " + rule.QV2RAY_RULE_TAG) + // // QvMessageBoxWarn(this, tr("No outbound tag"), tr("Please connect + // // the rule with an outbound.")); + // } + //} + // + // this->ruleNodes.insert(rule.QV2RAY_RULE_TAG, node.id()); + // ruleListWidget->addItem(rule.QV2RAY_RULE_TAG); } // Do not use reference here, we need deep copy of EVERY QString. diff --git a/src/ui/models/InboundNodeModel.cpp b/src/ui/models/InboundNodeModel.cpp index fe074f61..50686506 100644 --- a/src/ui/models/InboundNodeModel.cpp +++ b/src/ui/models/InboundNodeModel.cpp @@ -3,10 +3,10 @@ QvInboundNodeModel::QvInboundNodeModel(std::shared_ptr data) : NodeDataModel() { _in = data; - widget = new InboundOutboundWidget(); + widget = new InboundWidget(); widget->setWindowFlags(Qt::FramelessWindowHint); widget->setAttribute(Qt::WA_TranslucentBackground); - connect(widget, &InboundOutboundWidget::OnSizeUpdated, this, &QvInboundNodeModel::embeddedWidgetSizeUpdated); + connect(widget, &InboundWidget::OnSizeUpdated, this, &QvInboundNodeModel::embeddedWidgetSizeUpdated); } std::unique_ptr QvInboundNodeModel::clone() const diff --git a/src/ui/models/InboundNodeModel.hpp b/src/ui/models/InboundNodeModel.hpp index 0af71555..a7cfb766 100644 --- a/src/ui/models/InboundNodeModel.hpp +++ b/src/ui/models/InboundNodeModel.hpp @@ -1,7 +1,7 @@ #pragma once #include "NodeModelsBase.hpp" -#include "ui/widgets/node/InboundOutboundWidget.hpp" +#include "ui/widgets/node/InboundWidget.hpp" #include @@ -40,5 +40,5 @@ class QvInboundNodeModel : public NodeDataModel QString modelValidationError = tr("Missing or incorrect inputs"); // std::shared_ptr _in; - InboundOutboundWidget *widget; + InboundWidget *widget; }; diff --git a/src/ui/models/NodeModelsBase.hpp b/src/ui/models/NodeModelsBase.hpp index d756777e..4c2a2560 100644 --- a/src/ui/models/NodeModelsBase.hpp +++ b/src/ui/models/NodeModelsBase.hpp @@ -24,6 +24,7 @@ namespace Qv2ray::ui::nodemodels { const std::shared_ptr NODE_TYPE_OUTBOUND = std::make_shared("outbound", QObject::tr("Outbound")); const std::shared_ptr NODE_TYPE_INBOUND = std::make_shared("inbound", QObject::tr("Inbound")); + const std::shared_ptr NODE_TYPE_RULE = std::make_shared("rule", QObject::tr("Rule")); class InboundNodeData : public NodeData { @@ -32,7 +33,7 @@ namespace Qv2ray::ui::nodemodels std::shared_ptr type() const override { - return NODE_TYPE_INBOUND; + return NODE_TYPE_RULE; } std::shared_ptr GetInbound() @@ -47,20 +48,20 @@ namespace Qv2ray::ui::nodemodels class OutboundNodeData : public NodeData { public: - explicit OutboundNodeData(std::shared_ptr data) : outboundData(data){}; + explicit OutboundNodeData(std::shared_ptr data) : outboundData(data){}; std::shared_ptr type() const override { - return NODE_TYPE_INBOUND; + return NODE_TYPE_OUTBOUND; } - std::shared_ptr GetOutbound() + std::shared_ptr GetOutbound() { return outboundData; } private: - std::shared_ptr outboundData; + std::shared_ptr outboundData; }; class RuleNodeData : public NodeData diff --git a/src/ui/models/OutboundNodeModel.cpp b/src/ui/models/OutboundNodeModel.cpp index 0387ca0c..8a8ded86 100644 --- a/src/ui/models/OutboundNodeModel.cpp +++ b/src/ui/models/OutboundNodeModel.cpp @@ -3,7 +3,7 @@ QvOutboundNodeModel::QvOutboundNodeModel(std::shared_ptr data) : NodeDataModel() { _out = data; - widget = new InboundOutboundWidget(); + widget = new InboundWidget(); widget->setWindowFlags(Qt::FramelessWindowHint); widget->setAttribute(Qt::WA_TranslucentBackground); } diff --git a/src/ui/models/OutboundNodeModel.hpp b/src/ui/models/OutboundNodeModel.hpp index 4c425d27..2ada4ec9 100644 --- a/src/ui/models/OutboundNodeModel.hpp +++ b/src/ui/models/OutboundNodeModel.hpp @@ -1,6 +1,6 @@ #pragma once #include "ui/models/NodeModelsBase.hpp" -#include "ui/widgets/node/InboundOutboundWidget.hpp" +#include "ui/widgets/node/InboundWidget.hpp" #include @@ -45,7 +45,7 @@ class QvOutboundNodeModel : public NodeDataModel return _out; } - void setData(std::shared_ptr data) + void setData(std::shared_ptr data) { _out = std::make_shared(data); widget->adjustSize(); @@ -70,5 +70,5 @@ class QvOutboundNodeModel : public NodeDataModel QString modelValidationError = tr("Missing or incorrect inputs"); // std::shared_ptr _out; - InboundOutboundWidget *widget; + InboundWidget *widget; }; diff --git a/src/ui/widgets/node/InboundOutboundWidget.hpp b/src/ui/widgets/node/InboundOutboundWidget.hpp deleted file mode 100644 index 6728b006..00000000 --- a/src/ui/widgets/node/InboundOutboundWidget.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include "ui_InboundOutboundWidget.h" - -class InboundOutboundWidget - : public QWidget - , private Ui::InboundOutboundWidget -{ - Q_OBJECT - - public: - explicit InboundOutboundWidget(QWidget *parent = nullptr); - - signals: - void OnSizeUpdated(); - - protected: - void changeEvent(QEvent *e); -}; diff --git a/src/ui/widgets/node/InboundOutboundWidget.cpp b/src/ui/widgets/node/InboundWidget.cpp similarity index 52% rename from src/ui/widgets/node/InboundOutboundWidget.cpp rename to src/ui/widgets/node/InboundWidget.cpp index 284a8f49..ae30277e 100644 --- a/src/ui/widgets/node/InboundOutboundWidget.cpp +++ b/src/ui/widgets/node/InboundWidget.cpp @@ -1,11 +1,11 @@ -#include "InboundOutboundWidget.hpp" +#include "InboundWidget.hpp" -InboundOutboundWidget::InboundOutboundWidget(QWidget *parent) : QWidget(parent) +InboundWidget::InboundWidget(QWidget *parent) : QWidget(parent) { setupUi(this); } -void InboundOutboundWidget::changeEvent(QEvent *e) +void InboundWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) diff --git a/src/ui/widgets/node/InboundWidget.hpp b/src/ui/widgets/node/InboundWidget.hpp new file mode 100644 index 00000000..42032955 --- /dev/null +++ b/src/ui/widgets/node/InboundWidget.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include "ui_InboundWidget.h" + +class InboundWidget + : public QWidget + , private Ui::InboundWidget +{ + Q_OBJECT + + public: + explicit InboundWidget(QWidget *parent = nullptr); + + signals: + void OnSizeUpdated(); + + protected: + void changeEvent(QEvent *e); +}; diff --git a/src/ui/widgets/node/InboundOutboundWidget.ui b/src/ui/widgets/node/InboundWidget.ui similarity index 94% rename from src/ui/widgets/node/InboundOutboundWidget.ui rename to src/ui/widgets/node/InboundWidget.ui index 27afb5ab..5b158088 100644 --- a/src/ui/widgets/node/InboundOutboundWidget.ui +++ b/src/ui/widgets/node/InboundWidget.ui @@ -1,7 +1,7 @@ - InboundOutboundWidget - + InboundWidget + 0 diff --git a/src/ui/widgets/node/OutboundBalancerWidget.cpp b/src/ui/widgets/node/OutboundWidget.cpp similarity index 77% rename from src/ui/widgets/node/OutboundBalancerWidget.cpp rename to src/ui/widgets/node/OutboundWidget.cpp index 1360558b..cf054c00 100644 --- a/src/ui/widgets/node/OutboundBalancerWidget.cpp +++ b/src/ui/widgets/node/OutboundWidget.cpp @@ -1,15 +1,15 @@ -#include "OutboundBalancerWidget.hpp" +#include "OutboundWidget.hpp" #include "base/Qv2rayBase.hpp" -OutboundBalancerWidget::OutboundBalancerWidget(QWidget *parent) : QWidget(parent) +OutboundWidget::OutboundWidget(QWidget *parent) : QWidget(parent) { setupUi(this); balancerAddBtn->setIcon(QICON_R("add.png")); balancerDelBtn->setIcon(QICON_R("delete.png")); } -void OutboundBalancerWidget::changeEvent(QEvent *e) +void OutboundWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) @@ -19,7 +19,7 @@ void OutboundBalancerWidget::changeEvent(QEvent *e) } } -void OutboundBalancerWidget::on_balancerAddBtn_clicked() +void OutboundWidget::on_balancerAddBtn_clicked() { auto balancerTx = balancerSelectionCombo->currentText(); @@ -35,7 +35,7 @@ void OutboundBalancerWidget::on_balancerAddBtn_clicked() // statusLabel->setText(tr("Balancer is empty, not processing.")); } } -void OutboundBalancerWidget::on_balancerDelBtn_clicked() +void OutboundWidget::on_balancerDelBtn_clicked() { if (balancerList->currentRow() < 0) { diff --git a/src/ui/widgets/node/OutboundBalancerWidget.hpp b/src/ui/widgets/node/OutboundWidget.hpp similarity index 55% rename from src/ui/widgets/node/OutboundBalancerWidget.hpp rename to src/ui/widgets/node/OutboundWidget.hpp index 4c8e9891..481f3f31 100644 --- a/src/ui/widgets/node/OutboundBalancerWidget.hpp +++ b/src/ui/widgets/node/OutboundWidget.hpp @@ -1,15 +1,15 @@ #pragma once -#include "ui_OutboundBalancerWidget.h" +#include "ui_OutboundWidget.h" -class OutboundBalancerWidget +class OutboundWidget : public QWidget - , private Ui::OutboundBalancerWidget + , private Ui::OutboundWidget { Q_OBJECT public: - explicit OutboundBalancerWidget(QWidget *parent = nullptr); + explicit OutboundWidget(QWidget *parent = nullptr); void on_balancerAddBtn_clicked(); void on_balancerDelBtn_clicked(); diff --git a/src/ui/widgets/node/OutboundBalancerWidget.ui b/src/ui/widgets/node/OutboundWidget.ui similarity index 94% rename from src/ui/widgets/node/OutboundBalancerWidget.ui rename to src/ui/widgets/node/OutboundWidget.ui index 4e196a64..6ba7d614 100644 --- a/src/ui/widgets/node/OutboundBalancerWidget.ui +++ b/src/ui/widgets/node/OutboundWidget.ui @@ -1,7 +1,7 @@ - OutboundBalancerWidget - + OutboundWidget + 0