diff --git a/server/game_manager.py b/server/game_manager.py index 487b0cb..a48f6d2 100644 --- a/server/game_manager.py +++ b/server/game_manager.py @@ -68,11 +68,11 @@ class GamePluginManager: USER_DIR.mkdir(parents=True, exist_ok=True) self._plugins: dict[str, GamePlugin] = {} self._parser_cache: dict[str, Any] = {} + self._scanned = False self._discover() def _discover(self): self._plugins.clear() - for d in [BUILTIN_DIR, USER_DIR]: if not d.exists(): continue @@ -84,14 +84,18 @@ class GamePluginManager: gp = GamePlugin.from_manifest(manifest, is_builtin) if gp: self._plugins[gp.id] = gp - logger.debug("Discovered game plugin: %s", gp.id) + self._scanned = True + + def _ensure_scanned(self): + if not self._scanned: + self._discover() def list_all(self) -> list[dict[str, Any]]: - self._discover() + self._ensure_scanned() return [p.to_dict() for p in self._plugins.values()] def get(self, plugin_id: str) -> GamePlugin | None: - self._discover() + self._ensure_scanned() return self._plugins.get(plugin_id) def get_parser(self, plugin_id: str) -> Any | None: diff --git a/server/telemetry/listener.py b/server/telemetry/listener.py index 8cb3d13..d32f0f8 100644 --- a/server/telemetry/listener.py +++ b/server/telemetry/listener.py @@ -123,17 +123,20 @@ class TelemetryListener: @property def is_testing(self) -> bool: - from server.test_mode import _test_generator - return _test_generator.running + from server.test_mode import get_generator + gen = get_generator() + return gen is not None and gen.running def start_test_mode(self): - from server.test_mode import _test_generator - _test_generator.listener = self - _test_generator.start() + from server.test_mode import get_generator + gen = get_generator(self) + gen.start() def stop_test_mode(self): - from server.test_mode import _test_generator - _test_generator.stop() + from server.test_mode import get_generator + gen = get_generator() + if gen is not None and gen.running: + gen.stop() def _get_parser(self, key: str) -> BaseParser: if key not in self._parser_cache: