Add protection from division by zero

We don't even use the plain speed, and the average speed can just leave out samples where the elapsed time is zero.

Resolves #5493
This commit is contained in:
Daniel Johnson 2024-05-30 04:58:05 -04:00
parent dde4d71f9c
commit fe0d6b2da6

View file

@ -41,7 +41,6 @@ class Downloader:
self.full_size: int = 0 # Bytes
self.progress_fraction: float = 0
self.progress_percentage: float = 0
self.speed = 0
self.average_speed = 0
self.time_left: str = "00:00:00" # Based on average speed
self.last_size: int = 0
@ -74,7 +73,6 @@ class Downloader:
self.full_size = 0 # Bytes
self.progress_fraction = 0
self.progress_percentage = 0
self.speed = 0
self.average_speed = 0
self.time_left = "00:00:00" # Based on average speed
self.last_size = 0
@ -176,7 +174,7 @@ class Downloader:
def get_stats(self):
"""Calculate and store download stats."""
self.speed, self.average_speed = self.get_speed()
self.average_speed = self.get_speed()
self.time_left = self.get_average_time_left()
self.last_check_time = get_time()
self.last_size = self.downloaded_size
@ -186,15 +184,16 @@ class Downloader:
self.progress_percentage = self.progress_fraction * 100
def get_speed(self):
"""Return (speed, average speed) tuple."""
"""Return the average speed of the download so far."""
elapsed_time = get_time() - self.last_check_time
chunk_size = self.downloaded_size - self.last_size
speed = chunk_size / elapsed_time or 1
self.last_speeds.append(speed)
if elapsed_time > 0:
chunk_size = self.downloaded_size - self.last_size
speed = chunk_size / elapsed_time or 1
self.last_speeds.append(speed)
# Average speed
if get_time() - self.speed_check_time < 1: # Minimum delay
return self.speed, self.average_speed
return self.average_speed
while len(self.last_speeds) > 20:
self.last_speeds.pop(0)
@ -208,7 +207,7 @@ class Downloader:
average_speed = sum(samples) / len(samples)
self.speed_check_time = get_time()
return speed, average_speed
return average_speed
def get_average_time_left(self) -> str:
"""Return average download time left as string."""