diff --git a/game/db.py b/game/db.py index 948a37ac..c19af009 100644 --- a/game/db.py +++ b/game/db.py @@ -911,7 +911,7 @@ CARRIER_TAKEOFF_BAN: List[Type[FlyingType]] = [ Units separated by country. country : DCS Country name """ -FACTIONS: Dict[str, Faction] = FactionLoader.load_factions() +FACTIONS = FactionLoader() CARRIER_TYPE_BY_PLANE = { FA_18C_hornet: CVN_74_John_C__Stennis, diff --git a/game/factions/faction_loader.py b/game/factions/faction_loader.py index f20f5a68..9ed83442 100644 --- a/game/factions/faction_loader.py +++ b/game/factions/faction_loader.py @@ -2,7 +2,7 @@ from __future__ import annotations import json import logging from pathlib import Path -from typing import Dict, Type +from typing import Dict, Iterator, Optional, Type from game.factions.faction import Faction @@ -10,6 +10,17 @@ FACTION_DIRECTORY = Path("./resources/factions/") class FactionLoader: + def __init__(self) -> None: + self._factions: Optional[Dict[str, Faction]] = None + + @property + def factions(self) -> Dict[str, Faction]: + self.initialize() + return self._factions + + def initialize(self) -> None: + if self._factions is None: + self._factions = self.load_factions() @classmethod def load_factions(cls: Type[FactionLoader]) -> Dict[str, Faction]: @@ -26,3 +37,9 @@ class FactionLoader: logging.exception(f"Unable to load faction : {f}") return factions + + def __getitem__(self, name: str) -> Faction: + return self.factions[name] + + def __iter__(self) -> Iterator[str]: + return iter(self.factions.keys()) diff --git a/qt_ui/main.py b/qt_ui/main.py index 9503fb58..c638e476 100644 --- a/qt_ui/main.py +++ b/qt_ui/main.py @@ -7,7 +7,7 @@ from PySide2 import QtWidgets from PySide2.QtGui import QPixmap from PySide2.QtWidgets import QApplication, QSplashScreen -from game import persistency +from game import db, persistency from qt_ui import ( liberation_install, liberation_theme, @@ -23,6 +23,8 @@ from qt_ui.windows.preferences.QLiberationFirstStartWindow import \ logging_config.init_logging(uiconstants.VERSION_STRING) if __name__ == "__main__": + # Load eagerly to catch errors early. + db.FACTIONS.initialize() os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1" # Potential fix for 4K screens app = QApplication(sys.argv)