download.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # -*- coding: utf-8 -*-
  2. """
  3. Event-Datenklassen fuer Downloads.
  4. Definiert typisierte Events fuer den Download-Lifecycle:
  5. - BeforeDownload: Vor dem Download (cancellable, URL/Pfad aenderbar)
  6. - DownloadProgress: Fortschritts-Update (informativ)
  7. - DownloadCompleted: Download erfolgreich
  8. - DownloadFailed: Download fehlgeschlagen
  9. - BeforeExtract: Vor dem Entpacken (cancellable, Ziel aenderbar)
  10. - ExtractCompleted: Entpacken abgeschlossen
  11. """
  12. from dataclasses import dataclass
  13. from trixy_core.events.event_data.base import EventData
  14. @dataclass
  15. class BeforeDownload(EventData):
  16. """Cancellable — vor dem Download. Plugins koennen URL/Pfad aendern oder cancel()."""
  17. download_id: str = ""
  18. url: str = ""
  19. filename: str = ""
  20. dest_path: str = ""
  21. total_size: int = 0
  22. @dataclass
  23. class DownloadProgress(EventData):
  24. """Fortschritts-Update waehrend des Downloads (informativ, alle 5%)."""
  25. download_id: str = ""
  26. filename: str = ""
  27. downloaded: int = 0
  28. total: int = 0
  29. percent: float = 0.0
  30. speed: int = 0
  31. eta_seconds: int = 0
  32. @dataclass
  33. class DownloadCompleted(EventData):
  34. """Download erfolgreich abgeschlossen."""
  35. download_id: str = ""
  36. url: str = ""
  37. filename: str = ""
  38. dest_path: str = ""
  39. size: int = 0
  40. duration_seconds: float = 0.0
  41. speed_avg: int = 0
  42. @dataclass
  43. class DownloadFailed(EventData):
  44. """Download fehlgeschlagen."""
  45. download_id: str = ""
  46. url: str = ""
  47. filename: str = ""
  48. error: str = ""
  49. @dataclass
  50. class BeforeExtract(EventData):
  51. """Cancellable — vor dem Entpacken. Plugins koennen cancel() oder dest_dir aendern."""
  52. download_id: str = ""
  53. filename: str = ""
  54. archive_path: str = ""
  55. dest_dir: str = ""
  56. @dataclass
  57. class ExtractCompleted(EventData):
  58. """Entpacken abgeschlossen."""
  59. download_id: str = ""
  60. filename: str = ""
  61. dest_dir: str = ""
  62. file_count: int = 0