feat: feedback verbetering 03

This commit is contained in:
kodi
2026-03-15 14:16:17 +01:00
parent 492082c2b7
commit 3d82699535
10 changed files with 197 additions and 49 deletions
+56 -15
View File
@@ -80,10 +80,10 @@ class TaskRunner:
)
thread.start()
def enqueue_delete_path(self, task_id: str, target: str, kind: str, recursive: bool) -> None:
def enqueue_delete_path(self, task_id: str, item: dict[str, object]) -> None:
thread = threading.Thread(
target=self._run_delete_path,
args=(task_id, target, kind, recursive),
args=(task_id, item),
daemon=True,
)
thread.start()
@@ -429,39 +429,57 @@ class TaskRunner:
total_items=total_items,
)
def _run_delete_path(self, task_id: str, target: str, kind: str, recursive: bool) -> None:
def _run_delete_path(self, task_id: str, item: dict[str, object]) -> None:
target = str(item["target"])
kind = str(item["kind"])
recursive = bool(item["recursive"])
files = list(item.get("files", [])) # type: ignore[arg-type]
directories = list(item.get("directories", [])) # type: ignore[arg-type]
total_items = int(item.get("progress_total_items", len(files)))
current_item = str(item.get("progress_label")) if item.get("progress_label") else None
if not self._repository.mark_running(
task_id=task_id,
done_items=0,
total_items=1,
current_item=target,
total_items=total_items,
current_item=current_item,
):
self._finalize_if_already_cancelled(task_id, done_items=0, total_items=1)
self._finalize_if_already_cancelled(task_id, done_items=0, total_items=total_items)
return
completed_items = 0
try:
path = Path(target)
if kind == "file":
self._filesystem.delete_file(path)
file_entry = files[0]
completed_items = self._delete_planned_file(task_id, file_entry, completed_items, total_items)
elif recursive:
self._filesystem.delete_directory_recursive(path)
for file_entry in files:
if self._is_cancel_requested(task_id):
self._finalize_cancelled(task_id, done_items=completed_items, total_items=total_items)
return
completed_items = self._delete_planned_file(task_id, file_entry, completed_items, total_items)
if self._is_cancel_requested(task_id):
self._finalize_cancelled(task_id, done_items=completed_items, total_items=total_items)
return
for directory in directories:
self._filesystem.delete_empty_directory(Path(directory))
else:
self._filesystem.delete_empty_directory(path)
self._filesystem.delete_empty_directory(Path(target))
self._complete_or_cancel_item_task(
task_id=task_id,
done_items=1,
total_items=1,
done_items=completed_items,
total_items=total_items,
)
except OSError as exc:
task = self._repository.get_task(task_id)
self._repository.mark_failed(
task_id=task_id,
error_code="io_error",
error_message=str(exc),
failed_item=target,
failed_item=(task.get("current_item") if task else None) or target,
done_bytes=None,
total_bytes=None,
done_items=0,
total_items=1,
done_items=completed_items,
total_items=total_items,
)
self._update_history_failed(task_id, str(exc))
@@ -630,6 +648,29 @@ class TaskRunner:
)
return completed_items
def _delete_planned_file(
self,
task_id: str,
file_entry: dict[str, str],
completed_items: int,
total_items: int,
) -> int:
self._repository.update_progress(
task_id=task_id,
done_items=completed_items,
total_items=total_items,
current_item=file_entry["label"],
)
self._filesystem.delete_file(Path(file_entry["path"]))
completed_items += 1
self._repository.update_progress(
task_id=task_id,
done_items=completed_items,
total_items=total_items,
current_item=self._next_item_label_after_completion(completed_items, total_items, file_entry["label"]),
)
return completed_items
def _move_directory_item(
self,
task_id: str,