Reworked download progress hook
Be more resilient about missing keys. Log the downloading state the first time through.
This commit is contained in:
1 parent
26940c86b4
commit
dfc63a2b94
1 file changed
+10
-13
+10
-13
@@ -30,7 +30,6 @@ class PPHookStatus:
|
|||||||
|
|
||||||
def yt_dlp_progress_hook(event):
|
def yt_dlp_progress_hook(event):
|
||||||
hook = progress_hook.get('status', None)
|
hook = progress_hook.get('status', None)
|
||||||
filename = os.path.basename(event['filename'])
|
|
||||||
if hook is None:
|
if hook is None:
|
||||||
log.error('yt_dlp_progress_hook: failed to get hook status object')
|
log.error('yt_dlp_progress_hook: failed to get hook status object')
|
||||||
return None
|
return None
|
||||||
@@ -39,31 +38,29 @@ def yt_dlp_progress_hook(event):
|
|||||||
log.warn(f'[youtube-dl] unknown event: {str(event)}')
|
log.warn(f'[youtube-dl] unknown event: {str(event)}')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if event.get('downloaded_bytes') is None or event.get('total_bytes') is None:
|
filename = os.path.basename(event.get('filename', '???'))
|
||||||
return None
|
if 'error' == event['status']:
|
||||||
|
|
||||||
if event['status'] == 'error':
|
|
||||||
log.error(f'[youtube-dl] error occured downloading: {filename}')
|
log.error(f'[youtube-dl] error occured downloading: {filename}')
|
||||||
elif event['status'] == 'downloading':
|
elif 'downloading' == event['status']:
|
||||||
downloaded_bytes = event.get('downloaded_bytes', 0)
|
downloaded_bytes = event.get('downloaded_bytes', 0) or 0
|
||||||
total_bytes = event.get('total_bytes', 0)
|
total_bytes = event.get('total_bytes', 0) or 0
|
||||||
eta = event.get('_eta_str', '?').strip()
|
eta = event.get('_eta_str', '?').strip()
|
||||||
percent_done = event.get('_percent_str', '?').strip()
|
percent_done = event.get('_percent_str', '?').strip()
|
||||||
speed = event.get('_speed_str', '?').strip()
|
speed = event.get('_speed_str', '?').strip()
|
||||||
total = event.get('_total_bytes_str', '?').strip()
|
total = event.get('_total_bytes_str', '?').strip()
|
||||||
if downloaded_bytes > 0 and total_bytes > 0:
|
if downloaded_bytes > 0 and total_bytes > 0:
|
||||||
p = round((event['downloaded_bytes'] / event['total_bytes']) * 100)
|
p = round(100 * downloaded_bytes / total_bytes)
|
||||||
if (p % 5 == 0) and p > hook.download_progress:
|
if (0 == p % 5) and p > hook.download_progress:
|
||||||
hook.download_progress = p
|
hook.download_progress = p
|
||||||
log.info(f'[youtube-dl] downloading: {filename} - {percent_done} '
|
log.info(f'[youtube-dl] downloading: {filename} - {percent_done} '
|
||||||
f'of {total} at {speed}, {eta} remaining')
|
f'of {total} at {speed}, {eta} remaining')
|
||||||
else:
|
else:
|
||||||
# No progress to monitor, just spam every 10 download messages instead
|
# No progress to monitor, just spam every 10 download messages instead
|
||||||
hook.download_progress += 1
|
if 0 == hook.download_progress % 10:
|
||||||
if hook.download_progress % 10 == 0:
|
|
||||||
log.info(f'[youtube-dl] downloading: {filename} - {percent_done} '
|
log.info(f'[youtube-dl] downloading: {filename} - {percent_done} '
|
||||||
f'of {total} at {speed}, {eta} remaining')
|
f'of {total} at {speed}, {eta} remaining')
|
||||||
elif event['status'] == 'finished':
|
hook.download_progress += 1
|
||||||
|
elif 'finished' == event['status']:
|
||||||
total_size_str = event.get('_total_bytes_str', '?').strip()
|
total_size_str = event.get('_total_bytes_str', '?').strip()
|
||||||
elapsed_str = event.get('_elapsed_str', '?').strip()
|
elapsed_str = event.get('_elapsed_str', '?').strip()
|
||||||
log.info(f'[youtube-dl] finished downloading: {filename} - '
|
log.info(f'[youtube-dl] finished downloading: {filename} - '
|
||||||
|
|||||||
Reference in new issue
Block a user