This commit is contained in:
2025-12-30 11:07:03 +01:00
parent ec611f4dea
commit 701d1a1fde

152
TestDupliciSyncThing2.py Normal file
View File

@@ -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()