1
0
Fork 0
mirror of synced 2024-06-26 18:20:50 +12:00

RareCore: Sync back the results from OriginWineResolver into the main thread

This commit is contained in:
loathingKernel 2023-03-10 21:28:37 +02:00
parent f83342aa14
commit 8a1dd6c948
No known key found for this signature in database
GPG key ID: CE0C72D0B53821FD
4 changed files with 27 additions and 19 deletions

View file

@ -459,6 +459,7 @@ class RareGame(RareGameSlim):
self.signals.widget.update.emit()
def load_pixmap(self):
""" Do not call this function, call set_pixmap instead. This is only used for startup image loading """
if self.pixmap.isNull():
self.image_manager.download_image(self.game, self.set_pixmap, 0, False)
@ -480,8 +481,6 @@ class RareGame(RareGameSlim):
self.signals.game.installed.emit(self.app_name)
else:
self.signals.game.uninstalled.emit(self.app_name)
self.set_pixmap()
self.signals.widget.update.emit()
def repair(self, repair_and_update):
self.signals.game.install.emit(

View file

@ -8,9 +8,10 @@ from typing import Dict, Iterator, Callable, Tuple, Optional, List, Union
from PyQt5.QtCore import QObject, pyqtSignal, QSettings, pyqtSlot, QThreadPool, QRunnable
from legendary.lfs.eos import EOSOverlayApp
from legendary.models.game import Game, SaveGameFile
from legendary.models.game import Game
from rare.lgndr.core import LegendaryCore
from rare.models.base_game import RareSaveGame
from rare.models.game import RareGame, RareEosOverlay
from rare.models.signals import GlobalSignals
from .image_manager import ImageManager
@ -27,7 +28,6 @@ from .workers import (
)
from .workers.uninstall import uninstall_game
from .workers.worker import QueueWorkerInfo, QueueWorkerState
from rare.models.base_game import RareSaveGame
logger = getLogger("RareCore")
@ -267,7 +267,7 @@ class RareCore(QObject):
self.__add_game(rgame)
@pyqtSlot(object, int)
def handle_result(self, result: Tuple, res_type: int):
def handle_result(self, result: object, res_type: int):
status = ""
if res_type == FetchWorker.Result.GAMES:
games, dlc_dict = result
@ -283,6 +283,9 @@ class RareCore(QObject):
self.__non_asset_fetched = True
status = "Loaded games without assets"
if res_type == FetchWorker.Result.ORIGIN:
attrs, _ = result
for app_name, (install_dir, install_size) in attrs.items():
self.__games[app_name].set_origin_attributes(install_dir, install_size)
self.__origin_resolved = True
status = "Resolved Origin installation status"
if res_type == FetchWorker.Result.SAVES:
@ -295,7 +298,7 @@ class RareCore(QObject):
self.__core.lgd.entitlements = result
self.__entitlements_fetched = True
status = "Loaded game entitlements"
logger.debug(f"Got API results for {FetchWorker.Result(res_type).name}")
logger.info(f"Got API results for {FetchWorker.Result(res_type).name}")
fetched = [
self.__games_fetched,
@ -366,13 +369,16 @@ class RareCore(QObject):
@return: None
"""
QThreadPool.globalInstance().start(self.__load_pixmaps)
def __load_pixmaps() -> None:
# time.sleep(0.1)
for rgame in self.__games.values():
# self.__image_manager.download_image(rgame.game, rgame.set_pixmap, 0, False)
rgame.load_pixmap()
# lk: perception delay
time.sleep(0.001)
def __load_pixmaps(self) -> None:
# time.sleep(0.1)
for rgame in self.__games.values():
rgame.load_pixmap()
# time.sleep(0.0001)
worker = QRunnable.create(__load_pixmaps)
QThreadPool.globalInstance().start(worker)
@property
def games_and_dlcs(self) -> Iterator[RareGame]:

View file

@ -62,7 +62,7 @@ class EntitlementsWorker(FetchWorker):
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)
self.signals.result.emit((entitlements, None), FetchWorker.Result.ENTITLEMENTS)
logger.debug(f"Entitlements: {len(list(entitlements))}")
logger.debug(f"Request Entitlements: {time.time() - start_time} seconds")
@ -81,6 +81,6 @@ class SavesWorker(FetchWorker):
except (HTTPError, ConnectionError) as e:
logger.warning(f"Exception while fetching saves from EGS: {e}")
result = {}
self.signals.result.emit((result, {}), FetchWorker.Result.SAVES)
self.signals.result.emit((result, None), FetchWorker.Result.SAVES)
logger.debug(f"Saves: {len(result)}")
logger.debug(f"Request saves: {time.time() - start_time} seconds")

View file

@ -4,7 +4,7 @@ import time
from argparse import Namespace
from configparser import ConfigParser
from logging import getLogger
from typing import Union, Iterator
from typing import Union, Iterator, Dict, Tuple
from PyQt5.QtCore import pyqtSignal, QObject
@ -62,6 +62,8 @@ class OriginWineWorker(FetchWorker):
def run_real(self) -> None:
t = time.time()
result: Dict[str, Tuple[str, int]] = {}
for rgame in self.games:
if not rgame.is_origin:
continue
@ -101,10 +103,11 @@ class OriginWineWorker(FetchWorker):
if install_dir:
if os.path.isdir(install_dir):
size = path_size(install_dir)
rgame.set_origin_attributes(install_dir, size)
logger.debug(f"Found Origin game {rgame.title} ({install_dir}, {format_size(size)})")
install_size = path_size(install_dir)
result.update({rgame.app_name: (install_dir, install_size)})
logger.debug(f"Found Origin game {rgame.title} ({install_dir}, {format_size(install_size)})")
else:
logger.warning(f"Found Origin game {rgame.title} ({install_dir} does not exist)")
self.signals.result.emit((), FetchWorker.Result.ORIGIN)
self.signals.result.emit((result, None), FetchWorker.Result.ORIGIN)
logger.info(f"Origin registry worker finished in {time.time() - t}s")