Enhancements

Change behavior of using proxy-providers in Clash proxy groups to allow both providers and proxies to exist.
Add option to allow continue when failed to parse an subscription link.
This commit is contained in:
Tindy X committed 2020-07-21 23:38:44 +08:00
1 parent deafbd4eaa
commit 4f039bd726
4 files changed
+29 -10

No files matched your search

+1
View File
@@ -139,3 +139,4 @@ advanced:
cache_config: 300 cache_config: 300
cache_ruleset: 21600 cache_ruleset: 21600
async_fetch_ruleset: false async_fetch_ruleset: false
skip_failed_links: false
+1
View File
@@ -256,3 +256,4 @@ cache_subscription=60
cache_config=300 cache_config=300
cache_ruleset=21600 cache_ruleset=21600
async_fetch_ruleset=false async_fetch_ruleset=false
skip_failed_links=false
+24 -7
View File
@@ -28,7 +28,7 @@ string_array def_exclude_remarks, def_include_remarks, rulesets, stream_rules, t
std::vector<ruleset_content> ruleset_content_array; std::vector<ruleset_content> ruleset_content_array;
std::string listen_address = "127.0.0.1", default_url, insert_url, managed_config_prefix; std::string listen_address = "127.0.0.1", default_url, insert_url, managed_config_prefix;
int listen_port = 25500, max_pending_connections = 10, max_concurrent_threads = 4; int listen_port = 25500, max_pending_connections = 10, max_concurrent_threads = 4;
bool prepend_insert_url = true; bool prepend_insert_url = true, skip_failed_links = false;
bool api_mode = true, write_managed_config = false, enable_rule_generator = true, 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, append_userinfo = true, enable_base_gen = false, async_fetch_ruleset = false, surge_ssr_resolve = true; bool print_debug_info = false, cfw_child_process = false, append_userinfo = true, enable_base_gen = false, async_fetch_ruleset = false, surge_ssr_resolve = true;
std::string access_token, base_path = "base"; std::string access_token, base_path = "base";
@@ -891,6 +891,7 @@ void readYAMLConf(YAML::Node &node)
cache_subscription = cache_config = cache_ruleset = 0; //disable cache cache_subscription = cache_config = cache_ruleset = 0; //disable cache
} }
node["advanced"]["async_fetch_ruleset"] >> async_fetch_ruleset; node["advanced"]["async_fetch_ruleset"] >> async_fetch_ruleset;
node["advanced"]["skip_failed_links"] >> skip_failed_links;
} }
} }
@@ -1141,6 +1142,7 @@ void readConf()
} }
} }
ini.GetBoolIfExist("async_fetch_ruleset", async_fetch_ruleset); ini.GetBoolIfExist("async_fetch_ruleset", async_fetch_ruleset);
ini.GetBoolIfExist("skip_failed_links", skip_failed_links);
//std::cerr<<"Read preference settings completed."<<std::endl; //std::cerr<<"Read preference settings completed."<<std::endl;
writeLog(0, "Read preference settings completed.", LOG_LEVEL_INFO); writeLog(0, "Read preference settings completed.", LOG_LEVEL_INFO);
@@ -1611,8 +1613,13 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS)
writeLog(0, "Fetching node data from url '" + x + "'.", LOG_LEVEL_INFO); writeLog(0, "Fetching node data from url '" + x + "'.", LOG_LEVEL_INFO);
if(addNodes(x, insert_nodes, groupID, proxy, exclude_remarks, include_remarks, stream_temp, time_temp, subInfo, authorized, request.headers) == -1) if(addNodes(x, insert_nodes, groupID, proxy, exclude_remarks, include_remarks, stream_temp, time_temp, subInfo, authorized, request.headers) == -1)
{ {
*status_code = 400; if(skip_failed_links)
return std::string("The following link doesn't contain any valid node info: " + x); writeLog(0, "The following link doesn't contain any valid node info: " + x, LOG_LEVEL_WARNING);
else
{
*status_code = 400;
return "The following link doesn't contain any valid node info: " + x;
}
} }
groupID--; groupID--;
} }
@@ -1627,8 +1634,13 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS)
writeLog(0, "Fetching node data from url '" + x + "'.", LOG_LEVEL_INFO); writeLog(0, "Fetching node data from url '" + x + "'.", LOG_LEVEL_INFO);
if(addNodes(x, nodes, groupID, proxy, exclude_remarks, include_remarks, stream_temp, time_temp, subInfo, authorized, request.headers) == -1) if(addNodes(x, nodes, groupID, proxy, exclude_remarks, include_remarks, stream_temp, time_temp, subInfo, authorized, request.headers) == -1)
{ {
*status_code = 400; if(skip_failed_links)
return std::string("The following link doesn't contain any valid node info: " + x); writeLog(0, "The following link doesn't contain any valid node info: " + x, LOG_LEVEL_WARNING);
else
{
*status_code = 400;
return "The following link doesn't contain any valid node info: " + x;
}
} }
groupID++; groupID++;
} }
@@ -2042,8 +2054,13 @@ std::string surgeConfToClash(RESPONSE_CALLBACK_ARGS)
writeLog(0, "Fetching node data from url '" + x + "'.", LOG_LEVEL_INFO); writeLog(0, "Fetching node data from url '" + x + "'.", LOG_LEVEL_INFO);
if(addNodes(x, nodes, 0, proxy, dummy_str_array, dummy_str_array, dummy_str_array, dummy_str_array, subInfo, !api_mode, request.headers) == -1) if(addNodes(x, nodes, 0, proxy, dummy_str_array, dummy_str_array, dummy_str_array, dummy_str_array, subInfo, !api_mode, request.headers) == -1)
{ {
*status_code = 400; if(skip_failed_links)
return std::string("The following link doesn't contain any valid node info: " + x); writeLog(0, "The following link doesn't contain any valid node info: " + x, LOG_LEVEL_WARNING);
else
{
*status_code = 400;
return "The following link doesn't contain any valid node info: " + x;
}
} }
} }
+3 -3
View File
@@ -1402,11 +1402,11 @@ void netchToClash(std::vector<nodeInfo> &nodes, YAML::Node &yamlnode, const stri
singlegroup["use"] = providers; singlegroup["use"] = providers;
else else
{ {
if(!filtered_nodelist.size()) if(filtered_nodelist.empty())
filtered_nodelist.emplace_back("DIRECT"); filtered_nodelist.emplace_back("DIRECT");
singlegroup["proxies"] = filtered_nodelist;
} }
if(!filtered_nodelist.empty())
singlegroup["proxies"] = filtered_nodelist;
//singlegroup.SetStyle(YAML::EmitterStyle::Flow); //singlegroup.SetStyle(YAML::EmitterStyle::Flow);
bool replace_flag = false; bool replace_flag = false;