mirror of
https://github.com/lutris/lutris
synced 2024-09-29 20:43:37 +00:00
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:
parent
dde4d71f9c
commit
fe0d6b2da6
|
@ -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."""
|
||||
|
|
Loading…
Reference in a new issue