forked from CastroFidel/winehelper
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			85bd5fdf5d
			...
			0.5.4.4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 20030d43e4 | ||
|  | b44849661d | ||
|  | 4c39ec3c8e | ||
|  | 8950d8de2f | 
| @@ -12,14 +12,15 @@ export SCRIPT_NAME USER_WORK_PATH RUN_SCRIPT DATA_PATH CHANGELOG_FILE WH_ICON_PA | |||||||
| SCRIPT_NAME="$(basename "$0")" | SCRIPT_NAME="$(basename "$0")" | ||||||
| if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then | if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then | ||||||
|     # переменные для установленного WineHelper в систему |     # переменные для установленного WineHelper в систему | ||||||
|  |     WH_VERSION="$(rpm -q winehelper | awk -F'-' '{print $2}')" | ||||||
|     USER_WORK_PATH="$HOME/.local/share/$SCRIPT_NAME" |     USER_WORK_PATH="$HOME/.local/share/$SCRIPT_NAME" | ||||||
|     RUN_SCRIPT="/usr/bin/$SCRIPT_NAME" |     RUN_SCRIPT="/usr/bin/$SCRIPT_NAME" | ||||||
|     DATA_PATH="/usr/share/$SCRIPT_NAME" |     DATA_PATH="/usr/share/$SCRIPT_NAME" | ||||||
|     CHANGELOG_FILE="$(realpath "/usr/share/doc/winehelper"-*/CHANGELOG)" |  | ||||||
|     WH_ICON_PATH="$DATA_PATH/image/gui/winehelper.svg" |     WH_ICON_PATH="$DATA_PATH/image/gui/winehelper.svg" | ||||||
|     LICENSE_FILE="$(realpath "/usr/share/doc/winehelper"-*/LICENSE)" |     CHANGELOG_FILE="/usr/share/doc/winehelper-$WH_VERSION/CHANGELOG" | ||||||
|     AGREEMENT="$(realpath "/usr/share/doc/winehelper"-*/LICENSE_AGREEMENT)" |     LICENSE_FILE="/usr/share/doc/winehelper-$WH_VERSION/LICENSE" | ||||||
|     THIRD_PARTY_FILE="$(realpath "/usr/share/doc/winehelper"-*/THIRD_PARTY)" |     AGREEMENT="/usr/share/doc/winehelper-$WH_VERSION/LICENSE_AGREEMENT" | ||||||
|  |     THIRD_PARTY_FILE="/usr/share/doc/winehelper-$WH_VERSION/THIRD-PARTY" | ||||||
| else | else | ||||||
|     # переменные для тестового запуска WineHelper из репозитория |     # переменные для тестового запуска WineHelper из репозитория | ||||||
|     USER_WORK_PATH="$HOME/test-$SCRIPT_NAME" |     USER_WORK_PATH="$HOME/test-$SCRIPT_NAME" | ||||||
|   | |||||||
| @@ -2112,10 +2112,17 @@ class WineHelperGUI(QMainWindow): | |||||||
|         self.change_wine_version_button.setToolTip("Изменение версии Wine или Proton для выбранного префикса.") |         self.change_wine_version_button.setToolTip("Изменение версии Wine или Proton для выбранного префикса.") | ||||||
|         management_layout.addWidget(self.change_wine_version_button, 3, 0, 1, 2) |         management_layout.addWidget(self.change_wine_version_button, 3, 0, 1, 2) | ||||||
|  |  | ||||||
|         # Добавляем небольшой отступ |         self.esync_button = QPushButton("ESync") | ||||||
|         spacer_widget = QWidget() |         self.esync_button.setCheckable(True) | ||||||
|         spacer_widget.setFixedHeight(5) |         self.esync_button.setToolTip("Включить/выключить Eventfd-based synchronization.") | ||||||
|         management_layout.addWidget(spacer_widget, 4, 0, 1, 2) |         self.esync_button.clicked.connect(lambda: self.update_sync_option("WINEESYNC", self.esync_button.isChecked())) | ||||||
|  |         management_layout.addWidget(self.esync_button, 4, 0) | ||||||
|  |  | ||||||
|  |         self.fsync_button = QPushButton("FSync") | ||||||
|  |         self.fsync_button.setCheckable(True) | ||||||
|  |         self.fsync_button.setToolTip("Включить/выключить Futex-based synchronization.") | ||||||
|  |         self.fsync_button.clicked.connect(lambda: self.update_sync_option("WINEFSYNC", self.fsync_button.isChecked())) | ||||||
|  |         management_layout.addWidget(self.fsync_button, 4, 1) | ||||||
|  |  | ||||||
|         self.dxvk_manage_button = QPushButton("Управление DXVK") |         self.dxvk_manage_button = QPushButton("Управление DXVK") | ||||||
|         self.dxvk_manage_button.setMinimumHeight(32) |         self.dxvk_manage_button.setMinimumHeight(32) | ||||||
| @@ -2133,14 +2140,13 @@ class WineHelperGUI(QMainWindow): | |||||||
|         self.prefix_info_display = QTextBrowser() |         self.prefix_info_display = QTextBrowser() | ||||||
|         self.prefix_info_display.setReadOnly(True) |         self.prefix_info_display.setReadOnly(True) | ||||||
|         self.prefix_info_display.setFrameStyle(QFrame.StyledPanel) |         self.prefix_info_display.setFrameStyle(QFrame.StyledPanel) | ||||||
|         # Увеличиваем rowspan, чтобы учесть добавленный отступ |         # Увеличиваем rowspan, чтобы охватить все строки с кнопками | ||||||
|         management_layout.addWidget(self.prefix_info_display, 0, 2, 6, 1) |         management_layout.addWidget(self.prefix_info_display, 0, 2, 6, 1) | ||||||
|  |  | ||||||
|         management_layout.setColumnStretch(0, 1) |         management_layout.setColumnStretch(0, 1) | ||||||
|         management_layout.setColumnStretch(1, 1) |         management_layout.setColumnStretch(1, 1) | ||||||
|         management_layout.setColumnStretch(2, 2) |         management_layout.setColumnStretch(2, 2) | ||||||
|  |  | ||||||
|         # --- Separator and Installer --- |  | ||||||
|         separator = QFrame() |         separator = QFrame() | ||||||
|         separator.setFrameShape(QFrame.HLine) |         separator.setFrameShape(QFrame.HLine) | ||||||
|         separator.setFrameShadow(QFrame.Sunken) |         separator.setFrameShadow(QFrame.Sunken) | ||||||
| @@ -2332,6 +2338,9 @@ class WineHelperGUI(QMainWindow): | |||||||
|         else: |         else: | ||||||
|             self.prefix_info_display.clear() |             self.prefix_info_display.clear() | ||||||
|             self.prefix_install_path_edit.clear() |             self.prefix_install_path_edit.clear() | ||||||
|  |             # Сбрасываем состояние кнопок, когда префикс не выбран | ||||||
|  |             self.esync_button.setChecked(False) | ||||||
|  |             self.fsync_button.setChecked(False) | ||||||
|  |  | ||||||
|         self.update_prefix_install_button_state() |         self.update_prefix_install_button_state() | ||||||
|  |  | ||||||
| @@ -2339,12 +2348,16 @@ class WineHelperGUI(QMainWindow): | |||||||
|         """Обновляет информационный блок для созданного префикса, читая данные из last.conf.""" |         """Обновляет информационный блок для созданного префикса, читая данные из last.conf.""" | ||||||
|         if not prefix_name: |         if not prefix_name: | ||||||
|             self.prefix_info_display.clear() |             self.prefix_info_display.clear() | ||||||
|  |             self.esync_button.setChecked(False) | ||||||
|  |             self.fsync_button.setChecked(False) | ||||||
|             return |             return | ||||||
|  |  | ||||||
|         last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf") |         last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf") | ||||||
|  |  | ||||||
|         if not os.path.exists(last_conf_path): |         if not os.path.exists(last_conf_path): | ||||||
|             self.prefix_info_display.setHtml(f"<p>Файл конфигурации last.conf не найден для префикса '{prefix_name}'.</p>") |             self.prefix_info_display.setHtml(f"<p>Файл конфигурации last.conf не найден для префикса '{prefix_name}'.</p>") | ||||||
|  |             self.esync_button.setChecked(False) | ||||||
|  |             self.fsync_button.setChecked(False) | ||||||
|             return |             return | ||||||
|  |  | ||||||
|         # Словарь для хранения всех переменных из файла |         # Словарь для хранения всех переменных из файла | ||||||
| @@ -2363,6 +2376,17 @@ class WineHelperGUI(QMainWindow): | |||||||
|             self.prefix_info_display.setHtml(f"<p>Ошибка чтения last.conf: {e}</p>") |             self.prefix_info_display.setHtml(f"<p>Ошибка чтения last.conf: {e}</p>") | ||||||
|             return |             return | ||||||
|  |  | ||||||
|  |         # --- Обновить кнопки ESync/FSync --- | ||||||
|  |         # Блокировать сигналы, чтобы предотвратить запуск метода обновления, когда мы устанавливаем состояние | ||||||
|  |         self.esync_button.blockSignals(True) | ||||||
|  |         self.fsync_button.blockSignals(True) | ||||||
|  |  | ||||||
|  |         self.esync_button.setChecked(all_vars.get("WINEESYNC") == "1") | ||||||
|  |         self.fsync_button.setChecked(all_vars.get("WINEFSYNC") == "1") | ||||||
|  |  | ||||||
|  |         self.esync_button.blockSignals(False) | ||||||
|  |         self.fsync_button.blockSignals(False) | ||||||
|  |  | ||||||
|         # Карта для красивого отображения известных переменных |         # Карта для красивого отображения известных переменных | ||||||
|         display_map = { |         display_map = { | ||||||
|             "WINEPREFIX": ("Путь", lambda v: v), |             "WINEPREFIX": ("Путь", lambda v: v), | ||||||
| @@ -2371,8 +2395,10 @@ class WineHelperGUI(QMainWindow): | |||||||
|             "BASE_PFX": ("Тип", lambda v: 'Чистый' if v == "none" else 'С рекомендуемыми библиотеками'), |             "BASE_PFX": ("Тип", lambda v: 'Чистый' if v == "none" else 'С рекомендуемыми библиотеками'), | ||||||
|             "DXVK_VER": ("Версия DXVK", lambda v: v if v else "Не установлено"), |             "DXVK_VER": ("Версия DXVK", lambda v: v if v else "Не установлено"), | ||||||
|             "VKD3D_VER": ("Версия VKD3D", lambda v: v if v else "Не установлено"), |             "VKD3D_VER": ("Версия VKD3D", lambda v: v if v else "Не установлено"), | ||||||
|  |             "WINEESYNC": ("ESync", lambda v: "Включен" if v == "1" else "Выключен"), | ||||||
|  |             "WINEFSYNC": ("FSync", lambda v: "Включен" if v == "1" else "Выключен"), | ||||||
|         } |         } | ||||||
|         display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "BASE_PFX", "DXVK_VER", "VKD3D_VER"] |         display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "BASE_PFX", "DXVK_VER", "VKD3D_VER", "WINEESYNC", "WINEFSYNC"] | ||||||
|  |  | ||||||
|         html_content = f'<p style="line-height: 1.3; font-size: 9pt;">' |         html_content = f'<p style="line-height: 1.3; font-size: 9pt;">' | ||||||
|         html_content += f"<b>Имя:</b> {html.escape(prefix_name)}<br>" |         html_content += f"<b>Имя:</b> {html.escape(prefix_name)}<br>" | ||||||
| @@ -3340,6 +3366,43 @@ class WineHelperGUI(QMainWindow): | |||||||
|                                 "Будет использована системная версия Wine.") |                                 "Будет использована системная версия Wine.") | ||||||
|         return 'wine'  # По умолчанию системный wine |         return 'wine'  # По умолчанию системный wine | ||||||
|  |  | ||||||
|  |     def update_sync_option(self, var_name, is_enabled): | ||||||
|  |         """Обновляет значение WINEESYNC или WINEFSYNC в last.conf.""" | ||||||
|  |         prefix_name = self.current_managed_prefix_name | ||||||
|  |         if not prefix_name: | ||||||
|  |             return | ||||||
|  |  | ||||||
|  |         last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf") | ||||||
|  |         if not os.path.exists(last_conf_path): | ||||||
|  |             QMessageBox.warning(self, "Ошибка", f"Файл last.conf не найден для префикса '{prefix_name}'.") | ||||||
|  |             return | ||||||
|  |  | ||||||
|  |         new_value = "1" if is_enabled else "0" | ||||||
|  |         updated = False | ||||||
|  |         lines = [] | ||||||
|  |  | ||||||
|  |         try: | ||||||
|  |             with open(last_conf_path, 'r', encoding='utf-8') as f: | ||||||
|  |                 lines = f.readlines() | ||||||
|  |  | ||||||
|  |             for i, line in enumerate(lines): | ||||||
|  |                 if line.strip().startswith(f"export {var_name}="): | ||||||
|  |                     lines[i] = f'export {var_name}="{new_value}"\n' | ||||||
|  |                     updated = True | ||||||
|  |                     break | ||||||
|  |  | ||||||
|  |             if not updated: | ||||||
|  |                 lines.append(f'export {var_name}="{new_value}"\n') | ||||||
|  |  | ||||||
|  |             with open(last_conf_path, 'w', encoding='utf-8') as f: | ||||||
|  |                 f.writelines(lines) | ||||||
|  |  | ||||||
|  |             # Обновляем информационную панель, чтобы отразить изменения | ||||||
|  |             self.update_prefix_info_display(prefix_name) | ||||||
|  |  | ||||||
|  |         except IOError as e: | ||||||
|  |             QMessageBox.critical(self, "Ошибка записи", f"Не удалось обновить файл last.conf:\n{e}") | ||||||
|  |  | ||||||
|     def _run_wine_util(self, util_name, prefix_name=None): |     def _run_wine_util(self, util_name, prefix_name=None): | ||||||
|         """Запускает стандартную утилиту Wine для выбранного префикса.""" |         """Запускает стандартную утилиту Wine для выбранного префикса.""" | ||||||
|         if not prefix_name: |         if not prefix_name: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user