feat: Enhance media cleanup functionality with loading indicator and detailed results
This commit is contained in:
+16
-10
@@ -109,21 +109,21 @@ import psutil
|
||||
|
||||
|
||||
|
||||
def _directory_size_bytes(path: str) -> int:
|
||||
"""Return recursive directory size in bytes, skipping unreadable files."""
|
||||
def _media_file_inventory(path: str) -> dict[str, int]:
|
||||
"""Return a mapping of file path to byte size for files under a directory."""
|
||||
if not path or not os.path.exists(path):
|
||||
return 0
|
||||
return {}
|
||||
|
||||
total = 0
|
||||
inventory: dict[str, int] = {}
|
||||
for root, _, files in os.walk(path):
|
||||
for filename in files:
|
||||
file_path = os.path.join(root, filename)
|
||||
try:
|
||||
total += os.path.getsize(file_path)
|
||||
inventory[file_path] = os.path.getsize(file_path)
|
||||
except OSError:
|
||||
continue
|
||||
|
||||
return total
|
||||
return inventory
|
||||
|
||||
|
||||
def feedback_checker(user):
|
||||
@@ -474,11 +474,10 @@ def media_cleanup(request):
|
||||
command_kwargs["exclude"] = exclude
|
||||
|
||||
error_message = ""
|
||||
media_size_before = _directory_size_bytes(settings.MEDIA_ROOT)
|
||||
media_size_after = media_size_before
|
||||
media_inventory_before = _media_file_inventory(settings.MEDIA_ROOT)
|
||||
media_inventory_after = media_inventory_before
|
||||
try:
|
||||
call_command("cleanup_unused_media", **command_kwargs)
|
||||
media_size_after = _directory_size_bytes(settings.MEDIA_ROOT)
|
||||
except CommandError as exc:
|
||||
success = False
|
||||
error_message = str(exc)
|
||||
@@ -486,8 +485,14 @@ def media_cleanup(request):
|
||||
success = False
|
||||
error_message = str(exc)
|
||||
|
||||
media_inventory_after = _media_file_inventory(settings.MEDIA_ROOT)
|
||||
|
||||
media_size_before = sum(media_inventory_before.values())
|
||||
media_size_after = sum(media_inventory_after.values())
|
||||
removed_files = set(media_inventory_before) - set(media_inventory_after)
|
||||
|
||||
output = out.getvalue().strip()
|
||||
recovered_size = max(0, media_size_before - media_size_after)
|
||||
recovered_size = sum(media_inventory_before[path] for path in removed_files)
|
||||
context.update(
|
||||
{
|
||||
"ran": True,
|
||||
@@ -502,6 +507,7 @@ def media_cleanup(request):
|
||||
"media_size_before": media_size_before,
|
||||
"media_size_after": media_size_after,
|
||||
"recovered_size": recovered_size,
|
||||
"removed_file_count": len(removed_files),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user