1
0
Fork 0
mirror of synced 2024-06-02 18:54:41 +12:00

update_list() in games/__init__.py takes now a list of app_names, to update multiple games at same time

- verification signal is now connected
- signals are more consistent. Taking app_names instead of Game Models
This commit is contained in:
Dummerle 2021-11-03 18:33:01 +01:00
parent fb74a83044
commit 8627484097
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
7 changed files with 77 additions and 80 deletions

View file

@ -118,7 +118,7 @@ class DownloadTab(QWidget):
self.analysis = queue_item.download.analysis
self.installing_game.setText(self.tr("Installing Game: ") + self.active_game.app_title)
self.signals.installation_started.emit(self.active_game)
self.signals.installation_started.emit(self.active_game.app_name)
def status(self, text):
if text == "finish":
@ -140,7 +140,7 @@ class DownloadTab(QWidget):
self.update_text.setVisible(True)
self.signals.send_notification.emit(game.app_title)
self.signals.update_gamelist.emit(game.app_name)
self.signals.update_gamelist.emit([game.app_name])
self.signals.update_download_tab_text.emit()
self.signals.installation_finished.emit(True, game.app_name)

View file

@ -6,21 +6,21 @@ from PyQt5.QtWidgets import QStackedWidget, QVBoxLayout, QWidget
import rare.shared as shared
from legendary.models.game import Game, InstalledGame
from rare.components.dialogs.uninstall_dialog import UninstallDialog
from rare.components.tabs.games.game_info import GameInfoTabs
from rare.components.tabs.games.game_info.uninstalled_info import UninstalledInfoTabs
from rare.components.tabs.games.game_widgets.base_installed_widget import BaseInstalledWidget
from rare.components.tabs.games.game_widgets.base_uninstalled_widget import BaseUninstalledWidget
from rare.components.tabs.games.game_widgets.installed_icon_widget import InstalledIconWidget
from rare.components.tabs.games.game_widgets.installed_list_widget import InstalledListWidget
from rare.components.tabs.games.game_widgets.installing_game_widget import InstallingGameWidget
from rare.components.tabs.games.game_widgets.uninstalled_icon_widget import IconWidgetUninstalled
from rare.components.tabs.games.game_widgets.uninstalled_list_widget import ListWidgetUninstalled
from rare.components.tabs.games.head_bar import GameListHeadBar
from rare.components.tabs.games.import_widget import ImportWidget
from rare.ui.components.tabs.games.games_tab import Ui_GamesTab
from rare.utils import legendary_utils
from rare.utils.extra_widgets import FlowLayout
from rare.utils.utils import get_pixmap, download_image, get_uninstalled_pixmap
from .game_info import GameInfoTabs
from .game_info.uninstalled_info import UninstalledInfoTabs
from .game_widgets.base_installed_widget import BaseInstalledWidget
from .game_widgets.base_uninstalled_widget import BaseUninstalledWidget
from .game_widgets.installed_icon_widget import InstalledIconWidget
from .game_widgets.installed_list_widget import InstalledListWidget
from .game_widgets.installing_game_widget import InstallingGameWidget
from .game_widgets.uninstalled_icon_widget import IconWidgetUninstalled
from .game_widgets.uninstalled_list_widget import ListWidgetUninstalled
from .head_bar import GameListHeadBar
from .import_widget import ImportWidget
logger = getLogger("GamesTab")
@ -51,6 +51,8 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
self.game_info_tabs.back_clicked.connect(lambda: self.setCurrentIndex(0))
self.addWidget(self.game_info_tabs)
self.game_info_tabs.info.verification_finished.connect(self.verification_finished)
self.import_widget = ImportWidget()
self.addWidget(self.import_widget)
@ -93,7 +95,8 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
self.signals.installation_finished.connect(lambda x: self.installing_widget.setVisible(False))
self.signals.uninstall_game.connect(self.uninstall_game)
def installation_started(self, game: Game):
def installation_started(self, app_name: str):
game = self.core.get_game(app_name, False)
if game.is_dlc:
return
self.installing_widget.set_game(game)
@ -112,7 +115,7 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
return
legendary_utils.uninstall(game.app_name, self.core, infos)
self.setCurrentIndex(0)
self.update_list(game.app_name)
self.update_list([game.app_name])
def show_game_info(self, game):
self.game_info_tabs.update_game(game, self.dlcs)
@ -184,11 +187,9 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
icon_widget.launch_signal.connect(self.launch)
icon_widget.finish_signal.connect(self.finished)
icon_widget.update_list.connect(self.update_list)
list_widget.launch_signal.connect(self.launch)
list_widget.finish_signal.connect(self.finished)
list_widget.update_list.connect(self.update_list)
if icon_widget.update_available:
self.updates.add(igame.app_name)
@ -273,43 +274,48 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
visible = False
w.setVisible(visible)
def update_list(self, app_name=None):
if app_name:
if widgets := self.widgets.get(app_name):
def update_list(self, app_names: list = None):
if app_names:
update_list = False
for app_name in app_names:
if widgets := self.widgets.get(app_name):
# from update
if self.core.is_installed(widgets[0].game.app_name) and isinstance(widgets[0], BaseInstalledWidget):
logger.debug("Update Gamelist: Updated: " + app_name)
igame = self.core.get_installed_game(app_name)
for w in widgets:
w.igame = igame
w.update_available = self.core.get_asset(w.game.app_name, True).build_version != igame.version
widgets[0].info_label.setText("")
widgets[0].info_text = ""
# new installed
elif self.core.is_installed(app_name) and isinstance(widgets[0], BaseUninstalledWidget):
logger.debug("Update Gamelist: New installed " + app_name)
self.widgets[app_name][0].deleteLater()
self.widgets[app_name][1].deleteLater()
self.widgets.pop(app_name)
# from update
if self.core.is_installed(widgets[0].game.app_name) and isinstance(widgets[0], BaseInstalledWidget):
logger.debug("Update Gamelist: Updated: " + app_name)
igame = self.core.get_installed_game(app_name)
for w in widgets:
w.igame = igame
w.update_available = self.core.get_asset(w.game.app_name,
True).build_version != igame.version
widgets[0].info_label.setText("")
widgets[0].info_text = ""
self.add_installed_widget(self.core.get_game(app_name))
# new installed
elif self.core.is_installed(app_name) and isinstance(widgets[0], BaseUninstalledWidget):
logger.debug("Update Gamelist: New installed " + app_name)
self.widgets[app_name][0].deleteLater()
self.widgets[app_name][1].deleteLater()
self.widgets.pop(app_name)
self._update_games()
self.add_installed_widget(self.core.get_game(app_name))
update_list = True
# uninstalled
elif not self.core.is_installed(widgets[0].game.app_name) and isinstance(widgets[0],
BaseInstalledWidget):
logger.debug("Update list: Uninstalled: " + app_name)
self.widgets[app_name][0].deleteLater()
self.widgets[app_name][1].deleteLater()
# uninstalled
elif not self.core.is_installed(widgets[0].game.app_name) and isinstance(widgets[0],
BaseInstalledWidget):
logger.debug("Update list: Uninstalled: " + app_name)
self.widgets[app_name][0].deleteLater()
self.widgets[app_name][1].deleteLater()
self.widgets.pop(app_name)
self.widgets.pop(app_name)
game = self.core.get_game(app_name, False)
self.add_uninstalled_widget(game)
self._update_games()
game = self.core.get_game(app_name, False)
self.add_uninstalled_widget(game)
update_list = True
# do not update, if only update finished
if update_list:
self._update_games()
else:
installed_names = [i.app_name for i in self.core.get_installed_list()]
@ -336,15 +342,15 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
self.add_installed_widget(self.core.get_game(igame.app_name))
for name in new_uninstalled_games:
self.icon_view.layout().removeWidget(self.widgets[app_name][0])
self.list_view.layout().removeWidget(self.widgets[app_name][1])
self.icon_view.layout().removeWidget(self.widgets[name][0])
self.list_view.layout().removeWidget(self.widgets[name][1])
self.widgets[name][0].deleteLater()
self.widgets[name][1].deleteLater()
self.widgets.pop(name)
game = self.core.get_game(name, True)
game = self.core.get_game(name, False)
self.add_uninstalled_widget(game)
for igame in sorted(self.core.get_installed_list(), key=lambda x: x.title):
@ -353,15 +359,18 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
self.icon_view.layout().addWidget(i_widget)
self.list_view.layout().addWidget(list_widget)
for game in self.no_assets:
i_widget, list_widget = self.widgets[game.app_name]
self.icon_view.layout().addWidget(i_widget)
self.list_view.layout().addWidget(list_widget)
# get Uninstalled games
games, self.dlcs = self.core.get_game_and_dlc_list()
for game in sorted(games, key=lambda x: x.app_title):
if game.app_name not in installed_names:
uninstalled_names.append(game)
for name in uninstalled_names:
i_widget, list_widget = self.widgets[name]
self.icon_view.layout().addWidget(i_widget)
self.list_view.layout().addWidget(list_widget)
if not self.core.is_installed(game.app_name) and game.app_name not in self.no_asset_names:
i_widget, list_widget = self.widgets[game.app_name]
self.icon_view.layout().addWidget(i_widget)
self.list_view.layout().addWidget(list_widget)
self.update_count_games_label()
def _update_games(self):

View file

@ -13,7 +13,6 @@ logger = getLogger("GameWidgetInstalled")
class InstalledIconWidget(BaseInstalledWidget):
update_list = pyqtSignal(str)
update_game = pyqtSignal()
def __init__(self, igame: InstalledGame, pixmap, is_origin: bool = False,

View file

@ -2,7 +2,6 @@ import json
import os
from logging import getLogger
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QPushButton, QVBoxLayout, QFileDialog, QLineEdit, \
QGroupBox
from qtawesome import icon
@ -15,7 +14,6 @@ logger = getLogger("Import")
class ImportWidget(QWidget):
update_list = pyqtSignal(str)
def __init__(self):
super(ImportWidget, self).__init__()
@ -121,7 +119,7 @@ class ImportWidget(QWidget):
self.core.get_installed_game(app_name).title))
self.app_name_input.setText("")
self.update_list.emit(app_name)
shared.signals.update_gamelist.emit([app_name])
else:
logger.warning("Failed to import" + app_name)
self.info_label.setText(self.tr("Failed to import {}").format(app_name))

View file

@ -106,15 +106,6 @@ class TabWidget(QTabWidget):
if not shared.args.offline and tab_num == 3:
self.store.load()
def game_imported(self, app_name: str):
igame = self.core.get_installed_game(app_name)
if self.core.get_asset(app_name, False).build_version != igame.version:
self.downloadTab.add_update(igame)
downloads = len(self.downloadTab.dl_queue) + len(self.downloadTab.update_widgets.keys())
self.setTabText(1, "Downloads" + ((" (" + str(downloads) + ")") if downloads != 0 else ""))
self.games_tab.update_list(app_name)
self.games_tab.setCurrentIndex(0)
def resizeEvent(self, event):
self.tabBar().setMinimumWidth(self.width())
super(TabWidget, self).resizeEvent(event)

View file

@ -167,7 +167,7 @@ class VerifyThread(QThread):
if not missing and not failed:
logger.info('Verification finished successfully.')
self.summary.emit((0, 0, self.app_name))
self.summary.emit(0, 0, self.app_name)
else:
logger.error(f'Verification finished, {len(failed)} file(s) corrupted, {len(missing)} file(s) are missing.')

View file

@ -1,7 +1,7 @@
import os
from typing import Union, List
from dataclasses import field, dataclass
from multiprocessing import Queue
from typing import Union, List
from PyQt5.QtCore import QObject, pyqtSignal
@ -111,20 +111,20 @@ class ApiResults:
class Signals(QObject):
exit_app = pyqtSignal(int)
send_notification = pyqtSignal(str)
exit_app = pyqtSignal(int) # exit code
send_notification = pyqtSignal(str) # app_title
set_main_tab_index = pyqtSignal(int)
set_main_tab_index = pyqtSignal(int) # tab index
update_download_tab_text = pyqtSignal()
dl_progress = pyqtSignal(int)
dl_progress = pyqtSignal(int) # 0-100
# set visibility of installing widget in games tab
installation_started = pyqtSignal(Game)
installation_started = pyqtSignal(str) # app_name
install_game = pyqtSignal(InstallOptionsModel)
installation_finished = pyqtSignal(bool, str)
update_gamelist = pyqtSignal(str)
uninstall_game = pyqtSignal(Game)
update_gamelist = pyqtSignal(list)
uninstall_game = pyqtSignal(Game) # deprecated
set_discord_rpc = pyqtSignal(str)
set_discord_rpc = pyqtSignal(str) # app_name of running game