From ba93c78b99c046bacaf03c8007bac2d44afc136c Mon Sep 17 00:00:00 2001
From: rlaphoenix <rlaphoenix@pm.me>
Date: Tue, 23 Jan 2024 09:45:31 +0000
Subject: [PATCH] Add missing while loop to Curl-Impersonate downloader

---
 devine/core/downloaders/curl_impersonate.py | 54 +++++++++++----------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/devine/core/downloaders/curl_impersonate.py b/devine/core/downloaders/curl_impersonate.py
index ba32e85..174f09b 100644
--- a/devine/core/downloaders/curl_impersonate.py
+++ b/devine/core/downloaders/curl_impersonate.py
@@ -70,34 +70,36 @@ def curl_impersonate(
     for url, out_path in uri:
         out_path.parent.mkdir(parents=True, exist_ok=True)
         attempts = 1
-        try:
-            stream = session.get(url, stream=True)
-            stream.raise_for_status()
-            with open(out_path, "wb") as f:
-                written = 0
-                for chunk in stream.iter_content(chunk_size=1024):
-                    download_size = len(chunk)
-                    f.write(chunk)
-                    written += download_size
-                    if progress:
-                        progress(advance=1)
 
-                        now = time.time()
-                        time_since = now - last_speed_refresh
+        while True:
+            try:
+                stream = session.get(url, stream=True)
+                stream.raise_for_status()
+                with open(out_path, "wb") as f:
+                    written = 0
+                    for chunk in stream.iter_content(chunk_size=1024):
+                        download_size = len(chunk)
+                        f.write(chunk)
+                        written += download_size
+                        if progress:
+                            progress(advance=1)
 
-                        download_sizes.append(download_size)
-                        if time_since > 5 or download_size < 1024:
-                            data_size = sum(download_sizes)
-                            download_speed = data_size / (time_since or 1)
-                            progress(downloaded=f"{filesize.decimal(download_speed)}/s")
-                            last_speed_refresh = now
-                            download_sizes.clear()
-            break
-        except Exception as e:
-            if DOWNLOAD_CANCELLED.is_set() or attempts == MAX_ATTEMPTS:
-                raise e
-            time.sleep(RETRY_WAIT)
-            attempts += 1
+                            now = time.time()
+                            time_since = now - last_speed_refresh
+
+                            download_sizes.append(download_size)
+                            if time_since > 5 or download_size < 1024:
+                                data_size = sum(download_sizes)
+                                download_speed = data_size / (time_since or 1)
+                                progress(downloaded=f"{filesize.decimal(download_speed)}/s")
+                                last_speed_refresh = now
+                                download_sizes.clear()
+                break
+            except Exception as e:
+                if DOWNLOAD_CANCELLED.is_set() or attempts == MAX_ATTEMPTS:
+                    raise e
+                time.sleep(RETRY_WAIT)
+                attempts += 1
 
     return 0