1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

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:
loathingKernel 2023-02-07 13:04:33 +02:00
parent c83ee69914
commit 34a13ea3b2
7 changed files with 48 additions and 46 deletions

View file

@ -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

View file

@ -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:

View file

@ -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)

View file

@ -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")

View file

@ -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,
)

View file

@ -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)

View file

@ -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
)