Enhancements

Fix when list option is set to true, the program will still try to load groups and rulesets.
Add an interface to provide local/remote rulesets for Surge/Quantumult X.
Add converting rulesets to Quantumult X format and adding as remote filters.
This commit is contained in:
Tindy X committed 2020-02-15 18:00:59 +08:00
1 parent 9c8a8d8268
commit f6a09670be
3 files changed
+92 -49

No files matched your search

+30 -6
View File
@@ -351,7 +351,7 @@ void rulesetToClash(YAML::Node &base_rule, std::vector<ruleset_content> &ruleset
base_rule["Rule"] = Rules;
}
void rulesetToSurge(INIReader &base_rule, std::vector<ruleset_content> &ruleset_content_array, int surge_ver, bool overwrite_original_rules)
void rulesetToSurge(INIReader &base_rule, std::vector<ruleset_content> &ruleset_content_array, int surge_ver, bool overwrite_original_rules, std::string remote_path_prefix)
{
string_array allRules;
std::string rule_group, rule_path, retrived_rules, strLine;
@@ -410,7 +410,31 @@ void rulesetToSurge(INIReader &base_rule, std::vector<ruleset_content> &ruleset_
{
if(surge_ver > 2)
{
allRules.emplace_back("RULE-SET," + rule_path + "," + rule_group);
strLine = "RULE-SET," + rule_path + "," + rule_group;
allRules.emplace_back(strLine);
continue;
}
else if(surge_ver == -1 && remote_path_prefix.size())
{
strLine = remote_path_prefix + "/getruleset?type=2&url=" + urlsafe_base64_encode(rule_path) + "&group=" + urlsafe_base64_encode(rule_group);
strLine += ", tag=" + rule_group + ", enabled=true";
base_rule.Set("filter_remote", "{NONAME}", strLine);
continue;
}
}
else
{
if(surge_ver > 2 && remote_path_prefix.size())
{
strLine = "RULE-SET," + remote_path_prefix + "/getruleset?type=1&url=" + urlsafe_base64_encode(rule_path) + "," + rule_group;
allRules.emplace_back(strLine);
continue;
}
else if(surge_ver == -1 && remote_path_prefix.size())
{
strLine = remote_path_prefix + "/getruleset?type=2&url=" + urlsafe_base64_encode(rule_path) + "&group=" + urlsafe_base64_encode(rule_group);
strLine += ", tag=" + rule_group + ", enabled=true";
base_rule.Set("filter_remote", "{NONAME}", strLine);
continue;
}
}
@@ -988,7 +1012,7 @@ std::string netchToSurge(std::vector<nodeInfo> &nodes, std::string &base_conf, s
}
if(ext.enable_rule_generator)
rulesetToSurge(ini, ruleset_content_array, surge_ver, ext.overwrite_original_rules);
rulesetToSurge(ini, ruleset_content_array, surge_ver, ext.overwrite_original_rules, ext.managed_config_prefix);
return ini.ToString();
}
@@ -1470,7 +1494,7 @@ void netchToQuan(std::vector<nodeInfo> &nodes, INIReader &ini, std::vector<rules
}
if(ext.enable_rule_generator)
rulesetToSurge(ini, ruleset_content_array, -2, ext.overwrite_original_rules);
rulesetToSurge(ini, ruleset_content_array, -2, ext.overwrite_original_rules, std::string());
}
std::string netchToQuanX(std::vector<nodeInfo> &nodes, std::string &base_conf, std::vector<ruleset_content> &ruleset_content_array, string_array &extra_proxy_group, extra_settings &ext)
@@ -1681,7 +1705,7 @@ void netchToQuanX(std::vector<nodeInfo> &nodes, INIReader &ini, std::vector<rule
}
if(ext.enable_rule_generator)
rulesetToSurge(ini, ruleset_content_array, -1, ext.overwrite_original_rules);
rulesetToSurge(ini, ruleset_content_array, -1, ext.overwrite_original_rules, ext.managed_config_prefix);
}
std::string netchToSSD(std::vector<nodeInfo> &nodes, std::string &group, extra_settings &ext)
@@ -1962,7 +1986,7 @@ void netchToMellow(std::vector<nodeInfo> &nodes, INIReader &ini, std::vector<rul
}
if(ext.enable_rule_generator)
rulesetToSurge(ini, ruleset_content_array, 0, ext.overwrite_original_rules);
rulesetToSurge(ini, ruleset_content_array, 0, ext.overwrite_original_rules, std::string());
}
std::string buildGistData(std::string name, std::string content)