refactoring the install_current_script() method

This commit is contained in:
Sergey Palcheh
2025-08-25 11:33:45 +06:00
parent 70f2976a70
commit a4f01e7340

View File

@@ -2773,71 +2773,24 @@ class WineHelperGUI(QMainWindow):
QMessageBox.warning(self, "Ошибка", "Укажите путь к установочному файлу")
return
if not self._show_license_agreement_dialog():
return # Пользователь отклонил лицензию
# Создаем диалоговое окно установки
self.install_dialog = QDialog(self)
title_name = self._get_current_app_title()
self.install_dialog.setWindowTitle(f"Установка «{title_name}»")
self.install_dialog.setMinimumSize(750, 400)
self.install_dialog.setWindowModality(Qt.WindowModal)
self.stacked_widget = QStackedWidget()
layout = QVBoxLayout()
layout.addWidget(self.stacked_widget)
self.install_dialog.setLayout(layout)
# Первая страница - лицензионное соглашение
license_page = QWidget()
license_layout = QVBoxLayout(license_page)
license_found = False
license_text = QTextBrowser()
# Получаем текст лицензионного соглашения из файла
try:
license_file_path = Var.LICENSE_AGREEMENT_FILE
if not license_file_path or not os.path.exists(license_file_path):
raise FileNotFoundError
with open(license_file_path, 'r', encoding='utf-8') as f:
license_content = f.read()
escaped_license_content = html.escape(license_content)
license_text.setHtml(f"""
<pre style="font-family: sans-serif; font-size: 10pt; white-space: pre-wrap; word-wrap: break-word;">{escaped_license_content}</pre>
""")
license_found = True
except (FileNotFoundError, TypeError):
license_text.setHtml(f'<h3>Лицензионные соглашения</h3><p>Не удалось загрузить файл лицензионного соглашения по пути:<br>{Var.LICENSE_AGREEMENT_FILE}</p>')
except Exception as e:
print(f"Ошибка чтения файла лицензии: {str(e)}")
license_text.setHtml(f"""
<h3>Лицензионные соглашения</h3>
<p>Произошла ошибка при чтении файла лицензии:<br>{str(e)}</p>
""")
license_layout.addWidget(license_text)
self.license_checkbox = QCheckBox("Я принимаю условия лицензионного соглашения")
license_layout.addWidget(self.license_checkbox)
self.btn_continue = QPushButton("Продолжить установку")
self.btn_continue.setEnabled(False)
self.btn_continue.clicked.connect(self._prepare_installation)
license_layout.addWidget(self.btn_continue)
# Вторая страница - лог установки
log_page = QWidget()
log_layout = QVBoxLayout(log_page)
log_layout = QVBoxLayout(self.install_dialog)
self.log_output = QTextEdit()
self.log_output.setReadOnly(True)
self.log_output.setFont(QFont('DejaVu Sans Mono', 10))
log_layout.addWidget(self.log_output)
self.control_buttons = QWidget()
btn_layout = QHBoxLayout(self.control_buttons)
control_buttons = QWidget()
btn_layout = QHBoxLayout(control_buttons)
self.btn_abort = QPushButton("Прервать")
self.btn_abort.clicked.connect(self.abort_installation)
btn_layout.addWidget(self.btn_abort)
@@ -2846,25 +2799,16 @@ class WineHelperGUI(QMainWindow):
self.btn_close.setEnabled(False)
self.btn_close.clicked.connect(self.install_dialog.close)
btn_layout.addWidget(self.btn_close)
log_layout.addWidget(self.control_buttons)
self.stacked_widget.addWidget(license_page)
self.stacked_widget.addWidget(log_page)
log_layout.addWidget(control_buttons)
# Назначение кастомного обработчика закрытия окна
def dialog_close_handler(event):
self.handle_install_dialog_close(event)
self.install_dialog.closeEvent = dialog_close_handler
self.license_checkbox.stateChanged.connect(
lambda state: self.btn_continue.setEnabled(state == Qt.Checked)
)
if not license_found:
self.license_checkbox.setEnabled(False)
self.install_dialog.show()
# Сразу же готовим и запускаем установку
self._prepare_installation()
def _reset_log_state(self):
"""Сбрасывает состояние буфера и флага прогресса для лога установки."""
@@ -2873,7 +2817,6 @@ class WineHelperGUI(QMainWindow):
def _prepare_installation(self):
"""Подготавливает и запускает процесс установки"""
self.stacked_widget.setCurrentIndex(1)
self._reset_log_state() # Сбрасываем состояние для обработки лога
winehelper_path = self.winehelper_path