PortProton_2.0/modules/init_wine.py
2025-03-09 21:08:14 +06:00

87 lines
3.8 KiB
Python

import os
import shutil
import subprocess
from .log import *
from .env_var import *
from .files_worker import *
from .config_parser import *
def init_wine(dist_path):
used_wine_upper = var("used_wine").upper()
# TODO: будем переименовывать все каталоги wine в верхний регистр?
if used_wine_upper != "SYSTEM":
if used_wine_upper == "WINE_LG":
used_wine = var("default_wine")
elif used_wine_upper == "PROTON_LG":
used_wine = var("default_proton")
wine_path = dist_path + "/" + used_wine
if not os.path.exists(wine_path + "/bin/wine"):
# TODO: если нет wine то качаем и распаковываем
log.warning(f"{used_wine} not found. Try download...")
if not os.path.exists(wine_path + "/bin/wine"):
log.critical(f"{used_wine} not found. Interrupt!")
env_var("PATH", wine_path + "/bin")
env_var("LD_LIBRARY_PATH", wine_path + "/lib")
set_env_var_force("WINEDLLPATH", wine_path + "/lib/wine")
if os.path.exists(wine_path + "/lib64/"):
env_var("LD_LIBRARY_PATH", wine_path + "/lib64")
env_var("WINEDLLPATH", wine_path + "/lib64/wine")
wine_share = wine_path + "/share"
if os.path.exists(wine_share + "/espeak-ng-data/"):
set_env_var_force("ESPEAK_DATA_PATH", wine_share)
if os.path.exists(wine_share + "/media/"):
set_env_var_force("MEDIACONV_BLANK_VIDEO_FILE", wine_share + "/media/blank.mkv")
set_env_var_force("MEDIACONV_BLANK_AUDIO_FILE", wine_share + "/media/blank.ptna")
# TODO: mono, gecko
else:
def check_system_wine():
# Способ 2: Проверка через переменные окружения в нестандартных путях
wine_env_vars = ["WINEPREFIX", "WINEARCH"]
found_env_vars = {var: os.getenv(var) for var in wine_env_vars if os.getenv(var)}
if found_env_vars:
print("Найдены переменные окружения Wine:")
for var, value in found_env_vars.items():
print(f"{var}={value}")
else:
print("Переменные окружения Wine не найдены.")
# Способ 2: Проверка через which в стандартных путях
wine_path_system= shutil.which("wine")
if wine_path_system:
print(f"Wine найден в PATH: {wine_path_system}")
else:
print("Wine не найден в PATH.")
# Способ 3: Проверка через запуск wine --version
try:
result = subprocess.run(['wine', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,
text=True)
if result.returncode == 0:
print(f"Установленная версия: {result.stdout.strip()}")
else:
print("Wine не установлен или произошла ошибка.")
except FileNotFoundError:
print("Команда wine не найдена.")
wine_path = "/usr"
# общие переменные окружения для любой версии wine
set_env_var_force("WINE", wine_path + "/bin/wine")
set_env_var_force("WINELOADER", wine_path + "/bin/wine")
set_env_var_force("WINESERVER", wine_path + "/bin/wineserver")
log.info(f"wine in used: {used_wine}")
print_env_var("WINELOADER", "WINESERVER", "WINEDLLPATH")
print_env_var("PATH", "LD_LIBRARY_PATH")
# print_env_var("ESPEAK_DATA_PATH", "MEDIACONV_BLANK_VIDEO_FILE", "MEDIACONV_BLANK_AUDIO_FILE")