2022-01-20 08:10:10 +13:00
|
|
|
import os
|
2022-03-22 08:56:03 +13:00
|
|
|
import shutil
|
2021-02-20 06:09:00 +13:00
|
|
|
from logging import getLogger
|
|
|
|
|
2023-04-01 00:03:32 +13:00
|
|
|
from PyQt5.QtCore import pyqtSignal
|
2021-11-11 07:00:15 +13:00
|
|
|
from PyQt5.QtWidgets import QFileDialog, QWidget
|
2021-02-20 06:09:00 +13:00
|
|
|
|
2022-03-06 10:48:32 +13:00
|
|
|
from rare.components.tabs.settings.widgets.dxvk import DxvkSettings
|
|
|
|
from rare.components.tabs.settings.widgets.mangohud import MangoHudSettings
|
2022-02-26 06:43:27 +13:00
|
|
|
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton
|
2021-04-30 20:05:35 +12:00
|
|
|
from rare.ui.components.tabs.settings.linux import Ui_LinuxSettings
|
2023-02-19 04:29:41 +13:00
|
|
|
from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon
|
2023-04-01 00:03:32 +13:00
|
|
|
from rare.utils import config_helper
|
2021-02-20 06:09:00 +13:00
|
|
|
|
|
|
|
logger = getLogger("LinuxSettings")
|
2021-02-20 00:57:55 +13:00
|
|
|
|
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
class LinuxSettings(QWidget):
|
2023-04-01 00:03:32 +13:00
|
|
|
# str: option key
|
|
|
|
environ_changed = pyqtSignal(str)
|
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
def __init__(self, name=None, parent=None):
|
|
|
|
super(LinuxSettings, self).__init__(parent=parent)
|
|
|
|
self.ui = Ui_LinuxSettings()
|
|
|
|
self.ui.setupUi(self)
|
2021-04-28 03:40:10 +12:00
|
|
|
|
2022-02-26 06:43:27 +13:00
|
|
|
self.core = LegendaryCoreSingleton()
|
|
|
|
self.signals = GlobalSignalsSingleton()
|
|
|
|
|
2021-04-29 09:36:59 +12:00
|
|
|
self.name = name if name is not None else "default"
|
2021-04-28 03:40:10 +12:00
|
|
|
|
2021-05-02 08:15:42 +12:00
|
|
|
# Wine prefix
|
2021-11-23 03:56:44 +13:00
|
|
|
self.wine_prefix = PathEdit(
|
|
|
|
self.load_prefix(),
|
2023-03-16 09:49:18 +13:00
|
|
|
file_mode=QFileDialog.DirectoryOnly,
|
2023-02-19 01:33:42 +13:00
|
|
|
edit_func=lambda path: (os.path.isdir(path) or not path, path, IndicatorReasonsCommon.DIR_NOT_EXISTS),
|
2021-12-24 22:09:50 +13:00
|
|
|
save_func=self.save_prefix,
|
|
|
|
)
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.prefix_layout.addWidget(self.wine_prefix)
|
2021-02-20 06:09:00 +13:00
|
|
|
|
|
|
|
# Wine executable
|
2021-11-23 03:56:44 +13:00
|
|
|
self.wine_exec = PathEdit(
|
|
|
|
self.load_setting(self.name, "wine_executable"),
|
2023-03-16 09:49:18 +13:00
|
|
|
file_mode=QFileDialog.ExistingFile,
|
|
|
|
name_filters=["wine", "wine64"],
|
2023-02-19 01:33:42 +13:00
|
|
|
edit_func=lambda text: (os.path.exists(text) or not text, text, IndicatorReasonsCommon.DIR_NOT_EXISTS),
|
2021-12-24 22:09:50 +13:00
|
|
|
save_func=lambda text: self.save_setting(
|
|
|
|
text, section=self.name, setting="wine_executable"
|
|
|
|
),
|
|
|
|
)
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.exec_layout.addWidget(self.wine_exec)
|
2021-02-20 06:09:00 +13:00
|
|
|
|
|
|
|
# dxvk
|
2022-02-28 11:03:16 +13:00
|
|
|
self.dxvk = DxvkSettings()
|
2023-04-01 00:03:32 +13:00
|
|
|
self.dxvk.environ_changed.connect(self.environ_changed)
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.linux_layout.addWidget(self.dxvk)
|
2022-03-21 10:18:36 +13:00
|
|
|
self.dxvk.load_settings(self.name)
|
2021-04-28 03:40:10 +12:00
|
|
|
|
2022-03-02 09:16:45 +13:00
|
|
|
self.mangohud = MangoHudSettings()
|
2023-04-01 00:03:32 +13:00
|
|
|
self.mangohud.environ_changed.connect(self.environ_changed)
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.linux_layout.addWidget(self.mangohud)
|
2022-03-21 10:18:36 +13:00
|
|
|
self.mangohud.load_settings(self.name)
|
2022-03-02 09:16:45 +13:00
|
|
|
|
2022-03-22 08:56:03 +13:00
|
|
|
|
2021-11-23 03:56:44 +13:00
|
|
|
def load_prefix(self) -> str:
|
2021-12-24 22:09:50 +13:00
|
|
|
return self.load_setting(
|
|
|
|
f"{self.name}.env",
|
|
|
|
"WINEPREFIX",
|
|
|
|
fallback=self.load_setting(self.name, "wine_prefix"),
|
|
|
|
)
|
2021-11-23 03:56:44 +13:00
|
|
|
|
|
|
|
def save_prefix(self, text: str):
|
2021-12-24 22:09:50 +13:00
|
|
|
self.save_setting(text, f"{self.name}.env", "WINEPREFIX")
|
2023-04-01 00:03:32 +13:00
|
|
|
self.environ_changed.emit("WINEPREFIX")
|
2021-12-24 22:09:50 +13:00
|
|
|
self.save_setting(text, self.name, "wine_prefix")
|
2022-12-29 06:55:15 +13:00
|
|
|
self.signals.application.prefix_updated.emit()
|
2021-11-23 03:56:44 +13:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
def load_setting(self, section: str, setting: str, fallback: str = ""):
|
2022-02-26 06:43:27 +13:00
|
|
|
return self.core.lgd.config.get(section, setting, fallback=fallback)
|
2021-11-23 03:56:44 +13:00
|
|
|
|
2022-02-26 06:43:27 +13:00
|
|
|
def save_setting(self, text: str, section: str, setting: str):
|
2021-11-23 03:56:44 +13:00
|
|
|
if text:
|
2023-04-01 00:03:32 +13:00
|
|
|
config_helper.add_option(section, setting, text)
|
2021-11-23 03:56:44 +13:00
|
|
|
logger.debug(f"Set {setting} in {f'[{section}]'} to {text}")
|
2021-02-20 06:09:00 +13:00
|
|
|
else:
|
2023-04-01 00:03:32 +13:00
|
|
|
config_helper.remove_option(section, setting)
|
|
|
|
logger.debug(f"Unset {setting} from {f'[{section}]'}")
|
|
|
|
config_helper.save_config()
|