1
0
Fork 0
mirror of synced 2024-06-29 03:31:06 +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()] 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) 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()] na_dlc_list = [dlc[0] for dlc in na_dlcs.values()]
game_list = games + dlc_list + na_games + na_dlc_list game_list = games + dlc_list + na_games + na_dlc_list
@ -246,10 +246,9 @@ class LaunchDialog(QDialog):
else: else:
self.completed = 2 self.completed = 2
if self.core.lgd.assets: if self.core.lgd.assets:
( self.api_results.games, self.api_results.dlcs = self.core.get_game_and_dlc_list(
self.api_results.game_list, update_assets=False, skip_ue=False
self.api_results.dlcs, )
) = self.core.get_game_and_dlc_list(False)
self.api_results.bit32_games = list( self.api_results.bit32_games = list(
map(lambda i: i.app_name, self.core.get_game_list(False, "Win32")) map(lambda i: i.app_name, self.core.get_game_list(False, "Win32"))
) )
@ -258,28 +257,32 @@ class LaunchDialog(QDialog):
) )
else: else:
logger.warning("No assets found. Falling back to empty game lists") logger.warning("No assets found. Falling back to empty game lists")
self.api_results.game_list, self.api_results.dlcs = [], {} self.api_results.games, self.api_results.dlcs = [], {}
self.api_results.mac_games = self.api_results.bit32_games = [] 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() self.finish()
def handle_api_worker_result(self, result, text): def handle_api_worker_result(self, result, text):
logger.debug(f"Api Request got from {text}") logger.debug(f"Api Request got from {text}")
if text == "gamelist": if text == "gamelist":
if result: if result:
self.api_results.game_list, self.api_results.dlcs = result self.api_results.games, self.api_results.dlcs = result
else: else:
( self.api_results.games, self.api_results.dlcs = self.core.get_game_and_dlc_list(
self.api_results.game_list, update_assets=False, skip_ue=False
self.api_results.dlcs, )
) = self.core.get_game_and_dlc_list(False)
elif text == "no_assets": 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": elif text == "32bit":
self.api_results.bit32_games = [i.app_name for i in result[0]] if result else [] self.api_results.bit32_games = [i.app_name for i in result[0]] if result else []
elif text == "mac": elif text == "mac":
self.api_results.mac_games = [i.app_name for i in result[0]] if result else [] self.api_results.mac_games = [i.app_name for i in result[0]] if result else []
elif text == "saves": elif text == "saves":
self.api_results.saves = result self.api_results.saves = result

View file

@ -145,29 +145,28 @@ class GamesTab(QStackedWidget):
@pyqtSlot() @pyqtSlot()
def update_count_games_label(self): def update_count_games_label(self):
self.head_bar.set_games_count( 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 # FIXME: Remove this when RareCore is in place
def __create_game_with_dlcs(self, game: Game) -> RareGame: def __create_game_with_dlcs(self, game: Game) -> RareGame:
rgame = RareGame(self.core, self.image_manager, game) 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 = [save for save in self.api_results.saves if save.app_name == game.app_name]
rgame.saves = saves for dlc_dict in [self.api_results.dlcs, self.api_results.na_dlcs]:
if game_dlcs := self.api_results.dlcs[rgame.game.catalog_item_id]: if game_dlcs := dlc_dict.get(rgame.game.catalog_item_id, False):
for dlc in game_dlcs: for dlc in game_dlcs:
rdlc = RareGame(self.core, self.image_manager, dlc) rdlc = RareGame(self.core, self.image_manager, dlc)
self.rcore.add_game(rdlc) self.rcore.add_game(rdlc)
# lk: plug dlc progress signals to the game's # lk: plug dlc progress signals to the game's
rdlc.signals.progress.start.connect(rgame.signals.progress.start) rdlc.signals.progress.start.connect(rgame.signals.progress.start)
rdlc.signals.progress.update.connect(rgame.signals.progress.update) rdlc.signals.progress.update.connect(rgame.signals.progress.update)
rdlc.signals.progress.finish.connect(rgame.signals.progress.finish) rdlc.signals.progress.finish.connect(rgame.signals.progress.finish)
rdlc.set_pixmap() rdlc.set_pixmap()
rgame.owned_dlcs.append(rdlc) rgame.owned_dlcs.append(rdlc)
return rgame return rgame
def setup_game_list(self): def setup_game_list(self):
self.update_count_games_label() for game in self.api_results.games + self.api_results.na_games:
for game in self.api_results.game_list + self.api_results.no_asset_games:
rgame = self.__create_game_with_dlcs(game) rgame = self.__create_game_with_dlcs(game)
self.rcore.add_game(rgame) self.rcore.add_game(rgame)
icon_widget, list_widget = self.add_library_widget(rgame) icon_widget, list_widget = self.add_library_widget(rgame)
@ -178,6 +177,7 @@ class GamesTab(QStackedWidget):
self.list_view.layout().addWidget(list_widget) self.list_view.layout().addWidget(list_widget)
rgame.set_pixmap() rgame.set_pixmap()
self.filter_games(self.active_filter) self.filter_games(self.active_filter)
self.update_count_games_label()
def add_library_widget(self, rgame: RareGame): def add_library_widget(self, rgame: RareGame):
try: try:

View file

@ -115,7 +115,7 @@ class LibraryWidgetController(QObject):
list_widgets = self._list_container.findChildren(ListGameWidget) list_widgets = self._list_container.findChildren(ListGameWidget)
icon_app_names = set([iw.rgame.app_name for iw in icon_widgets]) 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]) 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]) game_app_names = set([g.app_name for g in games])
new_icon_app_names = game_app_names.difference(icon_app_names) new_icon_app_names = game_app_names.difference(icon_app_names)
new_list_app_names = game_app_names.difference(list_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.filter.addItem(self.tr("Mac games"))
self.available_filters.append("mac") 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.filter.addItem(self.tr("Exclude Origin"))
self.available_filters.append("installable") self.available_filters.append("installable")

View file

@ -165,13 +165,11 @@ class ImportGroup(QGroupBox):
self.api_results = RareCore.instance().api_results() self.api_results = RareCore.instance().api_results()
#self.app_name_list = [rgame.app_name for rgame in self.rcore.games] #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 = [rgame.folder_name for rgame in self.rcore.games if not rgame.is_dlc]
self.install_dir_list = [ self.install_dir_list = [
game.metadata.get("customAttributes", {}) game.metadata.get("customAttributes", {}).get("FolderName", {}).get("value", game.app_name)
.get("FolderName", {}) for game in self.api_results.games
.get("value", game.app_name)
for game in self.api_results.game_list
if not game.is_dlc 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"), placeholder=self.tr("Use in case the app name was not found automatically"),
completer=AppNameCompleter( completer=AppNameCompleter(
# app_names=[(rgame.app_name, rgame.app_title) for rgame in self.rcore.games] # 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, edit_func=self.app_name_edit_callback,
parent=self, parent=self,
) )

View file

@ -1,7 +1,7 @@
from PyQt5.QtWidgets import QStackedWidget, QTabWidget from PyQt5.QtWidgets import QStackedWidget, QTabWidget
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
from rare.shared import LegendaryCoreSingleton, ApiResultsSingleton
from rare.shared import ApiResultsSingleton
from rare.utils.paths import cache_dir from rare.utils.paths import cache_dir
from .game_info import ShopGameInfo from .game_info import ShopGameInfo
from .search_results import SearchResults from .search_results import SearchResults
@ -36,7 +36,7 @@ class Shop(QStackedWidget):
self.addWidget(self.search_results) self.addWidget(self.search_results)
self.search_results.show_info.connect(self.show_game_info) self.search_results.show_info.connect(self.show_game_info)
self.info = ShopGameInfo( 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.api_core,
) )
self.addWidget(self.info) self.addWidget(self.info)

View file

@ -6,19 +6,21 @@ from legendary.models.game import Game, SaveGameFile
@dataclass @dataclass
class ApiResults: class ApiResults:
game_list: Optional[List[Game]] = None games: Optional[List[Game]] = None
dlcs: Optional[Dict[str, List[Game]]] = None dlcs: Optional[Dict[str, List[Game]]] = None
bit32_games: Optional[List] = None bit32_games: Optional[List] = None
mac_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 saves: Optional[List[SaveGameFile]] = None
def __bool__(self): def __bool__(self):
return ( return (
self.game_list is not None self.games is not None
and self.dlcs is not None and self.dlcs is not None
and self.bit32_games is not None and self.bit32_games is not None
and self.mac_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 and self.saves is not None
) )