61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import os
|
|
import shutil
|
|
from typing import Tuple
|
|
|
|
from PyQt5.QtWidgets import QHBoxLayout, QCheckBox, QFileDialog
|
|
|
|
from rare.shared import LegendaryCoreSingleton
|
|
from rare.utils import config_helper
|
|
from rare.utils.extra_widgets import IndicatorLineEdit, PathEdit
|
|
|
|
|
|
class PreLaunchSettings(QHBoxLayout):
|
|
app_name: str
|
|
|
|
def __init__(self):
|
|
super(PreLaunchSettings, self).__init__()
|
|
self.core = LegendaryCoreSingleton()
|
|
self.edit = PathEdit(
|
|
path="",
|
|
placeholder=self.tr("Path to script"),
|
|
file_type=QFileDialog.ExistingFile,
|
|
edit_func=self.edit_command,
|
|
save_func=self.save_pre_launch_command,
|
|
)
|
|
self.layout().addWidget(self.edit)
|
|
|
|
self.wait_check = QCheckBox(self.tr("Wait for finish"))
|
|
self.layout().addWidget(self.wait_check)
|
|
self.wait_check.stateChanged.connect(self.save_wait_finish)
|
|
|
|
def edit_command(self, text: str) -> Tuple[bool, str, str]:
|
|
if not text.strip():
|
|
return True, text, ""
|
|
|
|
if not os.path.isfile(text.split()[0]) and not shutil.which(text.split()[0]):
|
|
return False, text, IndicatorLineEdit.reasons.file_not_exist
|
|
else:
|
|
return True, text, ""
|
|
|
|
def save_pre_launch_command(self, text):
|
|
if text:
|
|
config_helper.add_option(self.app_name, "pre_launch_command", text)
|
|
self.wait_check.setDisabled(False)
|
|
else:
|
|
config_helper.remove_option(self.app_name, "pre_launch_command")
|
|
self.wait_check.setDisabled(True)
|
|
config_helper.remove_option(self.app_name, "pre_launch_wait")
|
|
|
|
def save_wait_finish(self):
|
|
config_helper.add_option(self.app_name, "pre_launch_wait", str(self.wait_check.isChecked()).lower())
|
|
|
|
def load_settings(self, app_name):
|
|
self.app_name = app_name
|
|
|
|
command = self.core.lgd.config.get(app_name, "pre_launch_command", fallback="")
|
|
self.edit.setText(command)
|
|
|
|
wait = self.core.lgd.config.getboolean(app_name, "pre_launch_wait", fallback=False)
|
|
self.wait_check.setChecked(wait)
|
|
|
|
self.wait_check.setEnabled(bool(command))
|