From 701d1a1fdee3a045da6183d7cf017b62d33241d7 Mon Sep 17 00:00:00 2001 From: "vladimir.buzalka" Date: Tue, 30 Dec 2025 11:07:03 +0100 Subject: [PATCH] z230 --- TestDupliciSyncThing2.py | 152 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 TestDupliciSyncThing2.py diff --git a/TestDupliciSyncThing2.py b/TestDupliciSyncThing2.py new file mode 100644 index 0000000..4cc609e --- /dev/null +++ b/TestDupliciSyncThing2.py @@ -0,0 +1,152 @@ +import os +import pymysql +import sys + +# ============================== +# ⚙️ NASTAVENÍ +# ============================== +LOCAL_ROOT = r"U:\#Syncthing" + +# Cíl, kam to chceš nahrát (pro kontrolu přesné shody) +TARGET_SUBFOLDER = "Porno" +REMOTE_SHARE_KEY = "#ColdData" + +# DB Nastavení +DB_HOST = "192.168.1.76" +DB_PORT = 3307 +DB_USER = "root" +DB_PASS = "Vlado9674+" +DB_NAME = "torrents" +DB_TABLE = "file_md5_index" + + +# ============================== + +def get_db_connection(): + try: + return pymysql.connect( + host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASS, + database=DB_NAME, cursorclass=pymysql.cursors.DictCursor + ) + except Exception as e: + sys.exit(f"❌ Chyba DB: {e}") + + +def normalize_path(path): + return path.replace("\\", "/").lower() + + +def main(): + print(f"🚀 KŘÍŽOVÁ KONTROLA (Co nahrát vs. Co už někde je)") + print("=====================================================") + + # 1. NAČÍST CELOU DB (pro hledání zatoulaných souborů) + print("📡 Stahuji kompletní index serveru (Jméno + Velikost)...") + + # Mapa: (jmeno, velikost) -> [seznam cest] + global_map = {} + + conn = get_db_connection() + with conn.cursor() as cursor: + # Stáhneme vše z #ColdData + sql = f"SELECT file_name, file_size, full_path FROM {DB_TABLE} WHERE full_path LIKE %s" + cursor.execute(sql, (f"%/{REMOTE_SHARE_KEY}/%",)) + rows = cursor.fetchall() + + for row in rows: + fname = row['file_name'].lower() + size = row['file_size'] + path = row['full_path'] + + key = (fname, size) + if key not in global_map: + global_map[key] = [] + global_map[key].append(path) + + print(f"✅ Index načten ({len(rows):,} souborů).") + + # 2. DEFINICE CÍLOVÉ CESTY (pro kontrolu přesné shody) + # Cesta v DB vypadá např: /mnt/disk1/#ColdData/Porno/Slozka/Film.avi + # My budeme kontrolovat, jestli soubor už je v "cílové logické cestě" + target_pattern_part = f"/{REMOTE_SHARE_KEY}/{TARGET_SUBFOLDER}/".lower() + + # 3. SKENOVÁNÍ LOKÁLNÍHO DISKU + print(f"📂 Skenuji {LOCAL_ROOT} a třídím...") + + count_upload = 0 + count_move = 0 + count_ok = 0 + + f_upload = open("1_NAHRAT_NA_SERVER.txt", "w", encoding="utf-8") + f_move = open("2_JIZ_EXISTUJI_JINDE.txt", "w", encoding="utf-8") + + f_upload.write("TOTO JSOU DATA, KTERÁ NA SERVERU VŮBEC NEJSOU:\n") + f_move.write("TOTO NAHRAJEŠ ZBYTEČNĚ (Už to tam je, ale v jiné složce):\n") + + for root, dirs, files in os.walk(LOCAL_ROOT): + if ".stfolder" in dirs: dirs.remove(".stfolder") + if ".stversions" in dirs: dirs.remove(".stversions") + + for filename in files: + fname_lower = filename.lower() + local_full_path = os.path.join(root, filename) + + try: + local_size = os.path.getsize(local_full_path) + # Relativní cesta, kam bys to nahrál (např. Herci/Film.avi) + rel_path = os.path.relpath(local_full_path, LOCAL_ROOT) + clean_rel_path = normalize_path(rel_path) + except OSError: + continue + + key = (fname_lower, local_size) + + # --- LOGIKA ROZHODOVÁNÍ --- + + if key in global_map: + # Soubor (stejné jméno a velikost) na serveru EXISTUJE. + # Otázka je: Je ve správné složce? + + server_paths = global_map[key] + is_in_target = False + + # Zkontrolujeme, zda alespoň jedna cesta na serveru odpovídá té, kam to chceš nahrát + # Tedy jestli obsahuje /#ColdData/Porno/ + tvoji relativní cestu + + # Hledaný koncový řetězec: "porno/herci/film.avi" + target_suffix = f"{TARGET_SUBFOLDER}/{clean_rel_path}".lower() + + for path in server_paths: + if path.lower().endswith(target_suffix): + is_in_target = True + break + + if is_in_target: + # Je to tam, kde to má být. + count_ok += 1 + else: + # Je to na serveru, ale JINDE. + count_move += 1 + f_move.write(f"SOUBOR: {clean_rel_path}\n") + f_move.write(f" >>> Nalezen jinde: {server_paths[0]}\n") + else: + # Na serveru není vůbec (ani jinde). + count_upload += 1 + f_upload.write(f"{local_full_path}\n") + + if (count_upload + count_move + count_ok) % 1000 == 0: + print(f" ... zpracováno {count_upload + count_move + count_ok} ...", end="\r") + + f_upload.close() + f_move.close() + + print("\n\n📊 FINÁLNÍ REPORT") + print("=====================================================") + print(f"✅ UŽ TAM JE (Správně): {count_ok:,}") + print(f"📦 UŽ TAM JE (Ale jinde): {count_move:,} -> Koukni do 2_JIZ_EXISTUJI_JINDE.txt") + print(f"🚀 MUSÍŠ NAHRÁT (Nové): {count_upload:,} -> Seznam v 1_NAHRAT_NA_SERVER.txt") + print("=====================================================") + + +if __name__ == "__main__": + main() \ No newline at end of file