1
0
Fork 0
mirror of synced 2024-07-03 05:31:23 +12:00
Rare/rare/components/tabs/settings/linux.py

67 lines
2.8 KiB
Python
Raw Normal View History

2021-11-04 10:18:03 +13:00
import os
2021-02-20 06:09:00 +13:00
from logging import getLogger
2021-11-04 10:18:03 +13:00
from PyQt5.QtWidgets import QFileDialog, QWidget, QMessageBox
2021-02-20 06:09:00 +13:00
2021-10-08 07:19:24 +13:00
from rare import shared
2021-10-24 12:47:49 +13:00
from rare.components.tabs.settings.dxvk import DxvkSettings
from rare.ui.components.tabs.settings.linux import Ui_LinuxSettings
2021-04-08 08:39:23 +12:00
from rare.utils.extra_widgets import PathEdit
2021-02-20 06:09:00 +13:00
logger = getLogger("LinuxSettings")
2021-02-20 00:57:55 +13:00
class LinuxSettings(QWidget, Ui_LinuxSettings):
2021-10-08 07:19:24 +13:00
def __init__(self, name=None):
2021-02-20 00:57:55 +13:00
super(LinuxSettings, self).__init__()
self.setupUi(self)
self.name = name if name is not None else "default"
2021-10-15 10:18:13 +13:00
self.core = shared.core
2021-05-02 08:15:42 +12:00
# Wine prefix
self.wine_prefix = PathEdit(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""),
2021-05-02 08:15:42 +12:00
file_type=QFileDialog.DirectoryOnly,
2021-10-11 21:41:01 +13:00
save_func=lambda text: self.save_setting(text, "wine_prefix"))
self.prefix_layout.addWidget(self.wine_prefix)
2021-02-20 06:09:00 +13:00
# Wine executable
self.wine_exec = PathEdit(self.core.lgd.config.get(self.name, "wine_executable", fallback=""),
file_type=QFileDialog.ExistingFile,
2021-05-02 08:15:42 +12:00
name_filter="Wine executable (wine wine64)",
2021-10-11 21:41:01 +13:00
save_func=lambda text: self.save_setting(text, "wine_executable"))
self.exec_layout.addWidget(self.wine_exec)
2021-02-20 06:09:00 +13:00
# dxvk
2021-10-24 12:47:49 +13:00
self.dxvk = DxvkSettings(self.name)
self.dxvk_layout.addWidget(self.dxvk)
2021-10-11 21:41:01 +13:00
def save_setting(self, text: str, setting_name: str):
if self.name not in self.core.lgd.config.sections():
2021-04-08 21:09:17 +12:00
self.core.lgd.config.add_section(self.name)
2021-02-20 06:09:00 +13:00
2021-10-11 21:41:01 +13:00
self.core.lgd.config.set(self.name, setting_name, text)
if not text:
2021-04-08 21:09:17 +12:00
self.core.lgd.config.remove_option(self.name, setting_name)
2021-02-20 06:09:00 +13:00
else:
2021-10-11 21:41:01 +13:00
logger.info("Set config of wine_prefix to " + text)
2021-03-10 09:57:54 +13:00
if self.core.lgd.config[self.name] == {}:
self.core.lgd.config.remove_section(self.name)
2021-02-20 06:09:00 +13:00
self.core.lgd.save_config()
2021-11-04 10:18:03 +13:00
if setting_name == "wine_prefix":
if not os.path.isdir(text) or not os.path.exists(os.path.join(text, "user.reg")):
return
if self.name != "default": # if game
game = self.core.get_game(self.name)
if self.core.is_installed(self.name) and game.supports_cloud_saves:
try:
new_path = self.core.get_save_path(self.name)
except Exception as e:
QMessageBox.warning(self, "Error", self.tr("Could not compute save path for {}").format(
game.app_title) + "\n" + str(e))
return
igame = self.core.get_installed_game(self.name)
igame.save_path = new_path
self.core.lgd.set_installed_game(self.name, igame)