forked from CastroFidel/winehelper
the component manager has been restored
This commit is contained in:
@@ -837,13 +837,8 @@ class WinetricksManagerDialog(QDialog):
|
||||
# 1. Проверяем, была ли отмена пользователем
|
||||
if self.user_cancelled:
|
||||
self._log("\n=== Установка прервана пользователем. ===")
|
||||
self._show_message_box("Отмена", "Установки компонентов прервана пользователем.",
|
||||
QMessageBox.Warning, {"buttons": {"Да": QMessageBox.AcceptRole}})
|
||||
|
||||
# Сбрасываем флаг и восстанавливаем UI
|
||||
self.user_cancelled = False
|
||||
self.apply_button.setEnabled(True)
|
||||
self.close_button.setEnabled(True)
|
||||
# Процесс завершен, теперь можно безопасно закрыть диалог.
|
||||
self.close()
|
||||
return
|
||||
|
||||
# 2. Обрабатываем реальную ошибку
|
||||
@@ -889,8 +884,10 @@ class WinetricksManagerDialog(QDialog):
|
||||
{"buttons": {"Да": QMessageBox.YesRole, "Нет": QMessageBox.NoRole}, "default": "Нет"})
|
||||
if reply == "Да":
|
||||
self.user_cancelled = True
|
||||
self.log_output.append("\n=== Прерывание установки... Ожидание завершения процесса... ===")
|
||||
self.apply_process.terminate() # Попытка мягкого завершения
|
||||
event.accept() # Разрешаем закрытие
|
||||
# Запрещаем закрытие. on_apply_finished обработает его после завершения процесса.
|
||||
event.ignore()
|
||||
else:
|
||||
event.ignore() # Запрещаем закрытие
|
||||
else:
|
||||
@@ -2741,6 +2738,30 @@ class WineHelperGUI(QMainWindow):
|
||||
"Не удалось определить префикс. Выберите установленное приложение или создайте новый префикс.")
|
||||
return
|
||||
|
||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||
if not os.path.isdir(prefix_path):
|
||||
QMessageBox.critical(self, "Ошибка", f"Каталог префикса не найден:\n{prefix_path}")
|
||||
return
|
||||
|
||||
winehelper_dir = os.path.dirname(self.winehelper_path)
|
||||
winetricks_path = None
|
||||
try:
|
||||
# Ищем файл, который начинается с 'winetricks_'
|
||||
for filename in os.listdir(winehelper_dir):
|
||||
if filename.startswith("winetricks_"):
|
||||
winetricks_path = os.path.join(winehelper_dir, filename)
|
||||
break # Нашли, выходим из цикла
|
||||
except OSError as e:
|
||||
QMessageBox.critical(self, "Ошибка", f"Не удалось прочитать директорию {winehelper_dir}: {e}")
|
||||
return
|
||||
|
||||
if not winetricks_path:
|
||||
QMessageBox.critical(self, "Ошибка", f"Скрипт winetricks не найден в директории:\n{winehelper_dir}")
|
||||
return
|
||||
|
||||
dialog = WinetricksManagerDialog(prefix_path, winetricks_path, self)
|
||||
dialog.exec_()
|
||||
|
||||
def _get_wine_executable_for_prefix(self, prefix_name):
|
||||
"""Определяет и возвращает путь к исполняемому файлу wine для указанного префикса."""
|
||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||
@@ -2768,30 +2789,6 @@ class WineHelperGUI(QMainWindow):
|
||||
"Будет использована системная версия Wine.")
|
||||
return 'wine' # По умолчанию системный wine
|
||||
|
||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||
if not os.path.isdir(prefix_path):
|
||||
QMessageBox.critical(self, "Ошибка", f"Каталог префикса не найден:\n{prefix_path}")
|
||||
return
|
||||
|
||||
winehelper_dir = os.path.dirname(self.winehelper_path)
|
||||
winetricks_path = None
|
||||
try:
|
||||
# Ищем файл, который начинается с 'winetricks_'
|
||||
for filename in os.listdir(winehelper_dir):
|
||||
if filename.startswith("winetricks_"):
|
||||
winetricks_path = os.path.join(winehelper_dir, filename)
|
||||
break # Нашли, выходим из цикла
|
||||
except OSError as e:
|
||||
QMessageBox.critical(self, "Ошибка", f"Не удалось прочитать директорию {winehelper_dir}: {e}")
|
||||
return
|
||||
|
||||
if not winetricks_path:
|
||||
QMessageBox.critical(self, "Ошибка", f"Скрипт winetricks не найден в директории:\n{winehelper_dir}")
|
||||
return
|
||||
|
||||
dialog = WinetricksManagerDialog(prefix_path, winetricks_path, self)
|
||||
dialog.exec_()
|
||||
|
||||
def _run_wine_util(self, util_name, prefix_name=None):
|
||||
"""Запускает стандартную утилиту Wine для выбранного префикса."""
|
||||
if not prefix_name:
|
||||
@@ -3163,6 +3160,8 @@ class WineHelperGUI(QMainWindow):
|
||||
if not self._show_license_agreement_dialog():
|
||||
return # Пользователь отклонил лицензию
|
||||
|
||||
self.installation_cancelled = False
|
||||
|
||||
# Создаем диалоговое окно установки
|
||||
self.install_dialog = QDialog(self)
|
||||
title_name = self._get_current_app_title()
|
||||
@@ -3389,6 +3388,14 @@ class WineHelperGUI(QMainWindow):
|
||||
cursor.insertText("\n")
|
||||
|
||||
self._reset_log_state()
|
||||
|
||||
if hasattr(self, 'installation_cancelled') and self.installation_cancelled:
|
||||
self.append_log("\n=== Установка была прервана. ===")
|
||||
self.cleanup_process()
|
||||
if self.install_dialog:
|
||||
self.install_dialog.close()
|
||||
return
|
||||
|
||||
if exit_code == 0 and exit_status == QProcess.NormalExit:
|
||||
self.append_log("\n=== Установка успешно завершена ===")
|
||||
# Создаем кастомный диалог, чтобы кнопка была на русском
|
||||
@@ -3447,11 +3454,10 @@ class WineHelperGUI(QMainWindow):
|
||||
msg_box.exec_()
|
||||
|
||||
if msg_box.clickedButton() == yes_button:
|
||||
self.append_log("\n=== Пользователь прервал установку через закрытие окна ===", is_error=True)
|
||||
# Завершаем процесс. Сигнал finished вызовет handle_process_finished,
|
||||
# который обновит состояние кнопок.
|
||||
self.append_log("\n=== Пользователь прервал установку через закрытие окна. Ожидание... ===", is_error=True)
|
||||
self.installation_cancelled = True
|
||||
self.install_process.terminate()
|
||||
event.accept() # Разрешаем закрытие окна
|
||||
event.ignore() # Запрещаем закрытие, handle_process_finished обработает его
|
||||
else:
|
||||
# Пользователь нажал "Нет", поэтому игнорируем событие закрытия
|
||||
event.ignore()
|
||||
@@ -3474,7 +3480,8 @@ class WineHelperGUI(QMainWindow):
|
||||
msg_box.exec_()
|
||||
if msg_box.clickedButton() == yes_button:
|
||||
self.append_log("\n=== Пользователь прервал установку ===", is_error=True)
|
||||
self.cleanup_process()
|
||||
self.installation_cancelled = True
|
||||
self.install_process.terminate()
|
||||
|
||||
def _handle_command_output(self):
|
||||
"""Обрабатывает вывод для диалога команды"""
|
||||
|
Reference in New Issue
Block a user