Compare commits

...

27 Commits
gui ... devel

Author SHA1 Message Date
e766b4dba2 updated changelog to 0.5.3 2025-08-07 12:57:50 +03:00
bad7e5780a t-flex-*: fixed install grdcontrol 2025-08-07 12:41:40 +03:00
7fbe9ba31b Merge branch 'minergenon-border_radius' 2025-08-07 12:21:22 +03:00
377b9e9059 Merge branch 'minergenon-quote_button' 2025-08-07 12:20:47 +03:00
a815fa1c20 Merge branch 'minergenon-download_process' 2025-08-07 12:20:05 +03:00
63f301d2de Merge branch 'minergenon-license_agreement' 2025-08-07 12:17:58 +03:00
213035d868 Merge branch 'minergenon-fixing_panels' 2025-08-07 12:16:05 +03:00
65bd514a1a Merge branch 'minergenon-selection_frame' 2025-08-07 12:15:51 +03:00
8912134827 increased rounding when selecting buttons 2025-08-06 11:52:50 +06:00
cb3fdc62dc added quotes in the install button 2025-08-05 17:09:13 +06:00
9611cc52fc the gui loading process has been fixed 2025-08-05 15:05:28 +06:00
5cdc4a8f4f added blocking of license agreement confirmation 2025-08-04 12:35:29 +06:00
32fa7f6278 fixing the minimum panel sizes 2025-08-03 13:50:55 +06:00
b44fcdb63e the license agreement has been placed in a separate file 2025-08-03 11:32:41 +06:00
3e2ed1cff5 fixed frame deletion 2025-08-02 19:08:45 +06:00
a18c4684a7 updated changelog to 0.5.2 2025-08-01 13:29:33 +03:00
0cca7b441d dropped patch from winehelper.desktop 2025-08-01 13:28:03 +03:00
bda170017c updated changelog to 0.5.1 2025-08-01 12:44:20 +03:00
42e822217b moved ais-lpu-client to testinstall 2025-08-01 12:40:34 +03:00
79d45b6f51 Merge branch 'minergenon-gui' 2025-08-01 12:24:56 +03:00
576f939ceb Merge branch 'minergenon-add_prog_url' 2025-08-01 12:17:45 +03:00
c9e4cb23b7 Merge branch 'minergenon-backup_update' 2025-08-01 12:16:13 +03:00
f17b354ca3 added desktop file for GUI 2025-08-01 12:13:32 +03:00
3d28dc2758 su_run: use pkexec for GUI 2025-08-01 12:11:24 +03:00
b403934966 added guardant for t-flex 2025-08-01 12:10:16 +03:00
e79d7e5b17 added a link to the off.sites 2025-07-31 18:39:06 +06:00
ea621f0402 updated creation and restoration of a prefix backup 2025-07-31 09:24:41 +06:00
46 changed files with 324 additions and 131 deletions

View File

@ -1,5 +1,22 @@
История изменений:
0.5.3:
* исправлена установка grdcontrol для t-flex-*
* обновлен графический режим Qt5
0.5.2:
* исправлен запуск winehelper.desktop для winehelper-qt
0.5.1:
* добавлена функция извлечения иконки из .exe файлов
* добавлен вывод истории изменений командой: winehelper --changelog
* добавлен графический режим Qt5 (альфа версия)
* обновлены скрипты для совместной работы с графическим режимом
* обновлены скрипты установок для t-flex-* (добавлена поддержка grdcontrol)
* добавлены ссылки на официальные сайты устанавливаемых приложений
* обновлены функции создания и восстановления резервных копий префиков
* добавлены иконки для приложения WineHelper
0.5.0:
* добавлен явный вывод отказа от ответственности и соглашения с ним
* обновлены все скрипты для установки t-flex-*

14
LICENSE_AGREEMENT Normal file
View File

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

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Пакет программ для таможенного оформления. Включает программы Такса и ТамДок в комплектациях Эксперт, а также программу Заполнитель.
########################################################################
export PROG_URL="https://www.alta.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="alta"
export PROG_NAME="Альта-Эксперт"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Таможенное оформление товаров
########################################################################
export PROG_URL="https://www.alta.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="alta"
export PROG_NAME="Альта-ГТД"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Пакет программ для таможенного оформления. Включает программы Альта-ГТД, Такса и ТамДок в комплектациях Максимум, а также программу Заполнитель.
########################################################################
export PROG_URL="https://www.alta.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="alta"
export PROG_NAME="Альта-Максимум"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Таможенное законодательство
########################################################################
export PROG_URL="https://www.alta.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="alta"
export PROG_NAME="Таможенные документы"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Расчет контракта
########################################################################
export PROG_URL="https://www.alta.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="alta"
export PROG_NAME="Такса"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Автоматизация импорта данных
########################################################################
export PROG_URL="https://www.alta.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="alta"
export PROG_NAME="Заполнитель"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Программа для ведения автоматического контроля договоров, счетов и прочих платежных документов организаций-поставщиков и клиентов.
########################################################################
export PROG_URL="https://www.ctm.ru"
export PROG_NAME="СТМ-Финансы"
export PROG_ICON="ctmfinance"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Удобная многофункциональная программа для ведения электронных журналов. Позволяет автоматизировать документооборот участников ВЭД, таможенных представителей и пр.
########################################################################
export PROG_URL="https://www.ctm.ru"
export PROG_NAME="СТМ-Журналы"
export PROG_ICON="ctmjournals"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Программный модуль, обеспечивающий передачу данных при работе в системе Электронного декларирования через Интернет.
########################################################################
export PROG_URL="https://www.ctm.ru"
export PROG_NAME="Монитор ЭД"
export PROG_ICON="ctmmonitor"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Универсальная программа для создания различных отчетов, в том числе подаваемых в таможенные органы таможенными представителями.
########################################################################
export PROG_URL="https://www.ctm.ru"
export PROG_NAME="СТМ-Отчет"
export PROG_ICON="ctmreport"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Вспомогательная программа для автоматического обновления через Интернет программного обеспечения «СТМ»
########################################################################
export PROG_URL="https://www.ctm.ru"
export PROG_NAME="СТМ-Сервис"
export PROG_ICON="ctmservice"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Сервис обновления ПО
########################################################################
export PROG_URL="https://daobit.ru"
export WH_WINE_USE="wine_x_tkg_10-0_i586" # wine-9.0.9-alt1-i586"
export WINEPREFIX="daobit"
export PROG_NAME="Сервис обновления ПО"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Построение маршрутов железнодорожных грузоперевозок
########################################################################
export PROG_URL="https://daobit.ru"
export WH_WINE_USE="wine_x_tkg_10-0_i586" # wine-9.0.9-alt1-i586"
export WINEPREFIX="daobit"
export PROG_NAME="R-Атлас"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Специализированная информация для организации железнодорожных перевозок
########################################################################
export PROG_URL="https://daobit.ru"
export WH_WINE_USE="wine_x_tkg_10-0_i586" # wine-9.0.9-alt1-i586"
export WINEPREFIX="daobit"
export PROG_NAME="R-Инфо"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Расчёт размера провозной платы и дополнительных сборов за грузовые перевозки по железной дороге
########################################################################
export PROG_URL="https://daobit.ru"
export WH_WINE_USE="wine_x_tkg_10-0_i586" # wine-9.0.9-alt1-i586"
export WINEPREFIX="daobit"
export PROG_NAME="R-Тариф"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Программа «Декларация 2024» позволяет автоматически формировать налоговые декларации по форме 3-НДФЛ. В процессе заполнения Вами данных программа автоматически проверяет их корректность, что уменьшает вероятность появления ошибки.
########################################################################
export PROG_URL="https://www.nalog.gov.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="declaration"
export PROG_NAME="Декларация"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Удобная программа для создания двухмерных схем и чертежей. Основной акцент сделан на проектировании систем тепло-, водо- и газоснабжения, водоочистки, автоматизированных систем управления технологическими процессами (АСУТП), а также планов эвакуации при пожаре и авариях.
########################################################################
export PROG_URL="https://easymnemo.com"
export WH_WINE_USE="wine_x_tkg_10-0_i586"
export WINEPREFIX="easymnemo"
export PROG_NAME="Easymnemo"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Конструктор тестов предназначен для проведения тестирования персонала и учащихся.
########################################################################
export PROG_URL="https://www.keepsoft.ru"
export PROG_NAME="Конструктор тестов"
export AUTOINSTALL_EXE="${WH_TMP_DIR}/simulator4.exe"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Программа автоматизации процесса подготовки юридическими и физическими лицами документов для представления в налоговые органы в электронной форме и на бумажном носителе.
########################################################################
export PROG_URL="https://www.nalog.gov.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="nalog"
export PROG_NAME="Налогоплательщик ЮЛ"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Подготовка документов для государственной регистрации (ППДГР)
########################################################################
export PROG_URL="https://www.nalog.gov.ru"
export AUTOINSTALL_EXE="${WH_TMP_DIR}/SetupPPDGR2.msi"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ppdgr2"

View File

@ -1,8 +1,11 @@
#!/usr/bin/env bash
# info_ru: SCAD Office — это программный комплекс для расчёта строительных конструкций, с дополнением Apache OpenOffice. Apache OpenOffice - пакет офисного программного обеспечения для обработки текстов, электронных таблиц, презентаций, графики, баз данных и многого другого.
########################################################################
export PROG_URL="https://scadoffice.ru"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="scadoffice"
export PROG_NAME="SCAD Office"
export PROG_ICON="scadoffice"
export BASE_PFX="scadaoffice_pfx_x64_v03"
export WH_WINDOWS_VER="10"
export WINEARCH="win64"
@ -65,14 +68,14 @@ if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; t
try_remove_file "$AUTOINSTALL_EXE"
# Определение всех программ, значков и исполняемых файлов
declare -a PROG_NAME=("Арбат" "Вест" "Глобальные настройки" "Декор" "Дискретная арматура" "Запрос" "Камин" "КоКон" "Комета" "Конструктор сечений" "Консул" "Конфигуратор лицензий" "Кристалл" "Кросс" "Куст" "Магнум" "Монолит" "Откос" "Пастернак" "Преобразование ед. измерений" "Cортамент металлопроката" "Расчет по формуле" "Редактор акселерограмм" "Редактор динамичности" "Редактор материалов" "Тонус" "Эквивалентное сечение" "SCAD++")
declare -a PROG_NAME_All=("Арбат" "Вест" "Глобальные настройки" "Декор" "Дискретная арматура" "Запрос" "Камин" "КоКон" "Комета" "Конструктор сечений" "Консул" "Конфигуратор лицензий" "Кристалл" "Кросс" "Куст" "Магнум" "Монолит" "Откос" "Пастернак" "Преобразование ед. измерений" "Cортамент металлопроката" "Расчет по формуле" "Редактор акселерограмм" "Редактор динамичности" "Редактор материалов" "Тонус" "Эквивалентное сечение" "SCAD++")
declare -a PROG_ICON=("arbat" "west" "globalsettings" "decor" "rebar" "underground" "comein" "cocon" "comet" "section" "consul" "configprotection" "kristall" "cross" "kust" "magnum" "monolit" "slope" "pasternak" "ucalc" "viewprof" "scalc" "acceledit" "betaedit" "materialsedit" "tonus" "sezam" "scadx")
declare -a PROG_ICON_ALL=("arbat" "west" "globalsettings" "decor" "rebar" "underground" "comein" "cocon" "comet" "section" "consul" "configprotection" "kristall" "cross" "kust" "magnum" "monolit" "slope" "pasternak" "ucalc" "viewprof" "scalc" "acceledit" "betaedit" "materialsedit" "tonus" "sezam" "scadx")
declare -a WIN_FILE_EXEC=("${DRIVE_C_SCADOFFICE}/Arbat.exe" "${DRIVE_C_SCADOFFICE}/West.exe" "${DRIVE_C_SCADOFFICE}/GlobalSettings.exe" "${DRIVE_C_SCADOFFICE}/Decor.exe" "${DRIVE_C_SCADOFFICE}/ReBar.exe" "${DRIVE_C_SCADOFFICE}/UnderGround.exe" "${DRIVE_C_SCADOFFICE}/ComeIn.exe" "${DRIVE_C_SCADOFFICE}/CoCon.exe" "${DRIVE_C_SCADOFFICE}/Comet2.exe" "${DRIVE_C_SCADOFFICE}/Section.exe" "${DRIVE_C_SCADOFFICE}/Consul.exe" "${DRIVE_C_SCADOFFICE}/ConfigProtection.exe" "${DRIVE_C_SCADOFFICE}/Kristall.exe" "${DRIVE_C_SCADOFFICE}/Cross.exe" "${DRIVE_C_SCADOFFICE}/Kust2.exe" "${DRIVE_C_SCADOFFICE}/Magnum.exe" "${DRIVE_C_SCADOFFICE}/Monolit.exe" "${DRIVE_C_SCADOFFICE}/Slope.exe" "${DRIVE_C_SCADOFFICE}/Pasternak.exe" "${DRIVE_C_SCADOFFICE}/UCalc.exe" "${DRIVE_C_SCADOFFICE}/ViewProf.exe" "${DRIVE_C_SCADOFFICE}/SCalc.exe" "${DRIVE_C_SCADOFFICE}/AccelEdit.exe" "${DRIVE_C_SCADOFFICE}/BetaEdit.exe" "${DRIVE_C_SCADOFFICE}/MaterialsEdit.exe" "${DRIVE_C_SCADOFFICE}/Tonus.exe" "${DRIVE_C_SCADOFFICE}/Sezam.exe" "${DRIVE_C_SCADOFFICE}/SCADX.exe")
# Цикл создания десктоп файлов для scad office
for i in "${!PROG_NAME[@]}"; do
create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}" "nocopy"
for i in "${!PROG_NAME_All[@]}"; do
create_desktop "${PROG_NAME_All[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON_ALL[i]}" "nocopy"
done
fi

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Справочник кодов обозначения налоговых органов для целей учета налогоплательщиков
########################################################################
export PROG_URL="https://www.nalog.gov.ru"
export AUTOINSTALL_EXE="${WH_TMP_DIR}/soun_ins.exe"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="soun"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: «Справки БК» — специальное программное обеспечение, предназначенное для заполнения справок о доходах, расходах, об имуществе и обязательствах имущественного характера.
########################################################################
export PROG_URL="https://spravki-bk.ru"
export WH_WINE_USE="wine-9.0.14-alt1-i586-spravkibk"
export WINEPREFIX="spravki-bk"
export PROG_NAME="СПО Справки БК"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Учебная версия. САПР, объединяющая в себе мощные параметрические возможности 2D и 3D-моделирования со средствами создания и оформления чертежей и конструкторской документации по ЕСКД.
########################################################################
export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX CAD Учебная Версия 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Профессиональная САПР, объединяющая в себе мощные параметрические возможности 2D и 3D-моделирования со средствами создания и оформления чертежей и конструкторской документации по ЕСКД.
########################################################################
export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX CAD 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"

View File

@ -1,6 +1,9 @@
#!/usr/bin/env bash
# info_ru: Приложения для T-FLEX CAD 17 (T-FLEX Анализ 17, T-FLEX Динамика 17, T-FLEX Зубчатые передачи 17, T-FLEX ЧПУ 17, T-FLEX Раскрой 17, T-FLEX Электротехника 17, T-FLEX VR 17, T-FLEX Печатные платы 17)
########################################################################
export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="Приложения для T-FLEX CAD 17"
export PROG_ICON="tflexcad"
export WH_WINDOWS_VER="10"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"

View File

@ -1,6 +1,9 @@
#!/usr/bin/env bash
# info_ru: Обучающие материалы, примеры, бесплатные библиотеки для T-FLEX CAD 17 (Учебное пособие 17, Стандартные элементы 17, Элементы уплотнительной техники 17, Станочные приспособления 17, Детали штампов листовой штамповки 17, Детали пресс-форм 17, Примеры 17)
########################################################################
export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="Ресурсы для T-FLEX CAD 17"
export PROG_ICON="tflexcad"
export WH_WINDOWS_VER="10"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"
export BASE_PFX="tflex17_pfx_x64_v02"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Профессиональная САПР, объединяющая в себе мощные параметрические возможности 2D и 3D-моделирования со средствами создания и оформления чертежей и конструкторской документации по ЕСКД.
########################################################################
export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX CAD 2D+ 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Система T-FLEX DOCs предназначена для комплексного управления инженерными данными предприятия, а также решения задач конструкторско-технологического и организационно-распорядительного документооборота.
########################################################################
export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX DOCs 17"
export PROG_ICON="tflexdoc"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Просмотр, печать и аннотирование документов T-FLEX CAD
########################################################################
export PROG_URL="https://www.tflexcad.ru"
export PROG_NAME="T-FLEX Viewer 17"
export PROG_ICON="tflexcad"
export WH_WINE_USE="wine_wh_tflex_10-9_amd64"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: Программа проверки файлов на соответствие форматам представления в электронном виде налоговых деклараций, бухгалтерской отчетности.
########################################################################
export PROG_URL="https://www.nalog.gov.ru"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export AUTOINSTALL_EXE="${WH_TMP_DIR}/tester2269.exe"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Электронный алфавитно-предметный указатель, предназначенный для быстрого и простого подбора для товара кода ТН ВЭД ЕАЭС.
########################################################################
export PROG_URL="https://ctm.ru"
export PROG_NAME="ВЭД-Алфавит"
export PROG_ICON="vedalf"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Программа для проверки ДТ и ДТС до представления их в таможенные органы и для внесения изменений в электронный вид документов.
########################################################################
export PROG_URL="https://ctm.ru"
export PROG_NAME="ВЭД-Контроль"
export PROG_ICON="vedcontrol"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Программа для формирования полного комплекта документов для таможенного оформления.
########################################################################
export PROG_URL="https://ctm.ru"
export PROG_NAME="ВЭД-Декларант"
export PROG_ICON="veddcl"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Уникальный электронный справочник по таможенному законодательству государств-членов Евразийского экономического союза, содержащий актуальную нормативно-правовую базу в сфере регулирования внешнеэкономической деятельности.
########################################################################
export PROG_URL="https://ctm.ru"
export PROG_NAME="ВЭД-Инфо"
export PROG_ICON="vedinfo"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Программа для расчета таможенных платежей и стоимости товаров после «таможенной очистки»
########################################################################
export PROG_URL="https://ctm.ru"
export PROG_NAME="ВЭД-Платежи"
export PROG_ICON="vedpayments"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,9 +1,9 @@
#!/usr/bin/env bash
# info_ru: Программа для формирования полного комплекта документов для таможенного оформления.
########################################################################
export PROG_URL="https://ctm.ru"
export PROG_NAME="ВЭД-Склад"
export PROG_ICON="vedsts"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="ved_ctm"
export BASE_PFX="ved_ctm_pfx_x86_v05"

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# info_ru: ZuluGIS 2021 Инженерные расчёты (Полный) 64-бит. Включает ZuluGIS, пакеты расчетов ZuluThermo, ZuluHydro, ZuluDrain, ZuluGaz, ZuluSteam, библиотеки ZuluXTools и ZuluNetTools. Дополнительно в состав пакета входит Microsoft SQL Server Express LocalDB 2012.
########################################################################
export PROG_URL="https://www.politerm.com"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export PROG_NAME="ZuluGIS 2021"
export WINEPREFIX="zulugis"

View File

@ -11,12 +11,13 @@ export WH_XDG_OPEN="log"
export INSTALL_DLL="corefonts d3dcompiler_47 dotnet48 vcrun2022 ucrtbase2019 msxml6 fontsmooth=rgb baekmuk droid eufonts ipamona liberation lucida opensymbol sourcehansans tahoma takao uff unifont vlgothic wenquanyi wenquanyizenhei"
export WH_USE_MESA_GL_OVERRIDE="1"
# Компоненты поддержки T-FLEX PLM 17 (Linux)
AUTOINSTALL_ZIP_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux.zip"
AUTOINSTALL_DIR_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux"
# Компоненты поддержки T-FLEX PLM (Linux)
GRDCONTROL_VER="4.3.0-0"
AUTOINSTALL_ZIP_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_Linux.zip"
AUTOINSTALL_DIR_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_Linux"
AUTOINSTALL_REG_LIN="$AUTOINSTALL_DIR_LIN/Components/fake_hasp.reg"
# Компоненты поддержки T-FLEX PLM 17 (Windows)
# Компоненты поддержки T-FLEX PLM (Windows)
AUTOINSTALL_ZIP_WIN="$WH_TMP_DIR/T-FLEX 17 Prerequisites.zip"
AUTOINSTALL_DIR_WIN="$WH_TMP_DIR/Компоненты поддержки T-FLEX 17"
AUTOINSTALL_EXE_WIN1="$AUTOINSTALL_DIR_WIN/Access Database Engine 2007/AccessDatabaseEngine.exe"
@ -26,28 +27,35 @@ AUTOINSTALL_EXE_WIN2="$AUTOINSTALL_DIR_WIN/TSC2/Setup_TSC2.msi"
prepair_wine
if [[ -d "$WINEPREFIX" ]] \
&& grep -q "t-flex-cad17-prepair" "$WINEPREFIX/winetricks.log" \
&& systemctl list-units --type service --state running | grep aksusbd \
&& systemctl list-units --type service --state running | grep hasplmd
&& grep -q "t-flex-cad" "$WINEPREFIX/winetricks.log" \
&& systemctl list-units --type service --state running | grep -q aksusbd \
&& systemctl list-units --type service --state running | grep -q hasplmd \
&& rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then
print_info "Префикс $PREFIX_NAME готов к установке ПО."
print_info "Сервисы: aksusbd и hasplmd уже запущены."
print_info "Сервисы: aksusbd и hasplmd уже запущены. grdcontrol-$GRDCONTROL_VER установлен."
else
print_warning "Службы aksusbd и hasplmd не запущены, или префикс не подготовлен"
print_info "Запускаем подготовку префикса скриптом: t-flex-cad17-prepair"
print_warning "Службы aksusbd и hasplmd не запущены, или grdcontrol-$GRDCONTROL_VER не установлен."
if [[ "$BASE_PFX" == "none" ]] \
|| ! systemctl list-units --type service --state running | grep aksusbd \
|| ! systemctl list-units --type service --state running | grep hasplmd
|| ! systemctl list-units --type service --state running | grep hasplmd \
|| ! rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then
# Компоненты поддержки T-FLEX PLM 17 (Linux)
if try_download "https://www.tflex.ru/downloads/Prerequisites_T-FLEX_17_Linux.zip" "${AUTOINSTALL_ZIP_LIN}" ; then
# Компоненты поддержки T-FLEX PLM (Linux)
if try_download "https://www.tflex.ru/downloads/Prerequisites_T-FLEX_Linux.zip" "${AUTOINSTALL_ZIP_LIN}" ; then
unpack "$AUTOINSTALL_ZIP_LIN" "$AUTOINSTALL_DIR_LIN"
"$WINELOADER" regedit "$AUTOINSTALL_REG_LIN"
fi
if rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then print_info "grdcontrol-$GRDCONTROL_VER уже установлен в системе."
else su_run "rpm -iv \"$AUTOINSTALL_DIR_LIN/Guardant_Linux/grdcontrol.x86_64.rpm\""
fi
if [[ "$BASE_PFX" == "none" ]] ; then
# Компоненты поддержки T-FLEX PLM 17 (Windows)
print_info "Запускаем подготовку префикса."
# Компоненты поддержки T-FLEX PLM (Windows)
if try_download "https://www.tflex.ru/downloads/T-FLEX%2017%20Prerequisites.zip" "${AUTOINSTALL_ZIP_WIN}" ; then
unpack "$AUTOINSTALL_ZIP_WIN" "$WH_TMP_DIR"
unpack "$AUTOINSTALL_EXE_WIN1" "$AUTOINSTALL_EXE_WIN_MSI"
@ -57,13 +65,18 @@ else
fi
rm -fR "$DRIVE_C/Program Files/Common Files/System"
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
cp -r "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/Program Files/Common Files/System" "$DRIVE_C/Program Files/Common Files"
cp -r "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/Program Files (x86)/Common Files/System" "$DRIVE_C/Program Files (x86)/Common Files"
mv -f "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/Windows/System32/"*.dll "$DRIVE_C/windows/system32"
"$WINELOADER" regedit "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/ado-32.reg"
"$WINELOADER"64 regedit "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/ado-64.reg"
"$WINELOADER" regedit "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/tflex.reg"
cp -r "$AUTOINSTALL_DIR_LIN/Components/Program Files/Common Files/System" \
"$DRIVE_C/Program Files/Common Files"
cp -r "$AUTOINSTALL_DIR_LIN/Components/Program Files (x86)/Common Files/System" \
"$DRIVE_C/Program Files (x86)/Common Files"
mv -f "$AUTOINSTALL_DIR_LIN/Components/Windows/System32/"*.dll \
"$DRIVE_C/windows/system32"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/ado-32.reg"
"$WINELOADER"64 regedit "$AUTOINSTALL_DIR_LIN/Components/ado-64.reg"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/tflex.reg"
fi
if systemctl list-units --type service --state running | grep aksusbd \
@ -72,15 +85,15 @@ else
print_info "Службы aksusbd и hasplmd уже запущены. Пропускаем..."
else
echo "#!/usr/bin/env bash
cd \"$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/HASP_Linux/aksusbd/\"
cd \"$AUTOINSTALL_DIR_LIN/HASP_Linux/aksusbd/\"
bash ./dinst
mv -f \"$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/HASP_Linux/\"*.so /var/hasplm/
systemctl restart hasplmd.service" > "$WH_TMP_DIR/tflex17_aksusbd.sh"
chmod +x $WH_TMP_DIR/tflex17_aksusbd.sh
mv -f \"$AUTOINSTALL_DIR_LIN/HASP_Linux/\"*.so /var/hasplm/
systemctl restart hasplmd.service" > "$WH_TMP_DIR/tflex_aksusbd.sh"
chmod +x "$WH_TMP_DIR/tflex_aksusbd.sh"
unset TFLEX_ERROR
print_info "Будут установлены и запущены службы aksusbd и hasplmd."
su_run "$WH_TMP_DIR/tflex17_aksusbd.sh" || TFLEX_ERROR=1
try_remove_file "$WH_TMP_DIR/tflex17_aksusbd.sh"
su_run "$WH_TMP_DIR/tflex_aksusbd.sh" || TFLEX_ERROR=1
try_remove_file "$WH_TMP_DIR/tflex_aksusbd.sh"
fi
fi
@ -90,7 +103,7 @@ else
if [[ $TFLEX_ERROR == "1" ]] ; then
fatal "Произошла ошибка во время подготовки префикса, или установки компонентов ПО."
else
echo "t-flex-cad17-prepair" >> "$WINEPREFIX/winetricks.log"
echo "t-flex-cad-prepair" >> "$WINEPREFIX/winetricks.log"
try_remove_file "$AUTOINSTALL_ZIP_LIN"
try_remove_file "$AUTOINSTALL_ZIP_WIN"
print_info "Подготовка префикса и установка компонентов завершены."

BIN
image/scadoffice.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash
# info_ru: автоматизация установки МИС Витакарта (AIS LPU Client)
# info_ru: Автоматизация установки МИС Витакарта (AIS LPU Client).
########################################################################
export WH_WINE_USE="wine_x_tkg_10-0_i586"
export WINEPREFIX="ais-lpu-client"

View File

@ -7,7 +7,7 @@ if [[ $(id -u) -eq 0 ]] ; then
fi
##### 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")"
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)"
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper.svg"
LICENSE_FILE="$(realpath "/usr/share/doc/winehelper"-*/LICENSE)"
AGREEMENT="$(realpath "/usr/share/doc/winehelper"-*/LICENSE_AGREEMENT)"
else
# переменные для тестового запуска WineHelper из репозитория
USER_WORK_PATH="$HOME/test-$SCRIPT_NAME"
@ -26,6 +27,7 @@ else
CHANGELOG_FILE="$DATA_PATH/CHANGELOG"
WH_ICON_PATH="$DATA_PATH/image/gui/winehelper-devel.svg"
LICENSE_FILE="$DATA_PATH/LICENSE"
AGREEMENT="$DATA_PATH/LICENSE_AGREEMENT"
# минимальная проверка синтаксиса скриптов
for self_check_script in "$RUN_SCRIPT" \
@ -180,13 +182,17 @@ fi
##### ROOT #####
su_run () {
local i="1"
while [[ $i -le "3" ]] ; do
print_info "Для продолжения установки введите root пароль (попытка $i из 3)..."
su - -c "$@" && return 0
((i++))
done
return 1
if [[ $WH_USE_GUI != "1" ]] ; then
local i="1"
while [[ $i -le "3" ]] ; do
print_info "Для продолжения установки введите root пароль (попытка $i из 3)..."
su - -c "$@" && return 0
((i++))
done
else
pkexec "$@" && return 0
fi
fatal "Не удалось установить необходимые компоненты!"
}
##### CHECK DEPENDENCIES #####
@ -363,20 +369,14 @@ print_license_agreement () {
then return 0
fi
if [[ -f "$AGREEMENT" ]]; then
echo
print_warning "$(cat "$AGREEMENT")"
else
fatal "Файл лицензионного соглашения не найден: $AGREEMENT"
fi
echo
print_warning "Лицензионные соглашения использования сторонних компонентов:
Некоторые компоненты, установленные в префикс и необходимые для запуска приложений, могут
быть защищены авторским правом или лицензионными соглашениями. Вы обязаны самостоятельно
убедиться в законности использования этих компонентов в вашей юрисдикции.
Мы не несём ответственности за нарушение лицензионных соглашений, связанное с использованием
подготовленного префикса, а так же за программное обеспечение поставляемого из сторонних источников.
Подтверждая продолжение установки, вы соглашаетесь что ознакомились с данным отказом от
ответственности и принимаете все риски, связанные с использованием программного обеспечения.
"
if print_confirmation "Подтвердите продолжение установки" ; then
touch "$license_agreement_file"
chmod 600 "$license_agreement_file"
@ -1568,12 +1568,13 @@ backup_prefix() {
export WINEPREFIX="$1"
check_prefix_var
local backup_base_dir="$(xdg-user-dir DESKTOP)"
local backup_archive_name="backup_${PREFIX_NAME}_$(date +%Y.%m.%d).whpack"
local backup_dest_path="$backup_base_dir/$backup_archive_name"
local temp_backup_dir="$WH_TMP_DIR/backup_${PREFIX_NAME}_$(date +%Y.%m.%d)"
local temp_prefix_dir="$temp_backup_dir/prefixes/$PREFIX_NAME"
local temp_users_dir="$temp_prefix_dir/drive_c/users"
local backup_base_dir backup_archive_name backup_dest_path temp_backup_dir temp_prefix_dir temp_users_dir
backup_base_dir="$(xdg-user-dir DESKTOP)"
backup_archive_name="backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S).whpack"
backup_dest_path="$backup_base_dir/$backup_archive_name"
temp_backup_dir="$WH_TMP_DIR/backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S)"
temp_prefix_dir="$temp_backup_dir/prefixes/$PREFIX_NAME"
temp_users_dir="$temp_prefix_dir/drive_c/users"
print_info "Начало резервного копирования префикса: $PREFIX_NAME"
create_new_dir "$temp_backup_dir"
@ -1617,9 +1618,11 @@ backup_prefix() {
fi
fi
# Сохраняем метаданные внутри временной директории
echo "$PREFIX_NAME" > "$temp_backup_dir/prefix_name.whmeta"
print_info "Создание squashfs архива..."
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd ; then
echo -e "\n# PREFIX_NAME=$PREFIX_NAME" >> "$backup_dest_path"
print_ok "Архив префикса $PREFIX_NAME успешно создан по пути:\n$backup_dest_path"
else
print_error "Не удалось создать архив префикса $PREFIX_NAME."
@ -1651,15 +1654,7 @@ restore_prefix() {
print_info "Восстановление из резервной копии: $backup_archive_path"
prefix_name="$(tail -n1 "$backup_archive_path" | sed -e 's/.*PREFIX_NAME=//')"
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
fatal "Префикс $prefix_name уже существует!
Удалите его, если действительно желаете восстановить префикс заново.
Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
fi
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)"
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)_$$"
create_new_dir "$temp_extract_dir"
print_info "Распаковка архива..."
@ -1670,9 +1665,32 @@ restore_prefix() {
fatal "Не удалось распаковать архив."
fi
if [[ -d "$temp_extract_dir/prefixes" ]] ; then
local prefix_name
prefix_name="$(ls -1 "$temp_extract_dir/prefixes")"
# Определяем имя префикса
if [[ -f "$temp_extract_dir/prefix_name.whmeta" ]]; then
prefix_name="$(cat "$temp_extract_dir/prefix_name.whmeta")"
try_remove_file "$temp_extract_dir/prefix_name.whmeta"
elif grep -q "PREFIX_NAME=" "$backup_archive_path" ; then
# Обратная совместимость со старыми бэкапами (с приписанной строкой)
prefix_name="$(tail -n1 "$backup_archive_path" | sed -e 's/.*PREFIX_NAME=//')"
elif [[ -d "$temp_extract_dir/prefixes" ]] && [[ $(find "$temp_extract_dir/prefixes" -mindepth 1 -maxdepth 1 -type d | wc -l) -eq 1 ]]; then
# Обратная совместимость со старыми бэкапами (по имени каталога)
prefix_name="$(basename "$(find "$temp_extract_dir/prefixes" -mindepth 1 -maxdepth 1 -type d)")"
else
try_remove_dir "$temp_extract_dir"
fatal "Не удалось определить имя префикса в архиве (метаданные не найдены)."
fi
if [[ -z "$prefix_name" ]]; then
try_remove_dir "$temp_extract_dir"
fatal "Не удалось определить имя префикса в архиве."
fi
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
try_remove_dir "$temp_extract_dir"
fatal "Префикс $prefix_name уже существует!\n Удалите его, если действительно желаете восстановить префикс заново.\n Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
fi
if [[ -d "$temp_extract_dir/prefixes/$prefix_name" ]] ; then
local prefix_dir="$temp_extract_dir/prefixes/$prefix_name"
print_info "Восстановление префикса: $prefix_name"
@ -1711,7 +1729,7 @@ restore_prefix() {
fi
else
try_remove_dir "$temp_extract_dir"
fatal "Директория prefixes не найдена в архиве."
fatal "Директория префикса '$prefix_name' не найдена в архиве."
fi
try_remove_dir "$temp_extract_dir"

9
winehelper.desktop Normal file
View File

@ -0,0 +1,9 @@
[Desktop Entry]
Name=WineHelper
Exec=winehelper gui %F
Comment=Launching the graphics interface for Winehelper
Comment[ru]=Запуск графического интерфейса WineHelper
Type=Application
Categories=WineHelper;Utility;Emulator;
StartupNotify=true
Icon=winehelper

View File

@ -2,8 +2,10 @@
import os
import subprocess
import sys
import re
import shlex
import shutil
import html
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLabel, QTabWidget,
QTextEdit, QFileDialog, QMessageBox, QLineEdit, QCheckBox, QStackedWidget, QScrollArea,
QGridLayout, QFrame, QDialog, QTextBrowser)
@ -20,6 +22,7 @@ class Var:
CHANGELOG_FILE = os.environ.get("CHANGELOG_FILE")
WH_ICON_PATH = os.environ.get("WH_ICON_PATH")
LICENSE_FILE = os.environ.get("LICENSE_FILE")
LICENSE_AGREEMENT_FILE = os.environ.get("AGREEMENT")
class WineHelperGUI(QMainWindow):
def __init__(self):
@ -56,14 +59,15 @@ class WineHelperGUI(QMainWindow):
)
# Стили для оберток кнопок (для рамки выделения)
self.FRAME_STYLE_DEFAULT = "QFrame { border: 2px solid transparent; border-radius: 2px; padding: 0px; }"
self.FRAME_STYLE_SELECTED = "QFrame { border: 2px solid #0078d7; border-radius: 2px; padding: 0px; }"
self.FRAME_STYLE_DEFAULT = "QFrame { border: 2px solid transparent; border-radius: 8px; padding: 0px; }"
self.FRAME_STYLE_SELECTED = "QFrame { border: 2px solid #0078d7; border-radius: 8px; padding: 0px; }"
# Основные переменные
self.winehelper_path = Var.RUN_SCRIPT
self.process = None
self.current_script = None
self.install_process = None
self.current_display_name = None
self.install_dialog = None
self.current_active_button = None
self.installed_buttons = []
@ -78,10 +82,15 @@ class WineHelperGUI(QMainWindow):
# Создаем табы
self.tabs = QTabWidget()
self.main_layout.addWidget(self.tabs, stretch=2)
self.main_layout.addWidget(self.tabs, stretch=1)
# Создаем панель информации о скрипте
self.create_info_panel()
self.main_layout.addWidget(self.info_panel, stretch=1)
# Фиксируем минимальные размеры
self.tabs.setMinimumWidth(520)
self.info_panel.setMinimumWidth(415)
# Вкладки
self.create_auto_install_tab()
@ -89,6 +98,9 @@ class WineHelperGUI(QMainWindow):
self.create_installed_tab()
self.create_help_tab()
# Инициализируем состояние, которое будет использоваться для логов
self._reset_log_state()
# Обновляем список установленных приложений
self.update_installed_apps()
@ -162,7 +174,7 @@ class WineHelperGUI(QMainWindow):
# Заголовок
self.script_title = QLabel("Выберите программу")
self.script_title.setFont(QFont('Arial', 14, QFont.Bold)) # Шрифт и размер шрифта в заголовке инф. панели
self.script_title.setFont(QFont('Arial', 12, QFont.Bold)) # Шрифт и размер шрифта в заголовке инф. панели
self.script_title.setAlignment(Qt.AlignCenter)
self.info_panel_layout.addWidget(self.script_title)
@ -198,7 +210,7 @@ class WineHelperGUI(QMainWindow):
install_action_layout = QVBoxLayout()
install_action_layout.setContentsMargins(0, 0, 0, 0)
self.install_button = QPushButton("Установить")
self.install_button.setFont(QFont('Arial', 13, QFont.Bold))
self.install_button.setFont(QFont('Arial', 12, QFont.Bold)) # Шрифт и размер шрифта в кнопке Установить
self.install_button.setStyleSheet("background-color: #4CAF50; color: white;")
self.install_button.clicked.connect(self.install_current_script)
install_action_layout.addWidget(self.install_button)
@ -249,8 +261,6 @@ class WineHelperGUI(QMainWindow):
self.installed_action_widget.setVisible(False)
self.installed_global_action_widget.setVisible(False)
self.main_layout.addWidget(self.info_panel, stretch=1)
def browse_install_file(self):
"""Открывает диалог выбора файла для ручной установки"""
file_path, _ = QFileDialog.getOpenFileName(
@ -604,7 +614,6 @@ class WineHelperGUI(QMainWindow):
# Подвкладка "Лицензия"
license_tab = QWidget()
license_layout = QVBoxLayout(license_tab)
import html
license_text = QTextBrowser()
license_text.setOpenExternalLinks(True)
@ -685,9 +694,12 @@ class WineHelperGUI(QMainWindow):
if self.current_active_button in self.installed_buttons:
self.current_active_button = None
# Очистить существующие кнопки
for btn in self.installed_buttons:
btn.deleteLater()
# Полностью очищаем layout перед обновлением, удаляя старые виджеты (рамки с кнопками)
while self.installed_scroll_layout.count():
item = self.installed_scroll_layout.takeAt(0)
widget = item.widget()
if widget:
widget.deleteLater()
self.installed_buttons.clear()
if not os.path.exists(Var.USER_WORK_PATH):
@ -833,6 +845,11 @@ class WineHelperGUI(QMainWindow):
print(f"Error getting prefix name from {desktop_file}: {e}")
return None
def _get_current_app_title(self):
"""Возвращает отображаемое имя для текущей выбранной программы."""
# Если display_name не установлено (например, при ошибке), используем имя скрипта
return self.current_display_name or self.current_script
def backup_prefix_for_app(self):
"""Создает резервную копию префикса для выбранного приложения."""
prefix_name = self._get_prefix_name_for_selected_app()
@ -1206,6 +1223,7 @@ class WineHelperGUI(QMainWindow):
prog_name = self.extract_prog_name_from_script(script_path)
prog_url = self.extract_prog_url_from_script(script_path)
display_name = prog_name if prog_name else script_name
self.current_display_name = display_name
if icon_names:
# Для заголовка используем первую иконку из списка
@ -1228,7 +1246,7 @@ class WineHelperGUI(QMainWindow):
self.install_action_widget.setVisible(True)
self.installed_action_widget.setVisible(False)
self.installed_global_action_widget.setVisible(False)
self.install_button.setText(f"Установить {display_name}")
self.install_button.setText(f"Установить «{display_name}»")
def install_current_script(self):
"""Устанавливает текущий выбранный скрипт"""
@ -1242,7 +1260,8 @@ class WineHelperGUI(QMainWindow):
# Создаем диалоговое окно установки
self.install_dialog = QDialog(self)
self.install_dialog.setWindowTitle(f"Установка {self.current_script}")
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)
@ -1255,38 +1274,32 @@ class WineHelperGUI(QMainWindow):
license_page = QWidget()
license_layout = QVBoxLayout(license_page)
license_text = QTextEdit()
license_text.setReadOnly(True)
license_found = False
# Получаем текст лицензии из скрипта winehelper
script_path = os.path.join(Var.DATA_PATH, "winehelper")
license_content = ""
license_text = QTextBrowser()
# Получаем текст лицензионного соглашения из файла
try:
with open(script_path, 'r', encoding='utf-8') as f:
capturing = False
for line in f:
if 'print_warning "Лицензионные соглашения использования сторонних компонентов:' in line:
capturing = True
continue
license_file_path = Var.LICENSE_AGREEMENT_FILE
if not license_file_path or not os.path.exists(license_file_path):
raise FileNotFoundError
if capturing:
if 'Подтверждая продолжение установки' in line:
break
# Очищаем строку от лишних символов
clean_line = line.strip()
clean_line = clean_line.replace('print_warning "', '').replace('\\n', '\n')
clean_line = clean_line.rstrip('"')
license_content += clean_line + '\n'
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"""
<h3>Лицензионные соглашения использования сторонних компонентов:</h3>
<p>{license_content}</p>
<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("""
print(f"Ошибка чтения файла лицензии: {str(e)}")
license_text.setHtml(f"""
<h3>Лицензионные соглашения</h3>
<p>Не удалось загрузить текст лицензионного соглашения.</p>
<p>Произошла ошибка при чтении файла лицензии:<br>{str(e)}</p>
""")
license_layout.addWidget(license_text)
@ -1333,12 +1346,21 @@ class WineHelperGUI(QMainWindow):
lambda state: self.btn_continue.setEnabled(state == Qt.Checked)
)
if not license_found:
self.license_checkbox.setEnabled(False)
self.install_dialog.show()
def _reset_log_state(self):
"""Сбрасывает состояние буфера и флага прогресса для лога установки."""
self.output_buffer = ""
self.last_line_was_progress = False
def _prepare_installation(self):
"""Подготавливает и запускает процесс установки"""
self.stacked_widget.setCurrentIndex(1)
self._reset_log_state() # Сбрасываем состояние для обработки лога
winehelper_path = self.winehelper_path
script_path = os.path.join(Var.DATA_PATH,
"autoinstall" if self.current_script in self.autoinstall_scripts else "manualinstall",
@ -1377,7 +1399,8 @@ class WineHelperGUI(QMainWindow):
if install_file:
args.append(install_file)
self.append_log(f"=== Начало установки {self.current_script} ===")
title_name = self._get_current_app_title()
self.append_log(f"=== Начало установки «{title_name}» ===")
self.append_log(f"Исполняемый файл: {winehelper_path}")
self.append_log(f"Аргументы: {' '.join(shlex.quote(a) for a in args)}")
@ -1385,40 +1408,106 @@ class WineHelperGUI(QMainWindow):
self.install_process.start(winehelper_path, args)
if not self.install_process.waitForStarted(3000):
raise RuntimeError("Не удалось запустить процесс установки")
self.append_log("Процесс установки успешно запущен...")
self.append_log("Процесс установки запущен...")
except Exception as e:
self.append_log(f"\n=== ОШИБКА: {str(e)} ===", is_error=True)
QMessageBox.critical(self.install_dialog, "Ошибка", f"Не удалось запустить установку:\n{str(e)}")
self.cleanup_process()
def append_log(self, text, is_error=False):
def append_log(self, text, is_error=False, add_newline=True):
"""Добавляет сообщение в лог"""
if not hasattr(self, 'log_output'): return
cursor = self.log_output.textCursor()
cursor.movePosition(QTextCursor.End)
if is_error:
# Для ошибок всегда добавляем перенос строки для лучшей читаемости
cursor.insertHtml(f'<font color="red">{text}</font><br>')
else:
cursor.insertText(f"{text}\n")
# Вставляем текст. Добавляем перенос строки, если нужно.
formatted_text = f"{text}\n" if add_newline else text
cursor.insertText(formatted_text)
self.log_output.ensureCursorVisible()
QApplication.processEvents()
def _process_log_line(self, line_with_delimiter):
"""Обрабатывает одну строку лога, управляя заменой строк прогресса."""
is_progress_line = '\r' in line_with_delimiter
# Фильтруем "мусорные" строки прогресса (например, '-=O=-' от wget),
# обрабатывая только те, что содержат знак процента.
if is_progress_line:
if not re.search(r'\d\s*%', line_with_delimiter):
return # Игнорируем строку прогресса без процентов
clean_line = line_with_delimiter.replace('\r', '').replace('\n', '').strip()
if not clean_line:
return
cursor = self.log_output.textCursor()
# Если новая строка - это прогресс, и предыдущая тоже была прогрессом,
# то мы удаляем старую, чтобы заменить ее новой.
if is_progress_line and self.last_line_was_progress:
cursor.movePosition(QTextCursor.End)
cursor.select(QTextCursor.LineUnderCursor)
cursor.removeSelectedText()
elif not is_progress_line and self.last_line_was_progress:
# Это переход от строки прогресса к финальной строке.
# Вместо добавления переноса, мы заменяем предыдущую строку новой.
cursor.movePosition(QTextCursor.End)
cursor.select(QTextCursor.LineUnderCursor)
cursor.removeSelectedText()
# Добавляем новую очищенную строку.
# Для прогресса - без переноса строки, для обычных строк - с переносом.
self.append_log(clean_line, add_newline=not is_progress_line)
self.last_line_was_progress = is_progress_line
def handle_process_output(self):
"""Обрабатывает вывод процесса"""
output = self.install_process.readAllStandardOutput().data().decode('utf-8', errors='ignore').strip()
if output:
self.append_log(output)
"""Обрабатывает вывод процесса, корректно отображая однострочный прогресс."""
new_data = self.install_process.readAllStandardOutput().data().decode('utf-8', errors='ignore')
self.output_buffer += new_data
while True:
# Ищем ближайший разделитель (\n или \r)
idx_n = self.output_buffer.find('\n')
idx_r = self.output_buffer.find('\r')
if idx_n == -1 and idx_r == -1:
break # Нет полных строк для обработки
split_idx = min(idx for idx in [idx_n, idx_r] if idx != -1)
# Получаем строку, включая разделитель
line = self.output_buffer[:split_idx + 1]
self.output_buffer = self.output_buffer[split_idx + 1:]
self._process_log_line(line)
def handle_process_finished(self, exit_code, exit_status):
"""Обрабатывает завершение процесса"""
# Обрабатываем остаток в буфере, если он есть
if self.output_buffer:
self._process_log_line(self.output_buffer)
# Если последней строкой был прогресс, "завершаем" его переносом строки.
if self.last_line_was_progress:
cursor = self.log_output.textCursor()
cursor.movePosition(QTextCursor.End)
cursor.insertText("\n")
self._reset_log_state()
if exit_code == 0 and exit_status == QProcess.NormalExit:
self.append_log("\n=== Установка успешно завершена ===")
# Создаем кастомный диалог, чтобы кнопка была на русском
success_box = QMessageBox(self.install_dialog)
success_box.setWindowTitle("Успех")
success_box.setText(f"Программа {self.current_script} установлена успешно!")
title_name = self._get_current_app_title()
success_box.setText(f"Программа «{title_name}» установлена успешно!")
success_box.setIcon(QMessageBox.Information)
success_box.addButton("Готово", QMessageBox.AcceptRole)
success_box.exec_()