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.
This commit is contained in:
parent
c83ee69914
commit
34a13ea3b2
|
@ -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
|
||||
|
||||
|
|
|
@ -145,15 +145,15 @@ 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]:
|
||||
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)
|
||||
|
@ -166,8 +166,7 @@ class GamesTab(QStackedWidget):
|
|||
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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue