From 19ca5670195d8da47c476fe32aa1d400241b0b0e Mon Sep 17 00:00:00 2001 From: rlaphoenix Date: Fri, 3 Mar 2023 07:54:31 +0000 Subject: [PATCH] Only use captured aria2c output if available --- devine/core/downloaders/aria2c.py | 69 ++++++++++++++++--------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/devine/core/downloaders/aria2c.py b/devine/core/downloaders/aria2c.py index 48254dc..a6523ba 100644 --- a/devine/core/downloaders/aria2c.py +++ b/devine/core/downloaders/aria2c.py @@ -96,41 +96,42 @@ def aria2c( ) p._stdin_write(uri) # noqa - is_dl_summary = False - aria_log_buffer = "" - for line in iter(p.stdout.readline, ""): - line = line.strip() - if line: - if line.startswith("Download Results"): - # we know it's 100% downloaded, but let's use the avg dl speed value - is_dl_summary = True - elif line.startswith("[") and line.endswith("]"): - if progress and "%" in line: - # id, dledMiB/totalMiB(x%), CN:xx, DL:xxMiB, ETA:Xs - # eta may not always be available - data_parts = line[1:-1].split() - perc_parts = data_parts[1].split("(") - if len(perc_parts) == 2: - # might otherwise be e.g., 0B/0B, with no % symbol provided - progress( - total=100, - completed=int(perc_parts[1][:-2]), - downloaded=f"{data_parts[3].split(':')[1]}/s" - ) - elif is_dl_summary and "OK" in line and "|" in line: - gid, status, avg_speed, path_or_uri = line.split("|") - progress(total=100, completed=100, downloaded=avg_speed.strip()) - elif not is_dl_summary: - aria_log_buffer += f"{line.strip()}\n" + if p.stdout: + is_dl_summary = False + aria_log_buffer = "" + for line in iter(p.stdout.readline, ""): + line = line.strip() + if line: + if line.startswith("Download Results"): + # we know it's 100% downloaded, but let's use the avg dl speed value + is_dl_summary = True + elif line.startswith("[") and line.endswith("]"): + if progress and "%" in line: + # id, dledMiB/totalMiB(x%), CN:xx, DL:xxMiB, ETA:Xs + # eta may not always be available + data_parts = line[1:-1].split() + perc_parts = data_parts[1].split("(") + if len(perc_parts) == 2: + # might otherwise be e.g., 0B/0B, with no % symbol provided + progress( + total=100, + completed=int(perc_parts[1][:-2]), + downloaded=f"{data_parts[3].split(':')[1]}/s" + ) + elif is_dl_summary and "OK" in line and "|" in line: + gid, status, avg_speed, path_or_uri = line.split("|") + progress(total=100, completed=100, downloaded=avg_speed.strip()) + elif not is_dl_summary: + aria_log_buffer += f"{line.strip()}\n" - if aria_log_buffer: - # wrap to console width - padding - '[Aria2c]: ' - aria_log_buffer = "\n ".join(textwrap.wrap( - aria_log_buffer.rstrip(), - width=console.width - 20, - initial_indent="" - )) - console.log(Text.from_ansi("\n[Aria2c]: " + aria_log_buffer)) + if aria_log_buffer: + # wrap to console width - padding - '[Aria2c]: ' + aria_log_buffer = "\n ".join(textwrap.wrap( + aria_log_buffer.rstrip(), + width=console.width - 20, + initial_indent="" + )) + console.log(Text.from_ansi("\n[Aria2c]: " + aria_log_buffer)) p.wait()