1
0
Fork 0
mirror of synced 2024-06-22 04:20:25 +12:00

DowloadsTab: Emit a signal from each group on widget deletion to avoid counting to-be-deleted widgets

This commit is contained in:
loathingKernel 2023-01-26 17:38:50 +02:00
parent c219f347d1
commit a96a51f110
3 changed files with 20 additions and 13 deletions

View file

@ -34,8 +34,8 @@ class TabWidget(QTabWidget):
self.downloads_tab = DownloadsTab(self)
# update dl tab text
self.addTab(self.downloads_tab, "")
self.__on_downloads_update_title(self.downloads_tab.queues_count())
self.downloads_tab.update_title.connect(self.__on_downloads_update_title)
self.downloads_tab.update_queues_count()
self.store = Shop(self.core)
self.addTab(self.store, self.tr("Store (Beta)"))

View file

@ -48,12 +48,13 @@ class DownloadsTab(QWidget):
self.ui.kill_button.clicked.connect(self.stop_download)
self.queue_group = QueueGroup(self)
# lk: todo recreate update widget
self.queue_group.update_count.connect(self.update_queues_count)
self.queue_group.removed.connect(self.__on_queue_removed)
self.queue_group.force.connect(self.__on_queue_force)
self.ui.queue_scroll_contents_layout.addWidget(self.queue_group)
self.updates_group = UpdateGroup(self)
self.updates_group.update_count.connect(self.update_queues_count)
self.updates_group.enqueue.connect(self.__get_install_options)
self.ui.queue_scroll_contents_layout.addWidget(self.updates_group)
@ -73,6 +74,12 @@ class DownloadsTab(QWidget):
for rgame in self.rcore.updates:
self.__add_update(rgame)
@pyqtSlot()
@pyqtSlot(int)
def update_queues_count(self):
count = self.updates_group.count() + self.queue_group.count()
self.update_title.emit(count)
@pyqtSlot(str)
@pyqtSlot(RareGame)
def __add_update(self, update: Union[str,RareGame]):
@ -84,7 +91,7 @@ class DownloadsTab(QWidget):
)
else:
self.updates_group.append(update.game, update.igame)
self.update_title.emit(self.queues_count())
self.update_queues_count()
@pyqtSlot(str)
def __remove_update(self, app_name):
@ -94,7 +101,6 @@ class DownloadsTab(QWidget):
self.queue_group.remove(app_name)
if self.updates_group.contains(app_name):
self.updates_group.remove(app_name)
self.update_title.emit(self.queues_count())
@pyqtSlot(str)
def __on_queue_removed(self, app_name: str):
@ -148,9 +154,6 @@ class DownloadsTab(QWidget):
self.ui.kill_button.setDisabled(False)
self.ui.dl_name.setText(item.download.game.app_title)
def queues_count(self) -> int:
return self.updates_group.count() + self.queue_group.count()
@property
def is_download_active(self):
return self.thread is not None
@ -217,8 +220,6 @@ class DownloadsTab(QWidget):
else:
return
self.update_title.emit(self.queues_count())
# lk: if we finished a repair, and we have a disabled update, re-enable it
if self.updates_group.contains(result.item.options.app_name):
self.updates_group.set_widget_enabled(result.item.options.app_name, True)

View file

@ -21,6 +21,7 @@ logger = getLogger("QueueGroup")
class UpdateGroup(QGroupBox):
update_count = pyqtSignal(int)
enqueue = pyqtSignal(InstallOptionsModel)
def __init__(self, parent=None):
@ -49,8 +50,10 @@ class UpdateGroup(QGroupBox):
return self.__find_widget(app_name) is not None
def __update_group(self):
self.__text.setVisible(not bool(self.count()))
self.__container.setVisible(bool(self.count()))
count = self.count()
self.__text.setVisible(not count)
self.__container.setVisible(bool(count))
self.update_count.emit(count)
def append(self, game: Game, igame: InstalledGame):
self.__text.setVisible(False)
@ -79,6 +82,7 @@ class UpdateGroup(QGroupBox):
class QueueGroup(QGroupBox):
update_count = pyqtSignal(int)
removed = pyqtSignal(str)
force = pyqtSignal(InstallQueueItemModel)
@ -114,8 +118,10 @@ class QueueGroup(QGroupBox):
return False
def __update_group(self):
self.__text.setVisible(not bool(self.count()))
self.__container.setVisible(bool(self.count()))
count = self.count()
self.__text.setVisible(not count)
self.__container.setVisible(bool(count))
self.update_count.emit(count)
def __create_widget(self, item: InstallQueueItemModel, old_igame: InstalledGame) -> QueueWidget:
widget: QueueWidget = QueueWidget(item, old_igame, parent=self.__container)