import os import platform as pf from dataclasses import dataclass from typing import List, Optional, Callable, Dict from legendary.downloader.mp.manager import DLManager from legendary.models.downloading import AnalysisResult, ConditionCheckResult from legendary.models.game import Game, InstalledGame @dataclass class InstallOptionsModel: app_name: str base_path: str = "" shared_memory: int = 1024 max_workers: int = os.cpu_count() * 2 force: bool = False platform: str = "Windows" install_tag: Optional[List[str]] = None order_opt: bool = False repair_mode: bool = False repair_and_update: bool = False no_install: bool = False ignore_space: bool = False # Rare's internal arguments # FIXME: Do we really need all of these? create_shortcut: bool = True overlay: bool = False update: bool = False silent: bool = False install_preqs: bool = pf.system() == "Windows" def __post_init__(self): self.sdl_prompt: Callable[[str, str], list] = \ lambda app_name, title: self.install_tag if self.install_tag is not None else [""] def as_install_kwargs(self) -> Dict: return { k: getattr(self, k) for k in self.__dict__ if k not in ["update", "silent", "create_shortcut", "overlay", "install_preqs"] } @dataclass class InstallDownloadModel: dlmanager: DLManager analysis: AnalysisResult igame: InstalledGame game: Game repair: bool repair_file: str res: ConditionCheckResult @dataclass class InstallQueueItemModel: download: Optional[InstallDownloadModel] = None options: Optional[InstallOptionsModel] = None def __bool__(self): return (self.download is not None) and (self.options is not None)