diff --git a/app/ytdl.py b/app/ytdl.py index 44eceb5..6740de1 100644 --- a/app/ytdl.py +++ b/app/ytdl.py @@ -28,7 +28,7 @@ class DownloadQueueNotifier: raise NotImplementedError class DownloadInfo: - def __init__(self, id, title, url, quality, format, folder, custom_name_prefix): + def __init__(self, id, title, url, quality, format, folder, custom_name_prefix, error=None): self.id = id if len(custom_name_prefix) == 0 else f'{custom_name_prefix}.{id}' self.title = title if len(custom_name_prefix) == 0 else f'{custom_name_prefix}.{title}' self.url = url @@ -38,6 +38,7 @@ class DownloadInfo: self.custom_name_prefix = custom_name_prefix self.status = self.msg = self.percent = self.speed = self.eta = None self.timestamp = time.time_ns() + self.error = error class Download: manager = None @@ -86,6 +87,7 @@ class Download: 'outtmpl': { "default": self.output_template, "chapter": self.output_template_chapter }, 'format': self.format, 'socket_timeout': 30, + 'ignore_no_formats_error': True, 'progress_hooks': [put_status], 'postprocessor_hooks': [put_status_postprocessor], **self.ytdl_opts, @@ -216,6 +218,7 @@ class DownloadQueue: 'quiet': True, 'no_color': True, 'extract_flat': True, + 'ignore_no_formats_error': True, **self.config.YTDL_OPTIONS, }).extract_info(url, download=False) @@ -246,6 +249,13 @@ class DownloadQueue: if not entry: return {'status': 'error', 'msg': "Invalid/empty data was given."} + error = None + if "live_status" in entry and "release_timestamp" in entry and entry.get("live_status") == "is_upcoming": + error = f"Live stream is scheduled to start at {time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime(entry.get('release_timestamp')))}" + else: + if "msg" in entry: + error = entry["msg"] + etype = entry.get('_type') or 'video' if etype == 'playlist': entries = entry['entries'] @@ -264,7 +274,7 @@ class DownloadQueue: return {'status': 'ok'} elif etype == 'video' or etype.startswith('url') and 'id' in entry and 'title' in entry: if not self.queue.exists(entry['id']): - dl = DownloadInfo(entry['id'], entry['title'], entry.get('webpage_url') or entry['url'], quality, format, folder, custom_name_prefix) + dl = DownloadInfo(entry['id'], entry['title'], entry.get('webpage_url') or entry['url'], quality, format, folder, custom_name_prefix, error) dldirectory, error_message = self.__calc_download_path(quality, format, folder) if error_message is not None: return error_message diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index a339eb7..dcba6ec 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -156,14 +156,19 @@ - {{ download.value.title }} - {{ download.value.title }} + {{ download.value.title }} + + {{download.value.title}} +
{{download.value.msg}}
+
Error: {{download.value.error}}
+
- + +