✨ Background worker will handle download of queued items.

This commit is contained in:
Robert Honz
2024-04-01 13:09:42 +02:00
parent 4478b66c24
commit 0e91d7cea2
+36 -2
View File
@@ -1,5 +1,6 @@
import math import math
import sys import sys
import time
from collections.abc import Callable from collections.abc import Callable
from requests.exceptions import HTTPError from requests.exceptions import HTTPError
@@ -77,6 +78,9 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
s_pb_reload_status: QtCore.Signal = QtCore.Signal(bool) s_pb_reload_status: QtCore.Signal = QtCore.Signal(bool)
s_update_check: QtCore.Signal = QtCore.Signal() s_update_check: QtCore.Signal = QtCore.Signal()
s_update_show: QtCore.Signal = QtCore.Signal(bool, bool, object) s_update_show: QtCore.Signal = QtCore.Signal(bool, bool, object)
s_queue_download_item_downloading: QtCore.Signal = QtCore.Signal(object)
s_queue_download_item_finished: QtCore.Signal = QtCore.Signal(object)
s_queue_download_item_failed: QtCore.Signal = QtCore.Signal(object)
def __init__(self, tidal: Tidal | None = None): def __init__(self, tidal: Tidal | None = None):
super().__init__() super().__init__()
@@ -89,8 +93,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# XStream.stderr().messageWritten.connect(self._log_output) # XStream.stderr().messageWritten.connect(self._log_output)
self.settings = Settings() self.settings = Settings()
self.threadpool = QtCore.QThreadPool()
self._init_threads()
self._init_tree_results(self.tr_results) self._init_tree_results(self.tr_results)
self._init_tree_lists(self.tr_lists_user) self._init_tree_lists(self.tr_lists_user)
self._init_table_queue(self.tr_queue_download) self._init_table_queue(self.tr_queue_download)
@@ -142,6 +146,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self._init_dl() self._init_dl()
self.thread_it(self.tidal_user_lists) self.thread_it(self.tidal_user_lists)
def _init_threads(self):
self.threadpool = QtCore.QThreadPool()
self.thread_it(self.watcher_queue_download)
def _init_dl(self): def _init_dl(self):
# Init `Download` object. # Init `Download` object.
data_pb: ProgressBars = ProgressBars( data_pb: ProgressBars = ProgressBars(
@@ -547,6 +555,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# Download Queue # Download Queue
self.tr_queue_download.itemClicked.connect(self.on_queue_download_item_clicked) self.tr_queue_download.itemClicked.connect(self.on_queue_download_item_clicked)
self.s_queue_download_item_downloading.connect(self.on_queue_download_item_downloading)
def on_logout(self): def on_logout(self):
result: bool = self.tidal.logout() result: bool = self.tidal.logout()
@@ -693,7 +702,32 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
child.setText(4, "<quali>") child.setText(4, "<quali>")
self.tr_queue_download.addTopLevelItem(child) self.tr_queue_download.addTopLevelItem(child)
def on_download_results1(self): def watcher_queue_download(self) -> None:
while True:
items: [QtWidgets.QTreeWidgetItem | None] = self.tr_queue_download.findItems(
QueueDownloadStatus.Waiting.value, QtCore.Qt.MatchFlag.MatchExactly, column=0
)
for item in items:
self.s_queue_download_item_downloading.emit(item)
self.s_queue_download_item_finished.emit(item)
time.sleep(2)
def on_queue_download_item_downloading(self, item: QtWidgets.QTreeWidgetItem) -> None:
self.queue_download_item_status(item, QueueDownloadStatus.Downloading.value)
def on_queue_download_item_finished(self, item: QtWidgets.QTreeWidgetItem) -> None:
self.queue_download_item_status(item, QueueDownloadStatus.Finished.value)
def on_queue_download_item_failed(self, item: QtWidgets.QTreeWidgetItem) -> None:
self.queue_download_item_status(item, QueueDownloadStatus.Failed.value)
def queue_download_item_status(self, item: QtWidgets.QTreeWidgetItem, status: str) -> None:
item.setText(0, status)
def on_download_queue(self, media):
self.pb_download.setEnabled(False) self.pb_download.setEnabled(False)
self.pb_download.setText("Downloading...") self.pb_download.setText("Downloading...")