Compare commits

..

2 Commits

3 changed files with 51 additions and 46 deletions

14
LICENSE_AGREEMENT Normal file
View File

@ -0,0 +1,14 @@
Лицензионные соглашения использования сторонних компонентов:
Некоторые компоненты, установленные в префикс и необходимые для запуска приложений,
могут быть защищены авторским правом или лицензионными соглашениями. Вы обязаны
самостоятельно убедиться в законности использования этих компонентов в вашей
юрисдикции.
Мы не несём ответственности за нарушение лицензионных соглашений, связанное с
использованием подготовленного префикса, а так же за программное обеспечение,
поставляемое из сторонних источников.
Подтверждая продолжение установки, вы соглашаетесь, что ознакомились с данным
отказом от ответственности и принимаете все риски, связанные с использованием
программного обеспечения.

View File

@ -7,7 +7,7 @@ if [[ $(id -u) -eq 0 ]] ; then
fi fi
##### DEFAULT PATH ##### ##### DEFAULT PATH #####
export SCRIPT_NAME USER_WORK_PATH RUN_SCRIPT DATA_PATH CHANGELOG_FILE WH_ICON_PATH LICENSE_FILE export SCRIPT_NAME USER_WORK_PATH RUN_SCRIPT DATA_PATH CHANGELOG_FILE WH_ICON_PATH LICENSE_FILE AGREEMENT
SCRIPT_NAME="$(basename "$0")" SCRIPT_NAME="$(basename "$0")"
if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
@ -18,6 +18,7 @@ if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
CHANGELOG_FILE="$(realpath "/usr/share/doc/winehelper"-*/CHANGELOG)" 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)" LICENSE_FILE="$(realpath "/usr/share/doc/winehelper"-*/LICENSE)"
AGREEMENT="$(realpath "/usr/share/doc/winehelper"-*/LICENSE_AGREEMENT)"
else else
# переменные для тестового запуска WineHelper из репозитория # переменные для тестового запуска WineHelper из репозитория
USER_WORK_PATH="$HOME/test-$SCRIPT_NAME" USER_WORK_PATH="$HOME/test-$SCRIPT_NAME"
@ -26,6 +27,7 @@ else
CHANGELOG_FILE="$DATA_PATH/CHANGELOG" CHANGELOG_FILE="$DATA_PATH/CHANGELOG"
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper-devel.svg" WH_ICON_PATH="$DATA_PATH/image/gui/winehelper-devel.svg"
LICENSE_FILE="$DATA_PATH/LICENSE" LICENSE_FILE="$DATA_PATH/LICENSE"
AGREEMENT="$DATA_PATH/LICENSE_AGREEMENT"
# минимальная проверка синтаксиса скриптов # минимальная проверка синтаксиса скриптов
for self_check_script in "$RUN_SCRIPT" \ for self_check_script in "$RUN_SCRIPT" \
@ -367,20 +369,14 @@ print_license_agreement () {
then return 0 then return 0
fi fi
if [[ -f "$AGREEMENT" ]]; then
echo
print_warning "$(cat "$AGREEMENT")"
else
fatal "Файл лицензионного соглашения не найден: $AGREEMENT"
fi
echo echo
print_warning "Лицензионные соглашения использования сторонних компонентов:
Некоторые компоненты, установленные в префикс и необходимые для запуска приложений, могут
быть защищены авторским правом или лицензионными соглашениями. Вы обязаны самостоятельно
убедиться в законности использования этих компонентов в вашей юрисдикции.
Мы не несём ответственности за нарушение лицензионных соглашений, связанное с использованием
подготовленного префикса, а так же за программное обеспечение поставляемого из сторонних источников.
Подтверждая продолжение установки, вы соглашаетесь что ознакомились с данным отказом от
ответственности и принимаете все риски, связанные с использованием программного обеспечения.
"
if print_confirmation "Подтвердите продолжение установки" ; then if print_confirmation "Подтвердите продолжение установки" ; then
touch "$license_agreement_file" touch "$license_agreement_file"
chmod 600 "$license_agreement_file" chmod 600 "$license_agreement_file"

View File

@ -4,6 +4,7 @@ import subprocess
import sys import sys
import shlex import shlex
import shutil import shutil
import html
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLabel, QTabWidget, from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLabel, QTabWidget,
QTextEdit, QFileDialog, QMessageBox, QLineEdit, QCheckBox, QStackedWidget, QScrollArea, QTextEdit, QFileDialog, QMessageBox, QLineEdit, QCheckBox, QStackedWidget, QScrollArea,
QGridLayout, QFrame, QDialog, QTextBrowser) QGridLayout, QFrame, QDialog, QTextBrowser)
@ -20,6 +21,7 @@ class Var:
CHANGELOG_FILE = os.environ.get("CHANGELOG_FILE") CHANGELOG_FILE = os.environ.get("CHANGELOG_FILE")
WH_ICON_PATH = os.environ.get("WH_ICON_PATH") WH_ICON_PATH = os.environ.get("WH_ICON_PATH")
LICENSE_FILE = os.environ.get("LICENSE_FILE") LICENSE_FILE = os.environ.get("LICENSE_FILE")
LICENSE_AGREEMENT_FILE = os.environ.get("AGREEMENT")
class WineHelperGUI(QMainWindow): class WineHelperGUI(QMainWindow):
def __init__(self): def __init__(self):
@ -604,7 +606,6 @@ class WineHelperGUI(QMainWindow):
# Подвкладка "Лицензия" # Подвкладка "Лицензия"
license_tab = QWidget() license_tab = QWidget()
license_layout = QVBoxLayout(license_tab) license_layout = QVBoxLayout(license_tab)
import html
license_text = QTextBrowser() license_text = QTextBrowser()
license_text.setOpenExternalLinks(True) license_text.setOpenExternalLinks(True)
@ -685,12 +686,9 @@ class WineHelperGUI(QMainWindow):
if self.current_active_button in self.installed_buttons: if self.current_active_button in self.installed_buttons:
self.current_active_button = None self.current_active_button = None
# Полностью очищаем layout перед обновлением, удаляя старые виджеты (рамки с кнопками) # Очистить существующие кнопки
while self.installed_scroll_layout.count(): for btn in self.installed_buttons:
item = self.installed_scroll_layout.takeAt(0) btn.deleteLater()
widget = item.widget()
if widget:
widget.deleteLater()
self.installed_buttons.clear() self.installed_buttons.clear()
if not os.path.exists(Var.USER_WORK_PATH): if not os.path.exists(Var.USER_WORK_PATH):
@ -1258,38 +1256,32 @@ class WineHelperGUI(QMainWindow):
license_page = QWidget() license_page = QWidget()
license_layout = QVBoxLayout(license_page) license_layout = QVBoxLayout(license_page)
license_text = QTextEdit() license_found = False
license_text.setReadOnly(True)
# Получаем текст лицензии из скрипта winehelper license_text = QTextBrowser()
script_path = os.path.join(Var.DATA_PATH, "winehelper")
license_content = "" # Получаем текст лицензионного соглашения из файла
try: try:
with open(script_path, 'r', encoding='utf-8') as f: license_file_path = Var.LICENSE_AGREEMENT_FILE
capturing = False if not license_file_path or not os.path.exists(license_file_path):
for line in f: raise FileNotFoundError
if 'print_warning "Лицензионные соглашения использования сторонних компонентов:' in line:
capturing = True
continue
if capturing: with open(license_file_path, 'r', encoding='utf-8') as f:
if 'Подтверждая продолжение установки' in line: license_content = f.read()
break
# Очищаем строку от лишних символов escaped_license_content = html.escape(license_content)
clean_line = line.strip()
clean_line = clean_line.replace('print_warning "', '').replace('\\n', '\n')
clean_line = clean_line.rstrip('"')
license_content += clean_line + '\n'
license_text.setHtml(f""" license_text.setHtml(f"""
<h3>Лицензионные соглашения использования сторонних компонентов:</h3> <pre style="font-family: sans-serif; font-size: 10pt; white-space: pre-wrap; word-wrap: break-word;">{escaped_license_content}</pre>
<p>{license_content}</p>
""") """)
license_found = True
except (FileNotFoundError, TypeError):
license_text.setHtml(f'<h3>Лицензионные соглашения</h3><p>Не удалось загрузить файл лицензионного соглашения по пути:<br>{Var.LICENSE_AGREEMENT_FILE}</p>')
except Exception as e: except Exception as e:
print(f"Ошибка чтения файла для извлечения лицензии: {str(e)}") print(f"Ошибка чтения файла лицензии: {str(e)}")
license_text.setHtml(""" license_text.setHtml(f"""
<h3>Лицензионные соглашения</h3> <h3>Лицензионные соглашения</h3>
<p>Не удалось загрузить текст лицензионного соглашения.</p> <p>Произошла ошибка при чтении файла лицензии:<br>{str(e)}</p>
""") """)
license_layout.addWidget(license_text) license_layout.addWidget(license_text)
@ -1336,6 +1328,9 @@ class WineHelperGUI(QMainWindow):
lambda state: self.btn_continue.setEnabled(state == Qt.Checked) lambda state: self.btn_continue.setEnabled(state == Qt.Checked)
) )
if not license_found:
self.license_checkbox.setEnabled(False)
self.install_dialog.show() self.install_dialog.show()
def _prepare_installation(self): def _prepare_installation(self):
@ -1388,7 +1383,7 @@ class WineHelperGUI(QMainWindow):
self.install_process.start(winehelper_path, args) self.install_process.start(winehelper_path, args)
if not self.install_process.waitForStarted(3000): if not self.install_process.waitForStarted(3000):
raise RuntimeError("Не удалось запустить процесс установки") raise RuntimeError("Не удалось запустить процесс установки")
self.append_log("Процесс установки успешно запущен...") self.append_log("Процесс установки запущен...")
except Exception as e: except Exception as e:
self.append_log(f"\n=== ОШИБКА: {str(e)} ===", is_error=True) self.append_log(f"\n=== ОШИБКА: {str(e)} ===", is_error=True)
QMessageBox.critical(self.install_dialog, "Ошибка", f"Не удалось запустить установку:\n{str(e)}") QMessageBox.critical(self.install_dialog, "Ошибка", f"Не удалось запустить установку:\n{str(e)}")