From ff9dea0488ecaa2713a823d8a6d13db8fee2c725 Mon Sep 17 00:00:00 2001 From: Lukas Date: Tue, 30 Dec 2025 20:36:02 +0100 Subject: [PATCH] removed cancel request --- src/core/SeriesApp.py | 20 ------------------ src/core/providers/aniworld_provider.py | 26 +---------------------- src/core/providers/base_provider.py | 28 +++++++------------------ src/server/fastapi_app.py | 5 ----- src/server/services/anime_service.py | 14 ------------- 5 files changed, 9 insertions(+), 84 deletions(-) diff --git a/src/core/SeriesApp.py b/src/core/SeriesApp.py index 94573af..2bc02dc 100644 --- a/src/core/SeriesApp.py +++ b/src/core/SeriesApp.py @@ -198,25 +198,7 @@ class SeriesApp: def scan_status(self, value): """Set scan_status event handler.""" self._events.scan_status = value - - def request_download_cancel(self) -> None: - """Request cancellation of any ongoing download. - - This method signals the download provider to stop any active - downloads. The actual cancellation happens asynchronously in - the progress hook of the downloader. - """ - logger.info("Requesting download cancellation") - self.loader.request_cancel() - def reset_download_cancel(self) -> None: - """Reset the download cancellation flag. - - Should be called before starting a new download to ensure - it's not immediately cancelled. - """ - self.loader.reset_cancel() - def load_series_from_list(self, series: list) -> None: """ Load series into the in-memory list. @@ -304,8 +286,6 @@ class SeriesApp: lookups. The 'serie_folder' parameter is only used for filesystem operations. """ - # Reset cancel flag before starting new download - self.reset_download_cancel() logger.info( "Starting download: %s (key: %s) S%02dE%02d", diff --git a/src/core/providers/aniworld_provider.py b/src/core/providers/aniworld_provider.py index a0bfb45..8d7d11b 100644 --- a/src/core/providers/aniworld_provider.py +++ b/src/core/providers/aniworld_provider.py @@ -203,31 +203,7 @@ class AniworldLoader(Loader): is_available = language_code in languages logging.debug(f"Available languages for S{season:02}E{episode:03}: {languages}, requested: {language_code}, available: {is_available}") - return is_available - - def request_cancel(self) -> None: - """Request cancellation of any ongoing download. - - Sets the internal cancellation flag. Downloads will check this - flag periodically and abort if set. - """ - logging.info("Download cancellation requested") - self._cancel_flag.set() - - def reset_cancel(self) -> None: - """Reset the cancellation flag. - - Should be called before starting a new download. - """ - self._cancel_flag.clear() - - def is_cancelled(self) -> bool: - """Check if cancellation has been requested. - - Returns: - bool: True if cancellation was requested - """ - return self._cancel_flag.is_set() + return is_available def download( self, diff --git a/src/core/providers/base_provider.py b/src/core/providers/base_provider.py index 436aa42..fa0a549 100644 --- a/src/core/providers/base_provider.py +++ b/src/core/providers/base_provider.py @@ -4,29 +4,17 @@ from typing import Any, Callable, Dict, List, Optional class Loader(ABC): """Abstract base class for anime data loaders/providers.""" - @abstractmethod - def request_cancel(self) -> None: - """Request cancellation of any ongoing download. - - Sets an internal flag that downloads should check periodically - and abort if set. This enables graceful shutdown. + def subscribe_download_progress(self, handler): + """Subscribe a handler to the download_progress event. + Args: + handler: Callable to be called with progress dict. """ - @abstractmethod - def reset_cancel(self) -> None: - """Reset the cancellation flag. - - Should be called before starting a new download to ensure - it's not immediately cancelled. - """ - - @abstractmethod - def is_cancelled(self) -> bool: - """Check if cancellation has been requested. - - Returns: - bool: True if cancellation was requested + def unsubscribe_download_progress(self, handler): + """Unsubscribe a handler from the download_progress event. + Args: + handler: Callable previously subscribed. """ @abstractmethod diff --git a/src/server/fastapi_app.py b/src/server/fastapi_app.py index 15532a4..9b0e3c9 100644 --- a/src/server/fastapi_app.py +++ b/src/server/fastapi_app.py @@ -191,10 +191,6 @@ async def lifespan(_application: FastAPI): ) if _download_service_instance is not None: logger.info("Stopping download service...") - await asyncio.wait_for( - _download_service_instance.stop(timeout=min(10.0, remaining_time())), - timeout=min(15.0, remaining_time()) - ) logger.info("Download service stopped successfully") except asyncio.TimeoutError: logger.warning("Download service shutdown timed out") @@ -206,7 +202,6 @@ async def lifespan(_application: FastAPI): progress_service = get_progress_service() logger.info("Cleaning up progress service...") # Clear any active progress tracking and subscribers - progress_service._subscribers.clear() progress_service._active_progress.clear() logger.info("Progress service cleanup complete") except Exception as e: # pylint: disable=broad-exception-caught diff --git a/src/server/services/anime_service.py b/src/server/services/anime_service.py index 317110c..51d1cc5 100644 --- a/src/server/services/anime_service.py +++ b/src/server/services/anime_service.py @@ -72,20 +72,6 @@ class AnimeService: logger.exception("Failed to subscribe to SeriesApp events") raise AnimeServiceError("Initialization failed") from e - def request_download_cancel(self) -> None: - """Request cancellation of any ongoing download. - - This method signals the underlying download provider to stop - any active downloads. The cancellation happens asynchronously - via progress hooks in the downloader. - - Should be called during shutdown to stop in-progress downloads. - """ - logger.info("Requesting download cancellation via AnimeService") - try: - self._app.request_download_cancel() - except Exception as e: - logger.warning("Failed to request download cancellation: %s", e) def _on_download_status(self, args) -> None: """Handle download status events from SeriesApp.