diff --git a/backend/destinations.py b/backend/destinations.py index 008d547..378e5d4 100644 --- a/backend/destinations.py +++ b/backend/destinations.py @@ -163,14 +163,43 @@ def recuperer_booth_password() -> dict: def detecter_usb() -> list[str]: - """Detecte les cles USB montees.""" - chemins_possibles = [Path("/media"), Path("/mnt")] + """Detecte les cles USB montees (cherche dans /media, /mnt et /media//).""" usb_trouvees = [] - for racine in chemins_possibles: - if racine.exists(): - for sous_dossier in racine.iterdir(): - if sous_dossier.is_mount() or (sous_dossier.is_dir() and any(sous_dossier.iterdir())): - usb_trouvees.append(str(sous_dossier)) + candidats = [] + + for racine in [Path("/media"), Path("/mnt")]: + if not racine.exists(): + continue + try: + for niveau1 in racine.iterdir(): + if not niveau1.is_dir(): + continue + if niveau1.is_mount(): + candidats.append(niveau1) + else: + # /media// → descendre encore (udiskie) + try: + for niveau2 in niveau1.iterdir(): + if niveau2.is_dir() and niveau2.is_mount(): + candidats.append(niveau2) + except PermissionError: + pass + except PermissionError: + pass + + for chemin in candidats: + # Exclure les partitions système + try: + result = __import__("subprocess").run( + ["findmnt", "-no", "FSTYPE", str(chemin)], + capture_output=True, text=True, timeout=3 + ) + fstype = result.stdout.strip() + if fstype in ("vfat", "exfat", "ntfs", "ext4", "ext3", "hfsplus"): + usb_trouvees.append(str(chemin)) + except Exception: + usb_trouvees.append(str(chemin)) + return usb_trouvees