5748d0e6ee
This is the last change of the `backend_refactor` branch. This makes `RareCore` the centerpiece of Rare by moving initialization before the UI is brought up. RareCore is now in control of creating and querying `RareGame` objects, re-introducing the ability (incomplete) to refresh the games library. As a result, ApiResults has been removed. Signed-off-by: loathingKernel <142770+loathingKernel@users.noreply.github.com>
105 lines
3.8 KiB
Python
105 lines
3.8 KiB
Python
import time
|
|
from argparse import Namespace
|
|
from enum import IntEnum
|
|
from logging import getLogger
|
|
|
|
from PyQt5.QtCore import QObject, pyqtSignal
|
|
from requests.exceptions import ConnectionError, HTTPError
|
|
|
|
from rare.lgndr.core import LegendaryCore
|
|
from .worker import Worker
|
|
|
|
logger = getLogger("FetchWorker")
|
|
|
|
|
|
class FetchWorker(Worker):
|
|
class Result(IntEnum):
|
|
GAMES = 1
|
|
NON_ASSET = 2
|
|
WIN32 = 3
|
|
MACOS = 4
|
|
SAVES = 5
|
|
ENTITLEMENTS = 6
|
|
|
|
class Signals(QObject):
|
|
result = pyqtSignal(object, int)
|
|
finished = pyqtSignal()
|
|
|
|
def __init__(self, core: LegendaryCore, args: Namespace):
|
|
super(Worker, self).__init__()
|
|
self.signals = FetchWorker.Signals()
|
|
self.core = core
|
|
self.args = args
|
|
|
|
|
|
class GamesWorker(FetchWorker):
|
|
def run_real(self):
|
|
start_time = time.time()
|
|
result = self.core.get_game_and_dlc_list(update_assets=not self.args.offline, platform="Windows", skip_ue=False)
|
|
self.signals.result.emit(result, FetchWorker.Result.GAMES)
|
|
logger.debug(f"Games: {len(result[0])}, DLCs {len(result[1])}")
|
|
logger.debug(f"Request Games: {time.time() - start_time} seconds")
|
|
self.signals.finished.emit()
|
|
|
|
|
|
class NonAssetWorker(FetchWorker):
|
|
def run_real(self):
|
|
start_time = time.time()
|
|
try:
|
|
result = self.core.get_non_asset_library_items(force_refresh=False, skip_ue=False)
|
|
except (HTTPError, ConnectionError) as e:
|
|
logger.warning(f"Exception while fetching non asset games from EGS: {e}")
|
|
result = ([], {})
|
|
self.signals.result.emit(result, FetchWorker.Result.NON_ASSET)
|
|
logger.debug(f"Non asset: {len(result[0])}, DLCs {len(result[1])}")
|
|
logger.debug(f"Request Non Asset: {time.time() - start_time} seconds")
|
|
self.signals.finished.emit()
|
|
|
|
|
|
class EntitlementsWorker(FetchWorker):
|
|
def run_real(self):
|
|
start_time = time.time()
|
|
try:
|
|
entitlements = self.core.egs.get_user_entitlements()
|
|
except (HTTPError, ConnectionError) as e:
|
|
logger.error(f"Failed to retrieve user entitlements from EGS: {e}")
|
|
entitlements = {}
|
|
self.signals.result.emit(entitlements, FetchWorker.Result.ENTITLEMENTS)
|
|
logger.debug(f"Entitlements: {len(list(entitlements))}")
|
|
logger.debug(f"Request Entitlements: {time.time() - start_time} seconds")
|
|
self.signals.finished.emit()
|
|
|
|
|
|
class Win32Worker(FetchWorker):
|
|
def run_real(self):
|
|
start_time = time.time()
|
|
result = self.core.get_game_and_dlc_list(update_assets=False, platform="Win32")
|
|
self.signals.result.emit(([], {}), FetchWorker.Result.WIN32)
|
|
logger.debug(f"Win32: {len(result[0])}, DLCs {len(result[1])}")
|
|
logger.debug(f"Request Win32: {time.time() - start_time} seconds")
|
|
self.signals.finished.emit()
|
|
|
|
|
|
class MacOSWorker(FetchWorker):
|
|
def run_real(self):
|
|
start_time = time.time()
|
|
result = self.core.get_game_and_dlc_list(update_assets=False, platform="Mac")
|
|
self.signals.result.emit(([], {}), FetchWorker.Result.MACOS)
|
|
logger.debug(f"MacOS: {len(result[0])}, DLCs {len(result[1])}")
|
|
logger.debug(f"Request MacOS: {time.time() - start_time} seconds")
|
|
self.signals.finished.emit()
|
|
|
|
|
|
class SavesWorker(FetchWorker):
|
|
def run_real(self):
|
|
start_time = time.time()
|
|
try:
|
|
result = self.core.get_save_games()
|
|
except (HTTPError, ConnectionError) as e:
|
|
logger.warning(f"Exception while fetching saves fromt EGS: {e}")
|
|
result = list()
|
|
self.signals.result.emit((result, {}), FetchWorker.Result.SAVES)
|
|
logger.debug(f"Saves: {len(result)}")
|
|
logger.debug(f"Request saves: {time.time() - start_time} seconds")
|
|
self.signals.finished.emit()
|