Skip to content

Commit 10b9cce

Browse files
committed
Add CloseSignals and StopError Exception
1 parent 80e062b commit 10b9cce

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

Threads/Download.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import math
22
import os
3-
import sys
43

54
import youtube_dl
65
from PyQt5 import QtCore
76

87

8+
class StopError(Exception):
9+
pass
10+
11+
912
class DownloadSignals(QtCore.QObject):
1013
"Define the signals available from a running download thread"
1114

@@ -40,6 +43,9 @@ def __init__(self, opts):
4043
self.signals = DownloadSignals()
4144

4245
def hook(self, li):
46+
if self.done:
47+
raise StopError()
48+
4349
if li.get('downloaded_bytes') is not None:
4450
if li.get('speed') is not None:
4551
self.speed = self.format_speed(li.get('speed'))
@@ -117,6 +123,11 @@ def download(self):
117123
self.signals.remove_row_signal.emit()
118124
self.signals.remove_url_signal.emit(self.url)
119125
self.signals.status_bar_signal.emit(str(e))
126+
except StopError:
127+
# import threading
128+
# print("Exiting thread:", threading.currentThread().getName())
129+
self.done = True
130+
self.signals.finished.emit() # Done
120131

121132
@QtCore.pyqtSlot()
122133
def run(self):
@@ -144,6 +155,9 @@ def run(self):
144155
self.signals.remove_url_signal.emit(self.url)
145156
self.done = True
146157
self.signals.finished.emit() # Done
158+
159+
def stop(self):
160+
self.done = True
147161

148162
def format_seconds(self, seconds):
149163
(minutes, secs) = divmod(seconds, 60)

main.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525
desktop_path = os.path.join(os.path.expanduser('~'), "Desktop")
2626

2727

28+
class CloseSignals(QtCore.QObject):
29+
"Define the signals available for close"
30+
31+
closed = QtCore.pyqtSignal()
32+
33+
2834
class MainWindow(QtWidgets.QMainWindow):
2935
def __init__(self, parent=None, *args, **kwargs):
3036
super(MainWindow, self).__init__(parent, *args, **kwargs)
@@ -63,6 +69,7 @@ def __init__(self, parent=None, *args, **kwargs):
6369

6470
self.about = AboutDialog(self)
6571
self.license = LicenseDialogue(self)
72+
self.closing = CloseSignals()
6673
self.show()
6774

6875
def set_connections(self):
@@ -184,6 +191,7 @@ def download_url(self, url, row = None):
184191
downloadThread.signals.remove_url_signal.connect(self.remove_url)
185192
downloadThread.signals.add_update_list_signal.connect(self.add_to_table)
186193
downloadThread.signals.remove_row_signal.connect(self.decrease_rowcount)
194+
self.closing.closed.connect(downloadThread.stop)
187195
self.threadpool.start(downloadThread)
188196

189197
self.ui.tabWidget.setCurrentIndex(2)
@@ -275,6 +283,7 @@ def closeEvent(self, event):
275283
self.kill_all_threads()
276284

277285
def kill_all_threads(self):
286+
self.closing.closed.emit()
278287
self.threadpool.waitForDone()
279288
self.close()
280289

0 commit comments

Comments
 (0)