# core/commands/rm.py from core.connection import BuzzerError from core.commands.ls import get_file_tree def _delete_recursive(conn, nodes): """Löscht Knoten Bottom-Up (erst Dateien/Unterordner, dann den Ordner selbst)""" for node in nodes: if node["type"] == 'D': if "children" in node and node["children"]: _delete_recursive(conn, node["children"]) _try_rm(conn, node["path"], is_dir=True) elif node["type"] == 'F': _try_rm(conn, node["path"], is_dir=False) def _try_rm(conn, path, is_dir=False): icon = "📁" if is_dir else "📄" try: conn.send_command(f"rm {path}") print(f" 🗑️ {icon} Gelöscht: {path}") except BuzzerError as e: print(f" ❌ Fehler bei {path}: {e}") def execute(conn, path: str, recursive: bool = False): """Löscht eine Datei oder ein Verzeichnis.""" if recursive: print(f"Sammle Dateibaum für rekursives Löschen von '{path}'...") # Lade den kompletten Baum ab diesem Pfad tree = get_file_tree(conn, target_path=path, recursive=True) if len(tree) == 1 and tree[0].get("type") == "E": print(f"❌ Pfad nicht gefunden oder Fehler: {tree[0]['name']}") return if not tree: print(f"Ordner '{path}' ist bereits leer.") else: _delete_recursive(conn, tree) # Am Ende das eigentliche Ziel löschen (die Datei oder den nun leeren Ordner) try: conn.send_command(f"rm {path}") print(f"🗑️ '{path}' erfolgreich gelöscht.") except BuzzerError as e: print(f"❌ Fehler beim Löschen von '{path}': {e}")