2023-09-09 01:47:35 +12:00
|
|
|
import os
|
2023-09-14 05:55:18 +12:00
|
|
|
from typing import Callable, Optional, Set, Any
|
2022-02-06 02:48:50 +13:00
|
|
|
|
|
|
|
from legendary.core import LegendaryCore
|
2022-10-27 08:57:04 +13:00
|
|
|
from legendary.models.config import LGDConf
|
2022-02-06 02:48:50 +13:00
|
|
|
|
2022-09-03 02:53:56 +12:00
|
|
|
_config: Optional[LGDConf] = None
|
|
|
|
_save_config: Optional[Callable[[], None]] = None
|
2022-02-06 02:48:50 +13:00
|
|
|
|
|
|
|
|
|
|
|
def init_config_handler(core: LegendaryCore):
|
2022-09-03 02:53:56 +12:00
|
|
|
global _config, _save_config
|
|
|
|
_config = core.lgd.config
|
|
|
|
_save_config = core.lgd.save_config
|
2022-02-06 02:48:50 +13:00
|
|
|
|
|
|
|
|
2022-09-05 08:49:43 +12:00
|
|
|
def save_config():
|
|
|
|
if _save_config is None:
|
|
|
|
raise RuntimeError("Uninitialized use of config_helper")
|
|
|
|
_save_config()
|
|
|
|
|
|
|
|
|
2022-03-06 11:23:02 +13:00
|
|
|
def add_option(app_name: str, option: str, value: str):
|
|
|
|
value = value.replace("%%", "%").replace("%", "%%")
|
2022-09-03 02:53:56 +12:00
|
|
|
if not _config.has_section(app_name):
|
|
|
|
_config[app_name] = {}
|
2022-02-06 02:48:50 +13:00
|
|
|
|
2022-09-03 02:53:56 +12:00
|
|
|
_config.set(app_name, option, value)
|
2022-09-05 08:49:43 +12:00
|
|
|
save_config()
|
2022-02-06 02:48:50 +13:00
|
|
|
|
|
|
|
|
|
|
|
def remove_option(app_name, option):
|
2022-09-03 02:53:56 +12:00
|
|
|
if _config.has_option(app_name, option):
|
|
|
|
_config.remove_option(app_name, option)
|
2022-02-06 02:48:50 +13:00
|
|
|
|
2023-03-30 00:04:45 +13:00
|
|
|
# if _config.has_section(app_name) and not _config[app_name]:
|
|
|
|
# _config.remove_section(app_name)
|
2022-02-06 02:48:50 +13:00
|
|
|
|
2022-09-05 08:49:43 +12:00
|
|
|
save_config()
|
2022-02-06 02:48:50 +13:00
|
|
|
|
|
|
|
|
|
|
|
def remove_section(app_name):
|
2023-03-30 00:04:45 +13:00
|
|
|
return
|
2023-09-09 01:47:35 +12:00
|
|
|
# Disabled due to env variables implementation
|
2022-09-03 02:53:56 +12:00
|
|
|
if _config.has_section(app_name):
|
|
|
|
_config.remove_section(app_name)
|
2022-09-05 08:49:43 +12:00
|
|
|
save_config()
|
2023-09-09 01:47:35 +12:00
|
|
|
|
|
|
|
|
2023-09-14 05:55:18 +12:00
|
|
|
def get_game_option(option: str, app_name: Optional[str] = None, fallback: Any = None) -> str:
|
|
|
|
_option = _config.get("default", option, fallback=fallback)
|
|
|
|
if app_name is not None:
|
|
|
|
_option = _config.get(app_name, option, fallback=_option)
|
|
|
|
return _option
|
|
|
|
|
|
|
|
|
|
|
|
def get_game_envvar(option: str, app_name: Optional[str] = None, fallback: Any = None) -> str:
|
|
|
|
_option = _config.get("default.env", option, fallback=fallback)
|
|
|
|
if app_name is not None:
|
|
|
|
_option = _config.get(f'{app_name}.env', option, fallback=_option)
|
|
|
|
return _option
|
|
|
|
|
|
|
|
|
|
|
|
def get_wine_prefix(app_name: Optional[str] = None, fallback: Any = None) -> str:
|
|
|
|
_prefix = os.path.join(
|
|
|
|
_config.get("default.env", "STEAM_COMPAT_DATA_PATH", fallback=fallback), "pfx")
|
|
|
|
_prefix = _config.get("default.env", "WINEPREFIX", fallback=_prefix)
|
|
|
|
_prefix = _config.get("default", "wine_prefix", fallback=_prefix)
|
|
|
|
if app_name is not None:
|
|
|
|
_prefix = os.path.join(
|
|
|
|
_config.get(f'{app_name}.env', "STEAM_COMPAT_DATA_PATH", fallback=fallback), "pfx")
|
|
|
|
_prefix = _config.get(f'{app_name}.env', 'WINEPREFIX', fallback=_prefix)
|
|
|
|
_prefix = _config.get(app_name, 'wine_prefix', fallback=_prefix)
|
|
|
|
return _prefix
|
2023-09-09 01:47:35 +12:00
|
|
|
|
2023-09-14 05:55:18 +12:00
|
|
|
|
|
|
|
def get_wine_prefixes() -> Set[str]:
|
|
|
|
_prefixes = []
|
2023-09-09 01:47:35 +12:00
|
|
|
for name, section in _config.items():
|
|
|
|
pfx = section.get("WINEPREFIX") or section.get("wine_prefix")
|
2023-09-14 05:55:18 +12:00
|
|
|
if not pfx:
|
|
|
|
pfx = os.path.join(compatdata, "pfx") if (compatdata := section.get("STEAM_COMPAT_DATA_PATH")) else ""
|
2023-09-09 01:47:35 +12:00
|
|
|
if pfx:
|
2023-09-14 05:55:18 +12:00
|
|
|
_prefixes.append(pfx)
|
|
|
|
_prefixes = [os.path.expanduser(prefix) for prefix in _prefixes]
|
|
|
|
return {p for p in _prefixes if os.path.isdir(p)}
|
2023-09-09 01:47:35 +12:00
|
|
|
|