# -*- coding: utf-8 -*- """ Event-Datenklassen fuer Downloads. Definiert typisierte Events fuer den Download-Lifecycle: - BeforeDownload: Vor dem Download (cancellable, URL/Pfad aenderbar) - DownloadProgress: Fortschritts-Update (informativ) - DownloadCompleted: Download erfolgreich - DownloadFailed: Download fehlgeschlagen - BeforeExtract: Vor dem Entpacken (cancellable, Ziel aenderbar) - ExtractCompleted: Entpacken abgeschlossen """ from dataclasses import dataclass from trixy_core.events.event_data.base import EventData @dataclass class BeforeDownload(EventData): """Cancellable — vor dem Download. Plugins koennen URL/Pfad aendern oder cancel().""" download_id: str = "" url: str = "" filename: str = "" dest_path: str = "" total_size: int = 0 @dataclass class DownloadProgress(EventData): """Fortschritts-Update waehrend des Downloads (informativ, alle 5%).""" download_id: str = "" filename: str = "" downloaded: int = 0 total: int = 0 percent: float = 0.0 speed: int = 0 eta_seconds: int = 0 @dataclass class DownloadCompleted(EventData): """Download erfolgreich abgeschlossen.""" download_id: str = "" url: str = "" filename: str = "" dest_path: str = "" size: int = 0 duration_seconds: float = 0.0 speed_avg: int = 0 @dataclass class DownloadFailed(EventData): """Download fehlgeschlagen.""" download_id: str = "" url: str = "" filename: str = "" error: str = "" @dataclass class BeforeExtract(EventData): """Cancellable — vor dem Entpacken. Plugins koennen cancel() oder dest_dir aendern.""" download_id: str = "" filename: str = "" archive_path: str = "" dest_dir: str = "" @dataclass class ExtractCompleted(EventData): """Entpacken abgeschlossen.""" download_id: str = "" filename: str = "" dest_dir: str = "" file_count: int = 0