From d29f7d95b6138030d344d97f5bd42015d5863ada Mon Sep 17 00:00:00 2001
From: unidcml <subdominanta.acco@gmail.com>
Date: Sun, 2 Feb 2025 19:31:07 +0300
Subject: [PATCH] Add xray-geosite to convert.py

---
 convert.py | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

diff --git a/convert.py b/convert.py
index 950de92..5b91bf6 100755
--- a/convert.py
+++ b/convert.py
@@ -306,6 +306,48 @@ def generate_srs_subnets(input_file, output_json_directory='JSON', compiled_outp
     except subprocess.CalledProcessError as e:
         print(f"Compile error {output_file_path}: {e}")
 
+def prepare_dat_domains(domains_or_dirs, output_name):
+    compiler_directory = 'xray-geosite'
+    output_lists_directory = os.path.join(compiler_directory, 'data')
+
+    os.makedirs(output_lists_directory, exist_ok=True)
+
+    extracted_domains = []
+
+    if all(os.path.isdir(os.path.abspath(d)) for d in domains_or_dirs):
+        for directory in domains_or_dirs:
+            abs_directory = os.path.abspath(directory)
+            for filename in os.listdir(abs_directory):
+                file_path = os.path.join(abs_directory, filename)
+
+                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
+
+    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)
+ 
+def generate_dat_domains(compiled_output_directory='DAT'):
+    working_directory = os.getcwd()
+    compiler_directory = os.path.join(working_directory, 'xray-geosite')
+    data_path = os.path.join(compiler_directory, 'data')
+    output_directory = os.path.abspath(compiled_output_directory)
+
+    os.makedirs(compiled_output_directory, exist_ok=True)
+
+    try:
+        subprocess.run(
+            ["go", "run", compiler_directory, f"--datapath={data_path}", "--outputname=geosite.dat", f"--outputdir={output_directory}"],
+            check=True,
+            cwd=compiler_directory
+        )
+    except subprocess.CalledProcessError as e:
+        print(f"Compile error geosite.dat: {e}")
+
 if __name__ == '__main__':
     # Russia inside
     Path("Russia").mkdir(parents=True, exist_ok=True)
@@ -362,4 +404,10 @@ if __name__ == '__main__':
     # Sing-box subnets
     generate_srs_subnets(DiscordSubnets)
     generate_srs_subnets(TwitterSubnets)
-    generate_srs_subnets(MetaSubnets)
\ No newline at end of file
+    generate_srs_subnets(MetaSubnets)
+
+    # Xray domains
+    prepare_dat_domains(directories, 'russia_inside')
+    prepare_dat_domains(russia_outside, 'russia_outside')
+    prepare_dat_domains(ukraine_inside, 'ukraine_inside')
+    generate_dat_domains()
\ No newline at end of file