2023-03-16 23:41:50 +13:00
|
|
|
import os.path
|
2021-06-21 07:55:31 +12:00
|
|
|
import platform
|
2021-11-11 07:00:15 +13:00
|
|
|
from logging import getLogger
|
2023-03-16 23:41:50 +13:00
|
|
|
from typing import Tuple
|
2021-03-10 09:57:54 +13:00
|
|
|
|
2023-02-05 04:43:52 +13:00
|
|
|
from PyQt5.QtCore import Qt
|
2023-03-16 23:41:50 +13:00
|
|
|
from PyQt5.QtWidgets import QLabel, QFileDialog
|
2022-03-21 10:18:36 +13:00
|
|
|
from legendary.models.game import Game, InstalledGame
|
2022-03-13 11:04:52 +13:00
|
|
|
|
2022-03-21 10:18:36 +13:00
|
|
|
from rare.components.tabs.settings import DefaultGameSettings
|
|
|
|
from rare.components.tabs.settings.widgets.pre_launch import PreLaunchSettings
|
2022-12-25 15:21:23 +13:00
|
|
|
from rare.models.game import RareGame
|
2022-02-06 02:48:50 +13:00
|
|
|
from rare.utils import config_helper
|
2023-02-22 02:26:19 +13:00
|
|
|
from rare.widgets.side_tab import SideTabContents
|
2023-03-16 23:41:50 +13:00
|
|
|
from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon
|
2021-03-10 09:57:54 +13:00
|
|
|
|
2021-12-20 11:43:43 +13:00
|
|
|
logger = getLogger("GameSettings")
|
|
|
|
|
2021-03-10 09:57:54 +13:00
|
|
|
|
2023-02-22 02:26:19 +13:00
|
|
|
class GameSettings(DefaultGameSettings, SideTabContents):
|
2022-03-21 10:18:36 +13:00
|
|
|
def __init__(self, parent=None):
|
2022-12-27 02:18:48 +13:00
|
|
|
super(GameSettings, self).__init__(False, parent=parent)
|
2022-03-15 11:29:54 +13:00
|
|
|
self.pre_launch_settings = PreLaunchSettings()
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.launch_settings_group.layout().addRow(
|
2022-12-25 01:46:58 +13:00
|
|
|
QLabel(self.tr("Pre-launch command")), self.pre_launch_settings
|
2022-03-15 11:29:54 +13:00
|
|
|
)
|
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.skip_update.currentIndexChanged.connect(
|
|
|
|
lambda x: self.update_combobox("skip_update_check", x)
|
|
|
|
)
|
|
|
|
self.ui.offline.currentIndexChanged.connect(
|
|
|
|
lambda x: self.update_combobox("offline", x)
|
|
|
|
)
|
|
|
|
self.ui.launch_params.textChanged.connect(
|
|
|
|
lambda x: self.line_edit_save_callback("start_params", x)
|
|
|
|
)
|
|
|
|
|
|
|
|
self.override_exe_edit = PathEdit(
|
|
|
|
file_mode=QFileDialog.ExistingFile,
|
|
|
|
name_filters=["*.exe", "*.app"],
|
|
|
|
placeholder=self.tr("Relative path to launch executable"),
|
|
|
|
edit_func=self.override_exe_edit_callback,
|
|
|
|
save_func=self.override_exe_save_callback,
|
|
|
|
parent=self
|
|
|
|
)
|
|
|
|
self.ui.launch_settings_layout.insertRow(
|
2023-12-12 12:05:58 +13:00
|
|
|
self.ui.launch_settings_layout.getWidgetPosition(self.ui.launch_params)[0] + 1,
|
|
|
|
QLabel(self.tr("Override executable"), self), self.override_exe_edit
|
2023-03-16 23:41:50 +13:00
|
|
|
)
|
|
|
|
|
|
|
|
self.ui.game_settings_layout.setAlignment(Qt.AlignTop)
|
2023-02-05 04:43:52 +13:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
self.game: Game = None
|
|
|
|
self.igame: InstalledGame = None
|
2021-03-27 06:04:29 +13:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
def override_exe_edit_callback(self, path: str) -> Tuple[bool, str, int]:
|
2023-03-30 00:01:57 +13:00
|
|
|
if not path or self.igame is None:
|
2023-03-16 23:41:50 +13:00
|
|
|
return True, path, IndicatorReasonsCommon.VALID
|
|
|
|
if not os.path.isabs(path):
|
|
|
|
path = os.path.join(self.igame.install_path, path)
|
|
|
|
if self.igame.install_path not in path:
|
|
|
|
return False, self.igame.install_path, IndicatorReasonsCommon.WRONG_PATH
|
|
|
|
if not os.path.exists(path):
|
|
|
|
return False, path, IndicatorReasonsCommon.WRONG_PATH
|
2021-10-24 12:47:49 +13:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
if not path.endswith(".exe") and not path.endswith(".app"):
|
|
|
|
return False, path, IndicatorReasonsCommon.WRONG_PATH
|
|
|
|
path = os.path.relpath(path, self.igame.install_path)
|
|
|
|
return True, path, IndicatorReasonsCommon.VALID
|
2022-02-06 02:48:50 +13:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
def override_exe_save_callback(self, path: str):
|
|
|
|
self.line_edit_save_callback("override_exe", path)
|
|
|
|
|
|
|
|
def line_edit_save_callback(self, option, value) -> None:
|
|
|
|
if value:
|
2022-02-06 02:48:50 +13:00
|
|
|
config_helper.add_option(self.game.app_name, option, value)
|
2021-03-27 06:04:29 +13:00
|
|
|
else:
|
2022-02-06 02:48:50 +13:00
|
|
|
config_helper.remove_option(self.game.app_name, option)
|
|
|
|
config_helper.save_config()
|
2021-03-27 06:04:29 +13:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
def update_combobox(self, option, index):
|
2021-03-14 23:00:06 +13:00
|
|
|
if self.change:
|
|
|
|
# remove section
|
2023-03-16 23:41:50 +13:00
|
|
|
if index:
|
|
|
|
if index == 1:
|
2022-02-06 02:48:50 +13:00
|
|
|
config_helper.add_option(self.game.app_name, option, "true")
|
2023-03-16 23:41:50 +13:00
|
|
|
if index == 2:
|
2022-02-06 02:48:50 +13:00
|
|
|
config_helper.add_option(self.game.app_name, option, "false")
|
2021-04-30 09:30:42 +12:00
|
|
|
else:
|
2022-02-06 02:48:50 +13:00
|
|
|
config_helper.remove_option(self.game.app_name, option)
|
|
|
|
config_helper.save_config()
|
2021-03-14 23:00:06 +13:00
|
|
|
|
2022-12-25 15:21:23 +13:00
|
|
|
def load_settings(self, rgame: RareGame):
|
2021-03-11 23:59:12 +13:00
|
|
|
self.change = False
|
2022-12-25 15:21:23 +13:00
|
|
|
# FIXME: Use RareGame for the rest of the code
|
|
|
|
app_name = rgame.app_name
|
2022-03-21 10:18:36 +13:00
|
|
|
super(GameSettings, self).load_settings(app_name)
|
2022-12-25 15:21:23 +13:00
|
|
|
self.game = rgame.game
|
|
|
|
self.igame = rgame.igame
|
2021-09-16 08:16:50 +12:00
|
|
|
if self.igame:
|
|
|
|
if self.igame.can_run_offline:
|
2022-08-01 09:56:02 +12:00
|
|
|
offline = self.core.lgd.config.get(self.game.app_name, "offline", fallback="unset")
|
2021-09-16 08:16:50 +12:00
|
|
|
if offline == "true":
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.offline.setCurrentIndex(1)
|
2021-09-16 08:16:50 +12:00
|
|
|
elif offline == "false":
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.offline.setCurrentIndex(2)
|
2021-09-16 08:16:50 +12:00
|
|
|
else:
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.offline.setCurrentIndex(0)
|
2021-09-16 08:16:50 +12:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.offline.setEnabled(True)
|
2021-03-14 23:00:06 +13:00
|
|
|
else:
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.offline.setEnabled(False)
|
|
|
|
self.override_exe_edit.set_root(self.igame.install_path)
|
2021-03-14 23:00:06 +13:00
|
|
|
else:
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.offline.setEnabled(False)
|
|
|
|
self.override_exe_edit.set_root("")
|
2021-03-14 23:00:06 +13:00
|
|
|
|
2022-08-01 09:56:02 +12:00
|
|
|
skip_update = self.core.lgd.config.get(self.game.app_name, "skip_update_check", fallback="unset")
|
2021-03-14 23:00:06 +13:00
|
|
|
if skip_update == "true":
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.skip_update.setCurrentIndex(1)
|
2021-03-14 23:00:06 +13:00
|
|
|
elif skip_update == "false":
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.skip_update.setCurrentIndex(2)
|
2021-03-14 23:00:06 +13:00
|
|
|
else:
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.skip_update.setCurrentIndex(0)
|
2021-03-14 23:00:06 +13:00
|
|
|
|
2023-02-22 02:26:19 +13:00
|
|
|
self.set_title.emit(self.game.app_title)
|
2021-06-21 07:55:31 +12:00
|
|
|
if platform.system() != "Windows":
|
2021-12-06 09:26:04 +13:00
|
|
|
if self.igame and self.igame.platform == "Mac":
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.linux_settings_widget.setVisible(False)
|
2021-12-06 09:26:04 +13:00
|
|
|
else:
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.linux_settings_widget.setVisible(True)
|
2021-12-06 09:26:04 +13:00
|
|
|
|
2023-03-16 23:41:50 +13:00
|
|
|
self.ui.launch_params.setText(self.core.lgd.config.get(self.game.app_name, "start_params", fallback=""))
|
2021-12-24 22:09:50 +13:00
|
|
|
self.override_exe_edit.setText(
|
|
|
|
self.core.lgd.config.get(self.game.app_name, "override_exe", fallback="")
|
|
|
|
)
|
2022-03-15 11:29:54 +13:00
|
|
|
self.pre_launch_settings.load_settings(app_name)
|
|
|
|
|
2021-03-11 23:59:12 +13:00
|
|
|
self.change = True
|