SYMBOL INDEX (79 symbols across 2 files) FILE: ClashForge.py function parse_hysteria2_link (line 1234) | def parse_hysteria2_link(link): function parse_ss_link (line 1260) | def parse_ss_link(link): function parse_trojan_link (line 1285) | def parse_trojan_link(link): function parse_vless_link (line 1305) | def parse_vless_link(link): function parse_vmess_link (line 1334) | def parse_vmess_link(link): function parse_ss_sub (line 1360) | def parse_ss_sub(link): function parse_md_link (line 1375) | def parse_md_link(link): function js_render (line 1395) | def js_render(url): function match_nodes (line 1409) | def match_nodes(text): function process_url (line 1425) | def process_url(url): function parse_proxy_link (line 1483) | def parse_proxy_link(link): function deduplicate_proxies (line 1501) | def deduplicate_proxies(proxies_list): function add_random_suffix (line 1514) | def add_random_suffix(name, existing_names): function read_txt_files (line 1526) | def read_txt_files(folder_path): function read_yaml_files (line 1543) | def read_yaml_files(folder_path): function filter_by_types_alt (line 1565) | def filter_by_types_alt(allowed_types, nodes): function merge_lists (line 1571) | def merge_lists(*lists): function handle_links (line 1575) | def handle_links(new_links, resolve_name_conflicts): function generate_clash_config (line 1589) | def generate_clash_config(links, load_nodes): function not_contains (line 1671) | def not_contains(s): class ClashAPIException (line 1676) | class ClashAPIException(Exception): class ProxyTestResult (line 1682) | class ProxyTestResult: method __init__ (line 1685) | def __init__(self, name: str, delay: Optional[float] = None): method is_valid (line 1692) | def is_valid(self) -> bool: function ensure_executable (line 1696) | def ensure_executable(file_path): function handle_clash_error (line 1703) | def handle_clash_error(error_message, config_file_path): function download_and_extract_latest_release (line 1743) | def download_and_extract_latest_release(): function read_output (line 1815) | def read_output(pipe, output_lines): function kill_clash (line 1824) | def kill_clash(): function start_clash (line 1866) | def start_clash(): function is_clash_api_running (line 1924) | def is_clash_api_running(): function switch_proxy (line 1937) | def switch_proxy(proxy_name='DIRECT'): class ClashAPI (line 1962) | class ClashAPI: method __init__ (line 1963) | def __init__(self, host: str, ports: List[int], secret: str = ""): method __aenter__ (line 1978) | async def __aenter__(self): method __aexit__ (line 1981) | async def __aexit__(self, exc_type, exc_val, exc_tb): method check_connection (line 1984) | async def check_connection(self) -> bool: method get_proxies (line 2003) | async def get_proxies(self) -> Dict: method test_proxy_delay (line 2022) | async def test_proxy_delay(self, proxy_name: str) -> ProxyTestResult: class ClashConfig (line 2056) | class ClashConfig: method __init__ (line 2059) | def __init__(self, config_path: str): method _load_config (line 2064) | def _load_config(self) -> dict: method _get_proxy_groups (line 2076) | def _get_proxy_groups(self) -> List[Dict]: method get_group_names (line 2080) | def get_group_names(self) -> List[str]: method get_group_proxies (line 2084) | def get_group_proxies(self, group_name: str) -> List[str]: method remove_invalid_proxies (line 2091) | def remove_invalid_proxies(self, results: List[ProxyTestResult]): method keep_proxies_by_limit (line 2115) | def keep_proxies_by_limit(self, proxy_names): method update_group_proxies (line 2119) | def update_group_proxies(self, group_name: str, results: List[ProxyTes... method save (line 2137) | def save(self): function print_test_summary (line 2155) | def print_test_summary(group_name: str, results: List[ProxyTestResult]): function test_group_proxies (line 2182) | async def test_group_proxies(clash_api: ClashAPI, proxies: List[str]) ->... function proxy_clean (line 2202) | async def proxy_clean(): function parse_datetime_variables (line 2316) | def parse_datetime_variables(): function strip_proxy_prefix (line 2329) | def strip_proxy_prefix(url): function is_github_raw_url (line 2340) | def is_github_raw_url(url): function extract_file_pattern (line 2345) | def extract_file_pattern(url): function get_github_filename (line 2354) | def get_github_filename(github_url, file_suffix): function parse_template (line 2380) | def parse_template(template_url, datetime_vars): function resolve_template_url (line 2415) | def resolve_template_url(template_url): function start_download_test (line 2441) | def start_download_test(proxy_names, speed_limit=0.1): function test_all_proxies (line 2464) | def test_all_proxies(proxy_names): function test_proxy_speed (line 2479) | def test_proxy_speed(proxy_name): function upload_and_generate_urls (line 2516) | def upload_and_generate_urls(file_path=CONFIG_FILE): function work (line 2589) | def work(links, check=False, allowed_types=[], only_check=False): FILE: WebUI.py function capture_output (line 23) | def capture_output(func, *args, **kwargs): function show_scrolling_tips (line 87) | def show_scrolling_tips(): function cleanup_config_files (line 147) | def cleanup_config_files(): function remove_duplicate_proxies (line 172) | def remove_duplicate_proxies(config): function load_settings (line 229) | def load_settings(): function save_settings (line 239) | def save_settings(settings): function save_speed_test_results (line 247) | def save_speed_test_results(results, group_name, node_count): function load_speed_test_results (line 261) | def load_speed_test_results(): function custom_generate_clash_config (line 272) | def custom_generate_clash_config(links, nodes=None): function test_proxy_speed (line 283) | def test_proxy_speed(proxy_name, test_url="https://speed.cloudflare.com/... function is_clash_running (line 351) | def is_clash_running(): function _start_clash (line 360) | def _start_clash(rerun=True): function _stop_clash (line 372) | def _stop_clash(rerun=True): function merge_node_data (line 393) | def merge_node_data(data, delays): function on_text_change (line 554) | def on_text_change():