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:
parent
fb74a83044
commit
8627484097
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.')
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue