feat: improve status tracking in downloads

This commit is contained in:
arabcoders 2026-02-14 20:05:08 +03:00
parent a0fef50248
commit 84077349c7
4 changed files with 27 additions and 5 deletions

View file

@ -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:

View file

@ -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:

View file

@ -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 [], {}

View file

@ -121,7 +121,7 @@
</td>
<td>
<div class="progress-bar is-unselectable">
<div class="progress-percentage">{{ updateProgress(item) }}</div>
<div class="progress-percentage" v-html="updateProgress(item)" />
<div class="progress" :style="{ width: percentPipe(item.percent as number) + '%' }"></div>
</div>
</td>
@ -247,7 +247,7 @@
<div class="columns is-multiline is-mobile">
<div class="column is-12">
<div class="progress-bar is-unselectable">
<div class="progress-percentage">{{ updateProgress(item) }}</div>
<div class="progress-percentage" v-html="updateProgress(item)" />
<div class="progress" :style="{ width: percentPipe(item.percent as number) + '%' }"></div>
</div>
</div>
@ -600,7 +600,7 @@ const updateProgress = (item: StoreItem): string => {
if ('postprocessing' === item.status) {
if (item.postprocessor) {
return `PP Running: ${item.postprocessor}`
return `<i class="fa fa-cog fa-spin"></i> PP: ${item.postprocessor}`
}
return 'Post-processors are running.'
}