From 34a13ea3b29c07ea2bb548054d3ecca929d1bdbd Mon Sep 17 00:00:00 2001 From: loathingKernel <142770+loathingKernel@users.noreply.github.com> Date: Tue, 7 Feb 2023 13:04:33 +0200 Subject: [PATCH] ApiResults: Mirror the way `RareCore` from `refactor_backend` handles non asset items `LegendaryCore.get_non_asset_library_items()` returns the same tuple for `game_list, dlc_dict` as for regular games with assets, so keep the result for API completeness, since `RareGame` can handle those games properly. --- rare/components/dialogs/launch_dialog.py | 33 ++++++++++--------- rare/components/tabs/games/__init__.py | 30 ++++++++--------- .../tabs/games/game_widgets/__init__.py | 2 +- rare/components/tabs/games/head_bar.py | 2 +- .../tabs/games/integrations/import_group.py | 11 +++---- rare/components/tabs/shop/__init__.py | 6 ++-- rare/models/apiresults.py | 10 +++--- 7 files changed, 48 insertions(+), 46 deletions(-) diff --git a/rare/components/dialogs/launch_dialog.py b/rare/components/dialogs/launch_dialog.py index a67db907..a895b186 100644 --- a/rare/components/dialogs/launch_dialog.py +++ b/rare/components/dialogs/launch_dialog.py @@ -71,7 +71,7 @@ class ImageWorker(LaunchWorker): dlc_list = [dlc[0] for dlc in dlcs.values()] na_games, na_dlcs = self.core.get_non_asset_library_items(force_refresh=False, skip_ue=False) - self.signals.result.emit(na_games, "no_assets") + self.signals.result.emit((na_games, na_dlcs), "no_assets") na_dlc_list = [dlc[0] for dlc in na_dlcs.values()] game_list = games + dlc_list + na_games + na_dlc_list @@ -246,10 +246,9 @@ class LaunchDialog(QDialog): else: self.completed = 2 if self.core.lgd.assets: - ( - self.api_results.game_list, - self.api_results.dlcs, - ) = self.core.get_game_and_dlc_list(False) + self.api_results.games, self.api_results.dlcs = self.core.get_game_and_dlc_list( + update_assets=False, skip_ue=False + ) self.api_results.bit32_games = list( map(lambda i: i.app_name, self.core.get_game_list(False, "Win32")) ) @@ -258,28 +257,32 @@ class LaunchDialog(QDialog): ) else: logger.warning("No assets found. Falling back to empty game lists") - self.api_results.game_list, self.api_results.dlcs = [], {} - self.api_results.mac_games = self.api_results.bit32_games = [] + self.api_results.games, self.api_results.dlcs = [], {} + self.api_results.mac_games, self.api_results.bit32_games = [], [] + self.api_results.na_games, self.api_results.na_dlcs = [], {} + self.api_results.saves = [] self.finish() def handle_api_worker_result(self, result, text): logger.debug(f"Api Request got from {text}") if text == "gamelist": if result: - self.api_results.game_list, self.api_results.dlcs = result + self.api_results.games, self.api_results.dlcs = result else: - ( - self.api_results.game_list, - self.api_results.dlcs, - ) = self.core.get_game_and_dlc_list(False) + self.api_results.games, self.api_results.dlcs = self.core.get_game_and_dlc_list( + update_assets=False, skip_ue=False + ) elif text == "no_assets": - self.api_results.no_asset_games = result if result else [] - + if result: + self.api_results.na_games, self.api_results.na_dlcs = result + else: + self.api_results.na_games, self.api_results.na_dlcs = self.core.get_non_asset_library_items( + force_refresh=False, skip_ue=False + ) elif text == "32bit": self.api_results.bit32_games = [i.app_name for i in result[0]] if result else [] elif text == "mac": self.api_results.mac_games = [i.app_name for i in result[0]] if result else [] - elif text == "saves": self.api_results.saves = result diff --git a/rare/components/tabs/games/__init__.py b/rare/components/tabs/games/__init__.py index decc5585..25bd6813 100644 --- a/rare/components/tabs/games/__init__.py +++ b/rare/components/tabs/games/__init__.py @@ -145,29 +145,28 @@ class GamesTab(QStackedWidget): @pyqtSlot() def update_count_games_label(self): self.head_bar.set_games_count( - len(self.core.get_installed_list()), len(self.api_results.game_list + self.api_results.no_asset_games) + len(self.core.get_installed_list()), len(self.api_results.games + self.api_results.na_games) ) # FIXME: Remove this when RareCore is in place def __create_game_with_dlcs(self, game: Game) -> RareGame: rgame = RareGame(self.core, self.image_manager, game) - saves = [save for save in self.api_results.saves if save.app_name == game.app_name] - rgame.saves = saves - if game_dlcs := self.api_results.dlcs[rgame.game.catalog_item_id]: - for dlc in game_dlcs: - rdlc = RareGame(self.core, self.image_manager, dlc) - self.rcore.add_game(rdlc) - # lk: plug dlc progress signals to the game's - rdlc.signals.progress.start.connect(rgame.signals.progress.start) - rdlc.signals.progress.update.connect(rgame.signals.progress.update) - rdlc.signals.progress.finish.connect(rgame.signals.progress.finish) - rdlc.set_pixmap() - rgame.owned_dlcs.append(rdlc) + rgame.saves = [save for save in self.api_results.saves if save.app_name == game.app_name] + for dlc_dict in [self.api_results.dlcs, self.api_results.na_dlcs]: + if game_dlcs := dlc_dict.get(rgame.game.catalog_item_id, False): + for dlc in game_dlcs: + rdlc = RareGame(self.core, self.image_manager, dlc) + self.rcore.add_game(rdlc) + # lk: plug dlc progress signals to the game's + rdlc.signals.progress.start.connect(rgame.signals.progress.start) + rdlc.signals.progress.update.connect(rgame.signals.progress.update) + rdlc.signals.progress.finish.connect(rgame.signals.progress.finish) + rdlc.set_pixmap() + rgame.owned_dlcs.append(rdlc) return rgame def setup_game_list(self): - self.update_count_games_label() - for game in self.api_results.game_list + self.api_results.no_asset_games: + for game in self.api_results.games + self.api_results.na_games: rgame = self.__create_game_with_dlcs(game) self.rcore.add_game(rgame) icon_widget, list_widget = self.add_library_widget(rgame) @@ -178,6 +177,7 @@ class GamesTab(QStackedWidget): self.list_view.layout().addWidget(list_widget) rgame.set_pixmap() self.filter_games(self.active_filter) + self.update_count_games_label() def add_library_widget(self, rgame: RareGame): try: diff --git a/rare/components/tabs/games/game_widgets/__init__.py b/rare/components/tabs/games/game_widgets/__init__.py index 63ca03af..cf471717 100644 --- a/rare/components/tabs/games/game_widgets/__init__.py +++ b/rare/components/tabs/games/game_widgets/__init__.py @@ -115,7 +115,7 @@ class LibraryWidgetController(QObject): list_widgets = self._list_container.findChildren(ListGameWidget) icon_app_names = set([iw.rgame.app_name for iw in icon_widgets]) list_app_names = set([lw.rgame.app_name for lw in list_widgets]) - games = self.api_results.game_list + self.api_results.no_asset_games + games = self.api_results.games + self.api_results.na_games game_app_names = set([g.app_name for g in games]) new_icon_app_names = game_app_names.difference(icon_app_names) new_list_app_names = game_app_names.difference(list_app_names) diff --git a/rare/components/tabs/games/head_bar.py b/rare/components/tabs/games/head_bar.py index c2b5c4bf..410329e4 100644 --- a/rare/components/tabs/games/head_bar.py +++ b/rare/components/tabs/games/head_bar.py @@ -46,7 +46,7 @@ class GameListHeadBar(QWidget): self.filter.addItem(self.tr("Mac games")) self.available_filters.append("mac") - if self.api_results.no_asset_games: + if self.api_results.na_games: self.filter.addItem(self.tr("Exclude Origin")) self.available_filters.append("installable") diff --git a/rare/components/tabs/games/integrations/import_group.py b/rare/components/tabs/games/integrations/import_group.py index 5906d291..bc644d95 100644 --- a/rare/components/tabs/games/integrations/import_group.py +++ b/rare/components/tabs/games/integrations/import_group.py @@ -165,13 +165,11 @@ class ImportGroup(QGroupBox): self.api_results = RareCore.instance().api_results() #self.app_name_list = [rgame.app_name for rgame in self.rcore.games] - self.app_name_list = [game.app_name for game in self.api_results.game_list] + self.app_name_list = [game.app_name for game in self.api_results.games] #self.install_dir_list = [rgame.folder_name for rgame in self.rcore.games if not rgame.is_dlc] self.install_dir_list = [ - game.metadata.get("customAttributes", {}) - .get("FolderName", {}) - .get("value", game.app_name) - for game in self.api_results.game_list + game.metadata.get("customAttributes", {}).get("FolderName", {}).get("value", game.app_name) + for game in self.api_results.games if not game.is_dlc ] @@ -188,8 +186,7 @@ class ImportGroup(QGroupBox): placeholder=self.tr("Use in case the app name was not found automatically"), completer=AppNameCompleter( # app_names=[(rgame.app_name, rgame.app_title) for rgame in self.rcore.games] - app_names=[(i.app_name, i.app_title) for i in self.api_results.game_list] - ), + app_names = [(i.app_name, i.app_title) for i in self.api_results.games]), edit_func=self.app_name_edit_callback, parent=self, ) diff --git a/rare/components/tabs/shop/__init__.py b/rare/components/tabs/shop/__init__.py index 543c754b..a03a70e1 100644 --- a/rare/components/tabs/shop/__init__.py +++ b/rare/components/tabs/shop/__init__.py @@ -1,7 +1,7 @@ from PyQt5.QtWidgets import QStackedWidget, QTabWidget - from legendary.core import LegendaryCore -from rare.shared import LegendaryCoreSingleton, ApiResultsSingleton + +from rare.shared import ApiResultsSingleton from rare.utils.paths import cache_dir from .game_info import ShopGameInfo from .search_results import SearchResults @@ -36,7 +36,7 @@ class Shop(QStackedWidget): self.addWidget(self.search_results) self.search_results.show_info.connect(self.show_game_info) self.info = ShopGameInfo( - [i.asset_infos["Windows"].namespace for i in self.api_results.game_list], + [i.asset_infos["Windows"].namespace for i in self.api_results.games], self.api_core, ) self.addWidget(self.info) diff --git a/rare/models/apiresults.py b/rare/models/apiresults.py index ade819bd..5b77cc28 100644 --- a/rare/models/apiresults.py +++ b/rare/models/apiresults.py @@ -6,19 +6,21 @@ from legendary.models.game import Game, SaveGameFile @dataclass class ApiResults: - game_list: Optional[List[Game]] = None + games: Optional[List[Game]] = None dlcs: Optional[Dict[str, List[Game]]] = None bit32_games: Optional[List] = None mac_games: Optional[List] = None - no_asset_games: Optional[List[Game]] = None + na_games: Optional[List[Game]] = None + na_dlcs: Optional[Dict[str, List[Game]]] = None saves: Optional[List[SaveGameFile]] = None def __bool__(self): return ( - self.game_list is not None + self.games is not None and self.dlcs is not None and self.bit32_games is not None and self.mac_games is not None - and self.no_asset_games is not None + and self.na_games is not None + and self.na_dlcs is not None and self.saves is not None )