1
0
Fork 0
mirror of synced 2024-06-02 10:44:40 +12:00
Rare/rare/shared/workers/fetch.py
loathingKernel 5748d0e6ee
RareCore: Manage initialization in RareCore instead of LaunchDialog
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>
2023-03-07 17:11:21 +02:00

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