From 3c8b49c2bfcc2ce87ca962a3bb89b656912e4501 Mon Sep 17 00:00:00 2001 From: unidcml <147054065+unidcml@users.noreply.github.com> Date: Fri, 6 Jun 2025 17:38:50 +0300 Subject: [PATCH 1/3] Fix --- convert.py | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/convert.py b/convert.py index d9ee57d..ec91e0b 100755 --- a/convert.py +++ b/convert.py @@ -362,28 +362,35 @@ def generate_srs_combined(input_subnets_file, input_domains_file, output_json_di print(f"Compile error {output_file_path}: {e}") -def prepare_dat_domains(domains_or_dirs, output_name): +def prepare_dat_domains(domains, output_name, dirs=[]): output_lists_directory = 'geosite_data' - os.makedirs(output_lists_directory, exist_ok=True) - extracted_domains = [] + domain_attrs = {domain: [] for domain in domains} - if all(os.path.isdir(d) for d in domains_or_dirs): - for directory in domains_or_dirs: - for filename in os.listdir(directory): - file_path = os.path.join(directory, filename) + for directory in dirs: + if not os.path.isdir(directory): + continue + for filename in os.listdir(directory): + file_path = os.path.join(directory, filename) + if not os.path.isfile(file_path): + continue - if os.path.isfile(file_path): - with open(file_path, 'r', encoding='utf-8') as file: - attribute = os.path.splitext(filename)[0] - extracted_domains.extend(f"{line.strip()} @{attribute}" for line in file if line.strip()) - else: - extracted_domains = domains_or_dirs + attribute = os.path.splitext(filename)[0].replace('_', '-') + + with open(file_path, 'r', encoding='utf-8') as f: + for line in f: + domain = line.strip() + if not domain: + continue + if domain in domain_attrs: + domain_attrs[domain].append(f" @{attribute}") output_file_path = os.path.join(output_lists_directory, output_name) - with open(output_file_path, 'w', encoding='utf-8') as file: - file.writelines(f"{name}\n" for name in extracted_domains) + with open(output_file_path, 'w', encoding='utf-8') as out_f: + for domain, attrs in domain_attrs.items(): + line = domain + "".join(attrs) + out_f.write(f"{line}\n") def generate_dat_domains(data_path='geosite_data', output_name='geosite.dat', output_directory='DAT'): os.makedirs(output_directory, exist_ok=True) From 8097852b8b94b58022f2209f1dc08db7e4aec52a Mon Sep 17 00:00:00 2001 From: unidcml <147054065+unidcml@users.noreply.github.com> Date: Fri, 6 Jun 2025 17:40:44 +0300 Subject: [PATCH 2/3] Fix --- convert.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/convert.py b/convert.py index ec91e0b..86c2a40 100755 --- a/convert.py +++ b/convert.py @@ -469,7 +469,7 @@ if __name__ == '__main__': generate_srs_combined(OVHSubnets, "Services/ovh.lst") # Xray domains - prepare_dat_domains(directories, 'russia-inside') + prepare_dat_domains(russia_inside, 'russia-inside', directories) prepare_dat_domains(russia_outside, 'russia-outside') prepare_dat_domains(ukraine_inside, 'ukraine-inside') generate_dat_domains() From a88d3f75cbf069db59083181034e7b898c611c68 Mon Sep 17 00:00:00 2001 From: unidcml <147054065+unidcml@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:11:34 +0300 Subject: [PATCH 3/3] Fix --- convert.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/convert.py b/convert.py index 86c2a40..fe71a9b 100755 --- a/convert.py +++ b/convert.py @@ -391,6 +391,26 @@ def prepare_dat_domains(domains, output_name, dirs=[]): for domain, attrs in domain_attrs.items(): line = domain + "".join(attrs) out_f.write(f"{line}\n") + +def prepare_dat_combined(dirs): + import shutil + + output_lists_directory = 'geosite_data' + os.makedirs(output_lists_directory, exist_ok=True) + + for directory in dirs: + if not os.path.isdir(directory): + continue + + for filename in os.listdir(directory): + source_path = os.path.join(directory, filename) + if not os.path.isfile(source_path): + continue + + new_name = os.path.splitext(filename)[0].replace('_', '-') + destination_path = os.path.join(output_lists_directory, new_name) + + shutil.copyfile(source_path, destination_path) def generate_dat_domains(data_path='geosite_data', output_name='geosite.dat', output_directory='DAT'): os.makedirs(output_directory, exist_ok=True) @@ -472,4 +492,5 @@ if __name__ == '__main__': prepare_dat_domains(russia_inside, 'russia-inside', directories) prepare_dat_domains(russia_outside, 'russia-outside') prepare_dat_domains(ukraine_inside, 'ukraine-inside') + prepare_dat_combined(directories) generate_dat_domains()