diff --git a/src/main.cpp b/src/main.cpp index fe7f234..ba5bbc8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,7 +25,7 @@ string_array def_exclude_remarks, def_include_remarks, rulesets, stream_rules, t std::vector ruleset_content_array; std::string listen_address = "127.0.0.1", default_url, managed_config_prefix; int listen_port = 25500, max_pending_connections = 10, max_concurrent_threads = 4; -bool api_mode = true, write_managed_config = false, update_ruleset_on_request = false, overwrite_original_rules = true; +bool api_mode = true, write_managed_config = false, enable_rule_generator = true, update_ruleset_on_request = false, overwrite_original_rules = true; bool print_debug_info = false, cfw_child_process = false; std::string access_token; extern std::string custom_group; @@ -457,6 +457,7 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS) std::vector rca; extra_settings ext; std::string subInfo; + bool ruleset_group_updated = false; if(std::find(regex_blacklist.cbegin(), regex_blacklist.cend(), include) != regex_blacklist.cend() || std::find(regex_blacklist.cbegin(), regex_blacklist.cend(), exclude) != regex_blacklist.cend()) return "Invalid request!"; @@ -526,10 +527,11 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS) { extra_ruleset = extconf.surge_ruleset; refreshRulesets(extra_ruleset, rca); + ruleset_group_updated = true; } else { - if(update_ruleset_on_request || cfw_child_process) + if(update_ruleset_on_request) refreshRulesets(rulesets, ruleset_content_array); rca = ruleset_content_array; } @@ -542,6 +544,8 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS) extra_group = split(groups, "@"); if(!extra_group.size()) extra_group = clash_extra_group; + else + ruleset_group_updated = true; } else extra_group = clash_extra_group; @@ -552,20 +556,24 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS) extra_ruleset = split(ruleset, "@"); if(!extra_ruleset.size()) { - if(update_ruleset_on_request || cfw_child_process) + if(update_ruleset_on_request) refreshRulesets(rulesets, ruleset_content_array); rca = ruleset_content_array; } else { refreshRulesets(extra_ruleset, rca); + ruleset_group_updated = true; } } else { - if(update_ruleset_on_request || cfw_child_process) - refreshRulesets(rulesets, ruleset_content_array); - rca = ruleset_content_array; + if(enable_rule_generator) + { + if(update_ruleset_on_request || cfw_child_process) + refreshRulesets(rulesets, ruleset_content_array); + rca = ruleset_content_array; + } } } @@ -592,6 +600,7 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS) ext.nodelist = nodelist == "true"; ext.surge_ssr_path = surge_ssr_path; + ext.enable_rule_generator = enable_rule_generator; //loading urls string_array urls = split(url, "|"); @@ -640,7 +649,7 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS) if(target == "clash" || target == "clashr") { std::cerr<<"Clash"<<((target == "clashr") ? "R" : "")< void operator >> (const YAML::Node& node, T& i) { - i = node.as(); + if(node.IsDefined()) //fail-safe + i = node.as(); }; void explodeVmess(std::string vmess, std::string custom_port, int local_port, nodeInfo &node) diff --git a/src/subexport.cpp b/src/subexport.cpp index 7ffcdfb..2904403 100644 --- a/src/subexport.cpp +++ b/src/subexport.cpp @@ -1340,8 +1340,6 @@ void netchToQuan(std::vector &nodes, INIReader &ini, std::vector