Skip to content

Commit 68dc42a

Browse files
committed
feat(gui): add a button to pause the download in progress
1 parent abf5ff5 commit 68dc42a

5 files changed

Lines changed: 41 additions & 0 deletions

File tree

spankbang_dl/gui/commands.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ def download_video_and_display_progress(
209209
gui.progress_bar["value"] = 0
210210
gui.progress_percent.set("0%")
211211
# Reset flags
212+
gui.pause_download = False
212213
gui.cancel_download = False
213214
gui.downloading = True
214215
# Ensure initial draw
@@ -228,10 +229,16 @@ def update_progress() -> None:
228229
# Reset progress bar, label and flags
229230
gui.progress_bar["value"] = 0
230231
gui.progress_percent.set("0%")
232+
gui.pause_download = False # reset pause flag
231233
gui.cancel_download = False # reset cancel flag
232234
gui.downloading = False
233235
logger.info("Download cancelled by user.")
234236
return
237+
elif gui.pause_download:
238+
logger.info("Download paused by user.")
239+
while gui.pause_download:
240+
time.sleep(0.1) # Wait until unpaused
241+
logger.info("Download resumed by user.")
235242

236243
if not chunk:
237244
continue
@@ -310,6 +317,24 @@ def cancel_download(gui: VideoDownloaderUI) -> None:
310317
gui.log_message(gui.translations["cancelled_message"])
311318

312319

320+
def pause_resume_download(gui: VideoDownloaderUI) -> None:
321+
"""Sets the pause flag to True."""
322+
logger.debug("Pause download button clicked")
323+
if not gui.downloading:
324+
gui.log_message(gui.translations["no_download_message"])
325+
logger.warning("No download in progress to pause/resume.")
326+
return
327+
328+
if gui.pause_download:
329+
gui.pause_download = False
330+
gui.log_message(gui.translations["resumed_message"])
331+
logger.info("Download resumed by user.")
332+
else:
333+
gui.pause_download = True
334+
gui.log_message(gui.translations["paused_message"])
335+
logger.info("Download paused by user.")
336+
337+
313338
def change_language(gui: VideoDownloaderUI, lang_code: str) -> None:
314339
if gui.current_language == lang_code:
315340
logger.debug("Language change requested but already set to %s", lang_code)

spankbang_dl/gui/main.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class VideoDownloaderUI:
2828
window_width: int = 1200
2929

3030
cancel_download = False
31+
pause_download = False
3132
downloading = False
3233

3334
def __init__(self, selected_language: str = "en") -> None:
@@ -134,6 +135,15 @@ def __init__(self, selected_language: str = "en") -> None:
134135
self.start_btn.grid(row=0, column=2, padx=2)
135136
logger.debug("Download button created")
136137

138+
self.pause_btn = ttk.Button(
139+
self.progress_frame,
140+
text="⏸",
141+
width=3,
142+
command=lambda: commands.pause_resume_download(self),
143+
)
144+
self.pause_btn.grid(row=0, column=3, padx=2)
145+
logger.debug("Pause button created")
146+
137147
self.stop_btn = ttk.Button(
138148
self.progress_frame,
139149
text="⏹",

spankbang_dl/strings/strings_en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"already_downloading_message": "A download is already in progress. Please wait for it to finish or cancel it before starting a new one",
2828
"no_download_message": "There is no download in progress",
2929
"cancelled_message": "Download cancelled by user",
30+
"paused_message": "Download paused by user",
31+
"resumed_message": "Download resumed by user",
3032
"about_message": "Author: {}\nVersion: {}\nUpdated: {}",
3133
"help_message": "1. Enter Spankbang video URL\n2. Click Download\n3. Wait for the download to complete",
3234
"download_video_message": "Downloading video: {}",

spankbang_dl/strings/strings_es.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"already_downloading_message": "Ya hay una descarga en progreso. Por favor, espera a que termine o cancélala antes de iniciar una nueva",
2828
"no_download_message": "No hay ninguna descarga en progreso",
2929
"cancelled_message": "Descarga cancelada por el usuario",
30+
"paused_message": "Descarga pausada por el usuario",
31+
"resumed_message": "Descarga reanudada por el usuario",
3032
"about_message": "Autor: {}\nVersión: {}\nActualizado: {}",
3133
"help_message": "1. Introduce la URL del video de Spankbang\n2. Haz clic en Descargar\n3. Espera a que se complete la descarga",
3234
"download_video_message": "Descargando video: {}",

spankbang_dl/strings/strings_zh.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"already_downloading_message": "已有下载正在进行中,请等待其完成或取消后再开始新的下载",
2828
"no_download_message": "没有正在进行的下载",
2929
"cancelled_message": "用户取消了下载",
30+
"paused_message": "下载已暂停",
31+
"resumed_message": "下载已恢复",
3032
"about_message": "作者:{}\n版本: {}\n更新时间: {}",
3133
"help_message": "1. 输入Spankbang视频地址\n2. 点击下载\n3. 等待下载完成",
3234
"download_video_message": "正在下载视频:{}",

0 commit comments

Comments
 (0)