1
0
Fork 0
mirror of synced 2024-05-19 12:02:54 +12:00
Rare/rare/shared/workers/install_info.py
loathingKernel 582b83c12b WIP
2024-02-12 21:52:08 +02:00

68 lines
2.4 KiB
Python

import os
from logging import getLogger
from PyQt5.QtCore import QObject, pyqtSignal
from legendary.lfs.eos import EOSOverlayApp
from legendary.models.downloading import ConditionCheckResult
from rare.lgndr.cli import LegendaryCLI
from rare.lgndr.core import LegendaryCore
from rare.lgndr.glue.arguments import LgndrInstallGameArgs
from rare.lgndr.glue.exception import LgndrException
from rare.lgndr.glue.monkeys import LgndrIndirectStatus
from rare.models.install import InstallDownloadModel, InstallOptionsModel
from .worker import Worker
logger = getLogger("InstallInfoWorker")
class InstallInfoWorker(Worker):
class Signals(QObject):
result = pyqtSignal(InstallDownloadModel)
failed = pyqtSignal(str)
finished = pyqtSignal()
def __init__(self, core: LegendaryCore, options: InstallOptionsModel):
super(InstallInfoWorker, self).__init__()
self.signals = InstallInfoWorker.Signals()
self.core = core
self.options = options
def run_real(self):
try:
if not self.options.overlay:
cli = LegendaryCLI(self.core)
status = LgndrIndirectStatus()
result = cli.install_game(
LgndrInstallGameArgs(**self.options.as_install_kwargs(), indirect_status=status)
)
if result:
download = InstallDownloadModel(*result)
else:
raise LgndrException(status.message)
else:
dlm, analysis, igame = self.core.prepare_overlay_install(
path=self.options.base_path
)
download = InstallDownloadModel(
dlm=dlm,
analysis=analysis,
igame=igame,
game=EOSOverlayApp,
repair=False,
repair_file="",
res=ConditionCheckResult(), # empty
)
if not download.res or not download.res.failures:
self.signals.result.emit(download)
else:
# self.signals.failed.emit("\n".join(str(i) for i in download.res.failures))
self.signals.failed.emit("\n".join(map(str, download.res.failures)))
except LgndrException as ret:
self.signals.failed.emit(ret.message)
except Exception as e:
self.signals.failed.emit(str(e))
self.signals.finished.emit()