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
7 changed files with 48 additions and 46 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue