diff --git a/app.py b/app.py index dd60f8e..8056cbd 100644 --- a/app.py +++ b/app.py @@ -266,23 +266,41 @@ def cleanup_backups(backup_type): grouped[key] = [] grouped[key].append(item) - deleted_count = 0 - errors = [] + import tempfile + import os + to_delete_paths = [] for key, group_items in grouped.items(): # Sort by ModTime descending (newest first) group_items.sort(key=lambda x: x.get("ModTime", ""), reverse=True) # Keep first 2 to_delete = group_items[2:] for item in to_delete: - path = item.get("Path", item.get("Name")) - full_remote_path = f"{remote}/{path}" - cmd = ["rclone", "deletefile", full_remote_path, "--drive-root-folder-id", "1ey-5aABgHDtirxeJarWy0ZmeqQPVTYtm"] - result = subprocess.run(cmd, capture_output=True, text=True, timeout=60) - if result.returncode == 0: - deleted_count += 1 - else: - errors.append(f"Failed to delete {path}: {result.stderr}") + to_delete_paths.append(item.get("Path", item.get("Name"))) + + deleted_count = 0 + errors = [] + + if to_delete_paths: + with tempfile.NamedTemporaryFile(mode='w', delete=False) as f: + for p in to_delete_paths: + f.write(p + '\n') + list_file = f.name + + cmd = [ + "rclone", "delete", remote, + "--files-from", list_file, + "--drive-root-folder-id", "1ey-5aABgHDtirxeJarWy0ZmeqQPVTYtm", + "--drive-use-trash=false" # permanently delete to immediately free space + ] + + result = subprocess.run(cmd, capture_output=True, text=True, timeout=300) + os.remove(list_file) + + if result.returncode == 0: + deleted_count = len(to_delete_paths) + else: + errors.append(f"Failed to bulk delete: {result.stderr}") # invalidate cache global _stats_cache