diff --git a/app/features/ytdlp/ytdlp.py b/app/features/ytdlp/ytdlp.py index 720c0054..1a1f0a84 100644 --- a/app/features/ytdlp/ytdlp.py +++ b/app/features/ytdlp/ytdlp.py @@ -1,4 +1,4 @@ -# flake8: noqa: F401 +# flake8: noqa: F401, RUF100, W291, I001 import sys from typing import Any @@ -49,6 +49,7 @@ class _ArchiveProxy: class YTDLP(yt_dlp.YoutubeDL): _interrupted = False + _registered = False def __init__(self, params=None, auto_init=True): # Avoid yt-dlp preloading the archive file by stripping the param first @@ -73,6 +74,15 @@ class YTDLP(yt_dlp.YoutubeDL): pass self.archive = _ArchiveProxy(orig_file) + if not YTDLP._registered: + try: + from app.yt_dlp_plugins.postprocessor.nfo_maker import NFOMakerPP + from yt_dlp.postprocessor import postprocessors + + postprocessors.value.update({"NFOMakerPP": NFOMakerPP}) + YTDLP._registered = True + except Exception: + pass def _delete_downloaded_files(self, *args, **kwargs) -> None: if self._interrupted: diff --git a/app/library/downloads/status_tracker.py b/app/library/downloads/status_tracker.py index 3a9c406e..edd248d8 100644 --- a/app/library/downloads/status_tracker.py +++ b/app/library/downloads/status_tracker.py @@ -66,9 +66,17 @@ class StatusTracker: """ self.info.datetime = str(formatdate(time.time())) - self.info.filename = safe_relative_path(filepath, Path(self.download_dir), self.temp_path) + self.info.filename = safe_relative_path(filepath, Path(self.download_dir)) self.final_update = True self.logger.debug(f"Final file name: '{filepath}'.") + try: + filepath.relative_to(self.download_dir) + except ValueError: + self.logger.warning( + f"Final file '{filepath}' is outside of the intended download directory '{self.download_dir}'." + ) + self.info.filename = None + return if filepath.is_file() and filepath.exists(): try: diff --git a/app/yt_dlp_plugins/postprocessor/nfo_maker.py b/app/yt_dlp_plugins/postprocessor/nfo_maker.py index 9a341294..9097e101 100644 --- a/app/yt_dlp_plugins/postprocessor/nfo_maker.py +++ b/app/yt_dlp_plugins/postprocessor/nfo_maker.py @@ -120,6 +120,10 @@ class NFOMakerPP(PostProcessor): return "NFOMaker" def run(self, info: dict | None = None) -> tuple[list, dict]: + if "fail" == self.mode: + msg = "Intentionally failing due to mode=fail." + raise Exception(msg) + if not info: self.report_warning("No info provided to NFO Maker.") return [], {} diff --git a/ui/app/components/Queue.vue b/ui/app/components/Queue.vue index 57db52c9..4166a08c 100644 --- a/ui/app/components/Queue.vue +++ b/ui/app/components/Queue.vue @@ -121,7 +121,7 @@