148cf0ff8e
The addition of download_only option broke the download queue due to different positional arguments and tuple indices. Since using indices is awkward, models to represent the download and each item in the queue itself were added.
133 lines
4.7 KiB
Python
133 lines
4.7 KiB
Python
from logging import getLogger
|
|
|
|
from PyQt5.QtCore import pyqtSignal
|
|
from PyQt5.QtWidgets import QGroupBox, QVBoxLayout, QLabel, QHBoxLayout, QPushButton, QWidget
|
|
from qtawesome import icon
|
|
|
|
from rare.utils.models import InstallQueueItemModel
|
|
|
|
logger = getLogger("QueueWidget")
|
|
|
|
|
|
class DlWidget(QWidget):
|
|
move_up = pyqtSignal(str) # app_name
|
|
move_down = pyqtSignal(str) # app_name
|
|
remove = pyqtSignal(str) # app_name
|
|
|
|
def __init__(self, index, queue_item: InstallQueueItemModel):
|
|
super(DlWidget, self).__init__()
|
|
self.app_name = queue_item.download.game.app_name
|
|
self.layout = QHBoxLayout()
|
|
|
|
self.left_layout = QVBoxLayout()
|
|
self.move_up_button = QPushButton(icon("fa.arrow-up", color="white"), "")
|
|
if index == 0:
|
|
self.move_up_button.setDisabled(True)
|
|
self.move_up_button.clicked.connect(lambda: self.move_up.emit(self.app_name))
|
|
self.move_up_button.setFixedWidth(20)
|
|
self.left_layout.addWidget(self.move_up_button)
|
|
|
|
self.move_down_buttton = QPushButton(icon("fa.arrow-down", color="white"), "")
|
|
self.move_down_buttton.clicked.connect(lambda: self.move_down.emit(self.app_name))
|
|
self.left_layout.addWidget(self.move_down_buttton)
|
|
self.move_down_buttton.setFixedWidth(20)
|
|
|
|
self.layout.addLayout(self.left_layout)
|
|
|
|
self.right_layout = QVBoxLayout()
|
|
self.title = QLabel(queue_item.download.game.app_title)
|
|
self.right_layout.addWidget(self.title)
|
|
|
|
dl_size = queue_item.download.analysis.dl_size
|
|
install_size = queue_item.download.analysis.install_size
|
|
|
|
self.size = QHBoxLayout()
|
|
|
|
self.size.addWidget(QLabel(self.tr("Download size: {} GB").format(round(dl_size / 1024 ** 3, 2))))
|
|
self.size.addWidget(QLabel(self.tr("Install size: {} GB").format(round(install_size / 1024 ** 3, 2))))
|
|
self.right_layout.addLayout(self.size)
|
|
|
|
self.delete = QPushButton(self.tr("Remove Download"))
|
|
self.delete.clicked.connect(lambda: self.remove.emit(self.app_name))
|
|
self.right_layout.addWidget(self.delete)
|
|
|
|
self.layout.addLayout(self.right_layout)
|
|
self.setLayout(self.layout)
|
|
|
|
|
|
class DlQueueWidget(QGroupBox):
|
|
update_list = pyqtSignal(list)
|
|
dl_queue = []
|
|
|
|
def __init__(self):
|
|
|
|
super(DlQueueWidget, self).__init__()
|
|
self.setTitle(self.tr("Download Queue"))
|
|
self.layout = QVBoxLayout()
|
|
self.setObjectName("group")
|
|
self.text = QLabel(self.tr("No downloads in queue"))
|
|
self.layout.addWidget(self.text)
|
|
|
|
self.setLayout(self.layout)
|
|
|
|
def update_queue(self, dl_queue: list):
|
|
logger.info("Update Queue " + ", ".join(i.download.game.app_title for i in dl_queue))
|
|
self.dl_queue = dl_queue
|
|
self.setLayout(QVBoxLayout())
|
|
QWidget().setLayout(self.layout)
|
|
self.layout = QVBoxLayout()
|
|
|
|
if len(dl_queue) == 0:
|
|
self.layout.addWidget(QLabel(self.tr("No downloads in queue")))
|
|
self.setLayout(self.layout)
|
|
return
|
|
|
|
for index, item in enumerate(dl_queue):
|
|
widget = DlWidget(index, item)
|
|
widget.remove.connect(self.remove)
|
|
widget.move_up.connect(self.move_up)
|
|
widget.move_down.connect(self.move_down)
|
|
self.layout.addWidget(widget)
|
|
if index + 1 == len(dl_queue):
|
|
widget.move_down_buttton.setDisabled(True)
|
|
|
|
self.setLayout(self.layout)
|
|
|
|
def remove(self, app_name):
|
|
for index, i in enumerate(self.dl_queue):
|
|
if i.download.game.app_name == app_name:
|
|
self.dl_queue.pop(index)
|
|
break
|
|
else:
|
|
logger.warning("BUG! ", app_name)
|
|
return
|
|
self.update_list.emit(self.dl_queue)
|
|
self.update_queue(self.dl_queue)
|
|
|
|
def move_up(self, app_name):
|
|
index: int
|
|
|
|
for i, item in enumerate(self.dl_queue):
|
|
if item.download.game.app_name == app_name:
|
|
index = i
|
|
break
|
|
else:
|
|
logger.warning("Could not find appname" + app_name)
|
|
return
|
|
self.dl_queue.insert(index - 1, self.dl_queue.pop(index))
|
|
self.update_list.emit(self.dl_queue)
|
|
self.update_queue(self.dl_queue)
|
|
|
|
def move_down(self, app_name):
|
|
index: int
|
|
|
|
for i, item in enumerate(self.dl_queue):
|
|
if item.download.game.app_name == app_name:
|
|
index = i
|
|
break
|
|
else:
|
|
logger.warning("Could not find appname" + app_name)
|
|
return
|
|
self.dl_queue.insert(index + 1, self.dl_queue.pop(index))
|
|
self.update_list.emit(self.dl_queue)
|
|
self.update_queue(self.dl_queue)
|