Compare commits
20 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
9f994a8cc3 | ||
|
463306d0cf | ||
|
940cface08 | ||
|
48d870979f | ||
|
cbe535b878 | ||
|
fd3442888d | ||
|
7321542477 | ||
|
477f44a11e | ||
|
4f9821450a | ||
|
f858746064 | ||
|
1123c018eb | ||
|
998eff3263 | ||
|
4aebb722ca | ||
|
4672dcd4e1 | ||
|
e174b034df | ||
|
3100475b1e | ||
|
148a7dbfce | ||
|
5c01220382 | ||
|
b74fe77bad | ||
|
3a442f6288 |
39
autoinstall/arm-kt-att
Normal file
39
autoinstall/arm-kt-att
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Программа “АРМ КТ ПРОФ АТТЕСТАТ” для документов об основном общем, среднем общем образовании.
|
||||
########################################################################
|
||||
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-4"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="arm-kt"
|
||||
export PROG_NAME="АРМ КТ ПРОФ АТТЕСТАТ"
|
||||
export PROG_ICON="armkt"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL=""
|
||||
export WH_WINDOWS_VER="7"
|
||||
|
||||
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||
|
||||
if [[ -z $VER_EXE ]]
|
||||
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||
fi
|
||||
|
||||
prepair_wine
|
||||
|
||||
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||
try_remove_file "$AUTOINSTALL_ZIP"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
create_desktop "$PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||
|
||||
create_desktop "Регистрация $PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||
fi
|
39
autoinstall/arm-kt-dpp
Normal file
39
autoinstall/arm-kt-dpp
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Программа “АРМ КТ ПРОФ ДПП” для заполнения бланков документов о повышении квалификации и профессиональной переподготовке.
|
||||
########################################################################
|
||||
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="arm-kt"
|
||||
export PROG_NAME="АРМ КТ ПРОФ ДПП"
|
||||
export PROG_ICON="armkt"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL=""
|
||||
export WH_WINDOWS_VER="7"
|
||||
|
||||
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||
|
||||
if [[ -z $VER_EXE ]]
|
||||
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||
fi
|
||||
|
||||
prepair_wine
|
||||
|
||||
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||
try_remove_file "$AUTOINSTALL_ZIP"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
create_desktop "$PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||
|
||||
create_desktop "Регистрация $PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||
fi
|
35
autoinstall/arm-kt-es
Normal file
35
autoinstall/arm-kt-es
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Программа “АРМ КТ ПРОФ НШ” для заполнения бланков документов об окончании начальной школы.
|
||||
########################################################################
|
||||
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-1"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="arm-kt"
|
||||
export PROG_NAME="АРМ КТ ПРОФ НШ"
|
||||
export PROG_ICON="armkt"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL=""
|
||||
export WH_WINDOWS_VER="7"
|
||||
|
||||
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.exe" | awk -F'"' '{print $2}')
|
||||
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||
|
||||
if [[ -z $VER_EXE ]]
|
||||
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||
fi
|
||||
|
||||
prepair_wine
|
||||
|
||||
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_EXE" ; then
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
create_desktop "$PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||
|
||||
create_desktop "Регистрация $PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||
fi
|
39
autoinstall/arm-kt-med
Normal file
39
autoinstall/arm-kt-med
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Программа “АРМ КТ ПРОФ МЕД” для заполнения бланков документов о послевузовском профессиональном образовании и сертификатов специалиста.
|
||||
######################################################
|
||||
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-3"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="arm-kt"
|
||||
export PROG_NAME="АРМ КТ ПРОФ МЕД"
|
||||
export PROG_ICON="armkt"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL=""
|
||||
export WH_WINDOWS_VER="7"
|
||||
|
||||
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||
|
||||
if [[ -z $VER_EXE ]]
|
||||
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||
fi
|
||||
|
||||
prepair_wine
|
||||
|
||||
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||
try_remove_file "$AUTOINSTALL_ZIP"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
create_desktop "$PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||
|
||||
create_desktop "Регистрация $PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||
fi
|
39
autoinstall/arm-kt-prof
Normal file
39
autoinstall/arm-kt-prof
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Программа “АРМ КТ ПРОФ ПРОФЕССИЯ” для заполнения бланков документов профессионального обучения.
|
||||
########################################################################
|
||||
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-5"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="arm-kt"
|
||||
export PROG_NAME="АРМ КТ ПРОФ ПРОФЕССИЯ"
|
||||
export PROG_ICON="armkt"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL=""
|
||||
export WH_WINDOWS_VER="7"
|
||||
|
||||
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||
|
||||
if [[ -z $VER_EXE ]]
|
||||
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||
fi
|
||||
|
||||
prepair_wine
|
||||
|
||||
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||
try_remove_file "$AUTOINSTALL_ZIP"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
create_desktop "$PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||
|
||||
create_desktop "Регистрация $PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||
fi
|
39
autoinstall/arm-kt-spo
Normal file
39
autoinstall/arm-kt-spo
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Программа “АРМ КТ ПРОФ СПО” для заполнения бланков документов о среднем профессиональном образовании.
|
||||
########################################################################
|
||||
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-2"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="arm-kt"
|
||||
export PROG_NAME="АРМ КТ ПРОФ СПО"
|
||||
export PROG_ICON="armkt"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL=""
|
||||
export WH_WINDOWS_VER="7"
|
||||
|
||||
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||
|
||||
if [[ -z $VER_EXE ]]
|
||||
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||
fi
|
||||
|
||||
prepair_wine
|
||||
|
||||
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||
try_remove_file "$AUTOINSTALL_ZIP"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
create_desktop "$PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||
|
||||
create_desktop "Регистрация $PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||
fi
|
39
autoinstall/arm-kt-vuz
Normal file
39
autoinstall/arm-kt-vuz
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Программа “АРМ КТ ПРОФ ВУЗ” для заполнения бланков документов о высшем образовании.
|
||||
########################################################################
|
||||
export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-6"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="arm-kt"
|
||||
export PROG_NAME="АРМ КТ ПРОФ ВУЗ"
|
||||
export PROG_ICON="armkt"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL=""
|
||||
export WH_WINDOWS_VER="7"
|
||||
|
||||
AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}')
|
||||
SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}')
|
||||
VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||
AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe"
|
||||
|
||||
if [[ -z $VER_EXE ]]
|
||||
then fatal "Не удалось получить версию ПО со страницы на сайте!"
|
||||
else print_info "Устанавливаем $PROG_NAME версии $VER_EXE"
|
||||
fi
|
||||
|
||||
prepair_wine
|
||||
|
||||
if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then
|
||||
unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}"
|
||||
try_remove_file "$AUTOINSTALL_ZIP"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
create_desktop "$PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON"
|
||||
|
||||
create_desktop "Регистрация $PROG_NAME" \
|
||||
"$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON"
|
||||
fi
|
BIN
image/armkt.png
Normal file
BIN
image/armkt.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
27
winehelper
27
winehelper
@@ -617,6 +617,7 @@ create_desktop () {
|
||||
echo "StartupNotify=true"
|
||||
echo "Path=$DATA_PATH"
|
||||
echo "Icon=$icon_file"
|
||||
echo "StartupWMClass=$(basename "$exe_file")"
|
||||
} > "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||
chmod +x "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||
|
||||
@@ -652,7 +653,7 @@ create_desktop () {
|
||||
[Desktop Entry]
|
||||
Type=Directory
|
||||
Name=WineHelper
|
||||
Icon=wine
|
||||
Icon=winehelper
|
||||
EOF
|
||||
fi
|
||||
|
||||
@@ -1355,8 +1356,6 @@ init_database () {
|
||||
}
|
||||
|
||||
prepair_wine () {
|
||||
var_winedlloverride_update "winemenubuilder.exe=d"
|
||||
|
||||
if [[ -n "$INSTALL_SCRIPT_NAME" ]]
|
||||
then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME"
|
||||
else init_database
|
||||
@@ -1390,9 +1389,9 @@ wine_run () {
|
||||
echo "##### Лог WINE #####" | tee -a "$LOG_FILE"
|
||||
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$LOG_FILE"
|
||||
else
|
||||
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS
|
||||
exec $MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS
|
||||
fi
|
||||
wait_wineserver
|
||||
# wait_wineserver
|
||||
}
|
||||
|
||||
wine_run_install () {
|
||||
@@ -2127,6 +2126,19 @@ select_component_version() {
|
||||
done
|
||||
}
|
||||
|
||||
run_install_to_prefix() {
|
||||
export WINEPREFIX="$1"
|
||||
local WIN_FILE_EXEC="$2"
|
||||
|
||||
if [[ -z "$WINEPREFIX" ]] || [[ -z "$WIN_FILE_EXEC" ]]; then
|
||||
fatal "Использование: $SCRIPT_NAME install-to-prefix <имя_префикса> <путь_к_установщику>"
|
||||
fi
|
||||
|
||||
check_prefix_var
|
||||
prepair_wine
|
||||
wine_run_install "$WIN_FILE_EXEC"
|
||||
}
|
||||
|
||||
run_install_dxvk() {
|
||||
local version="$1"
|
||||
if [[ -z "$version" ]] ; then
|
||||
@@ -2243,6 +2255,10 @@ else
|
||||
arg1="--help"
|
||||
fi
|
||||
|
||||
# отключаем создание .desktop файлов средствами wine
|
||||
# и отключаем winebth, так как может сломать winedevice.exe
|
||||
var_winedlloverride_update "winemenubuilder.exe,winebth.sys=d"
|
||||
|
||||
case "$arg1" in
|
||||
--version|version) rpm -qi "$SCRIPT_NAME" ; exit 0 ;;
|
||||
--help|help) wh_info ; exit 0 ;;
|
||||
@@ -2255,6 +2271,7 @@ case "$arg1" in
|
||||
winetricks) prepair_wine ; "$WH_WINETRICKS" -q "$@" ;;
|
||||
desktop) create_desktop "$@" ; exit 0 ;;
|
||||
install|-i) run_autoinstall "$@" ;;
|
||||
install-to-prefix) run_install_to_prefix "$@" ;;
|
||||
install-dxvk) run_install_dxvk "$@" ;;
|
||||
install-vkd3d) run_install_vkd3d "$@" ;;
|
||||
change-wine) run_change_wine_version "$@" ;;
|
||||
|
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Name=WineHelper
|
||||
Exec=winehelper gui %F
|
||||
@@ -7,3 +8,4 @@ Type=Application
|
||||
Categories=WineHelper;Utility;Emulator;
|
||||
StartupNotify=true
|
||||
Icon=winehelper
|
||||
StartupWMClass=winehelper
|
||||
|
@@ -474,10 +474,9 @@ class WinetricksManagerDialog(QDialog):
|
||||
self.log_output.setText(self.INFO_TEXT)
|
||||
main_layout.addWidget(self.log_output)
|
||||
|
||||
# Кнопки управления
|
||||
# Кнопки управления, выровненные по правому краю
|
||||
button_layout = QHBoxLayout()
|
||||
self.status_label = QLabel("Загрузка компонентов...")
|
||||
button_layout.addWidget(self.status_label, 1)
|
||||
button_layout.addStretch(1)
|
||||
|
||||
self.apply_button = QPushButton("Применить")
|
||||
self.apply_button.setEnabled(False)
|
||||
@@ -548,7 +547,6 @@ class WinetricksManagerDialog(QDialog):
|
||||
def load_all_categories(self):
|
||||
"""Запускает загрузку всех категорий."""
|
||||
self.loading_count = len(self.categories)
|
||||
self.category_statuses = {name: "загрузка..." for name in self.categories.keys()}
|
||||
for internal_name in self.categories.values():
|
||||
self._start_load_process(internal_name)
|
||||
|
||||
@@ -602,13 +600,6 @@ class WinetricksManagerDialog(QDialog):
|
||||
process.finished.connect(partial(self._on_load_finished, category))
|
||||
process.start(self.winetricks_path, [category, "list"])
|
||||
|
||||
def _update_status_label(self):
|
||||
"""Обновляет текстовую метку состояния загрузки."""
|
||||
status_parts = []
|
||||
for name, status in self.category_statuses.items():
|
||||
status_parts.append(f"{name}: {status}")
|
||||
self.status_label.setText(" | ".join(status_parts))
|
||||
|
||||
def _parse_winetricks_log(self):
|
||||
"""Читает winetricks.log и возвращает множество установленных компонентов."""
|
||||
installed_verbs = set()
|
||||
@@ -681,22 +672,15 @@ class WinetricksManagerDialog(QDialog):
|
||||
|
||||
if exit_code != 0 or exit_status != QProcess.NormalExit:
|
||||
error_string = process.errorString() if process else "N/A"
|
||||
self._log(f"--- Ошибка загрузки категории '{category}' (код: {exit_code}) ---", "red")
|
||||
self.category_statuses[category_display_name] = "ошибка"
|
||||
self._update_status_label() # Показываем ошибку в статусе
|
||||
self._log(f"--- Ошибка загрузки категории '{category_display_name}' (код: {exit_code}) ---", "red")
|
||||
if exit_status == QProcess.CrashExit:
|
||||
self._log("--- Процесс winetricks завершился аварийно. ---", "red")
|
||||
# По умолчанию используется "Неизвестная ошибка", которая не очень полезна.
|
||||
if error_string != "Неизвестная ошибка":
|
||||
self._log(f"--- Системная ошибка: {error_string} ---", "red")
|
||||
self._log(output if output.strip() else "Winetricks не вернул вывод. Проверьте, что он работает корректно.")
|
||||
self._log("--------------------------------------------------", "red")
|
||||
else:
|
||||
self.category_statuses[category_display_name] = "готово"
|
||||
installed_verbs = self._parse_winetricks_log()
|
||||
# Обновляем статус только если это была сетевая загрузка
|
||||
if from_cache is None:
|
||||
self._update_status_label()
|
||||
found_items = self._parse_winetricks_list_output(output, installed_verbs, list_widget)
|
||||
|
||||
if from_cache is None: # Только если мы не читали из кэша
|
||||
@@ -721,7 +705,6 @@ class WinetricksManagerDialog(QDialog):
|
||||
|
||||
self.loading_count -= 1
|
||||
if self.loading_count == 0:
|
||||
self.status_label.setText("Готово.")
|
||||
self._update_ui_state()
|
||||
|
||||
def _on_item_changed(self, item):
|
||||
@@ -862,11 +845,6 @@ class WinetricksManagerDialog(QDialog):
|
||||
|
||||
# 3. Обрабатываем успех
|
||||
self._log("\n=== Все операции успешно завершены ===")
|
||||
self._show_message_box("Успех",
|
||||
"Операции с компонентами были успешно выполнены.",
|
||||
QMessageBox.Information,
|
||||
{"buttons": {"Да": QMessageBox.AcceptRole}})
|
||||
|
||||
self.apply_button.setEnabled(True)
|
||||
self.reinstall_button.setEnabled(False) # Сбрасываем в неактивное состояние
|
||||
self.close_button.setEnabled(True)
|
||||
@@ -876,7 +854,6 @@ class WinetricksManagerDialog(QDialog):
|
||||
search_edit.clear()
|
||||
|
||||
# Перезагружаем данные, чтобы обновить состояние
|
||||
self.status_label.setText("Обновление данных...")
|
||||
self.initial_states.clear()
|
||||
self.load_all_categories()
|
||||
self.installation_finished = True
|
||||
@@ -1571,6 +1548,12 @@ class WineHelperGUI(QMainWindow):
|
||||
|
||||
# Загружаем состояние после создания всех виджетов
|
||||
self._load_created_prefixes()
|
||||
# После загрузки выбираем первый элемент, если он доступен
|
||||
if self.created_prefix_selector.count() > 0:
|
||||
self.created_prefix_selector.setCurrentIndex(0)
|
||||
else:
|
||||
# Если список пуст, сбрасываем панель управления
|
||||
self.on_created_prefix_selected(-1)
|
||||
|
||||
# Инициализируем состояние, которое будет использоваться для логов
|
||||
self._reset_log_state()
|
||||
@@ -2136,61 +2119,49 @@ class WineHelperGUI(QMainWindow):
|
||||
self.vkd3d_manage_button.setToolTip("Установка или удаление определенной версии vkd3d-proton в префиксе.")
|
||||
management_layout.addWidget(self.vkd3d_manage_button, 5, 1)
|
||||
|
||||
# --- Правая сторона: Информационный блок ---
|
||||
# --- Правая сторона: Информационный блок и кнопки установки ---
|
||||
right_column_widget = QWidget()
|
||||
right_column_layout = QVBoxLayout(right_column_widget)
|
||||
right_column_layout.setContentsMargins(0, 0, 0, 0)
|
||||
right_column_layout.setSpacing(10)
|
||||
|
||||
self.prefix_info_display = QTextBrowser()
|
||||
self.prefix_info_display.setReadOnly(True)
|
||||
self.prefix_info_display.setFrameStyle(QFrame.StyledPanel)
|
||||
# Увеличиваем rowspan, чтобы охватить все строки с кнопками
|
||||
management_layout.addWidget(self.prefix_info_display, 0, 2, 6, 1)
|
||||
|
||||
management_layout.setColumnStretch(0, 1)
|
||||
management_layout.setColumnStretch(1, 1)
|
||||
management_layout.setColumnStretch(2, 2)
|
||||
|
||||
separator = QFrame()
|
||||
separator.setFrameShape(QFrame.HLine)
|
||||
separator.setFrameShadow(QFrame.Sunken)
|
||||
management_layout.addWidget(separator, 6, 0, 1, 3)
|
||||
right_column_layout.addWidget(self.prefix_info_display)
|
||||
|
||||
install_group = QWidget()
|
||||
install_layout = QVBoxLayout(install_group)
|
||||
install_layout.setContentsMargins(0, 5, 0, 0)
|
||||
install_layout.setContentsMargins(0, 0, 0, 0)
|
||||
install_layout.setSpacing(5)
|
||||
|
||||
install_path_layout = QHBoxLayout()
|
||||
self.prefix_install_path_edit = QLineEdit()
|
||||
self.prefix_install_path_edit.setPlaceholderText("Укажите путь к установочному файлу .exe или .msi...")
|
||||
install_path_layout.addWidget(self.prefix_install_path_edit)
|
||||
|
||||
self.prefix_browse_button = QPushButton("Обзор...")
|
||||
self.prefix_browse_button.clicked.connect(self.browse_for_prefix_installer)
|
||||
install_path_layout.addWidget(self.prefix_browse_button)
|
||||
install_layout.addLayout(install_path_layout)
|
||||
|
||||
# Layout для кнопок установки и создания ярлыка
|
||||
action_buttons_layout = QHBoxLayout()
|
||||
|
||||
self.prefix_install_button = QPushButton("Установить приложение в префикс")
|
||||
self.prefix_install_button.setEnabled(False)
|
||||
self.prefix_install_button.clicked.connect(self.run_prefix_installer)
|
||||
action_buttons_layout.addWidget(self.prefix_install_button)
|
||||
self.prefix_install_button.clicked.connect(self.browse_and_run_prefix_installer)
|
||||
install_layout.addWidget(self.prefix_install_button)
|
||||
|
||||
self.create_launcher_button = QPushButton("Создать ярлык для приложения в префиксе")
|
||||
self.create_launcher_button.setToolTip(
|
||||
"Создает ярлык в меню и на вкладке 'Установленные' для .exe файла внутри префикса.")
|
||||
self.create_launcher_button.clicked.connect(self.create_launcher_for_prefix)
|
||||
self.create_launcher_button.setEnabled(False) # Изначально неактивна
|
||||
action_buttons_layout.addWidget(self.create_launcher_button)
|
||||
install_layout.addLayout(action_buttons_layout)
|
||||
management_layout.addWidget(install_group, 7, 0, 1, 3)
|
||||
install_layout.addWidget(self.create_launcher_button)
|
||||
right_column_layout.addWidget(install_group)
|
||||
|
||||
right_column_layout.setStretch(0, 1) # Информационное окно растягивается
|
||||
right_column_layout.setStretch(1, 0) # Группа кнопок не растягивается
|
||||
|
||||
management_layout.addWidget(right_column_widget, 0, 2, 6, 1)
|
||||
|
||||
management_layout.setColumnStretch(0, 1)
|
||||
management_layout.setColumnStretch(1, 1)
|
||||
management_layout.setColumnStretch(2, 2)
|
||||
|
||||
container_layout.addWidget(self.prefix_management_groupbox)
|
||||
layout.addWidget(self.management_container_groupbox)
|
||||
layout.addStretch()
|
||||
self.add_tab(self.prefix_tab, "Менеджер префиксов")
|
||||
|
||||
self.prefix_install_path_edit.textChanged.connect(self.update_prefix_install_button_state)
|
||||
|
||||
def _get_current_prefixes(self):
|
||||
"""Возвращает множество имен существующих префиксов."""
|
||||
prefixes_root_path = os.path.join(Var.USER_WORK_PATH, "prefixes")
|
||||
@@ -2212,7 +2183,7 @@ class WineHelperGUI(QMainWindow):
|
||||
self.created_prefix_selector.removeItem(index_to_remove)
|
||||
|
||||
def _load_created_prefixes(self):
|
||||
"""Загружает список созданных префиксов, сканируя файловую систему, и восстанавливает последнее выбранное состояние."""
|
||||
"""Загружает и обновляет список созданных префиксов в выпадающем списке."""
|
||||
prefixes_root_path = os.path.join(Var.USER_WORK_PATH, "prefixes")
|
||||
if not os.path.isdir(prefixes_root_path):
|
||||
self.management_container_groupbox.setVisible(False)
|
||||
@@ -2240,13 +2211,6 @@ class WineHelperGUI(QMainWindow):
|
||||
|
||||
self.management_container_groupbox.setVisible(True)
|
||||
|
||||
# По умолчанию выбираем первый элемент в списке, если он есть.
|
||||
if self.created_prefix_selector.count() > 0:
|
||||
self.created_prefix_selector.setCurrentIndex(0)
|
||||
else:
|
||||
# Если список пуст, убедимся, что панель управления сброшена.
|
||||
self.on_created_prefix_selected(-1)
|
||||
|
||||
def on_created_prefix_selected(self, index):
|
||||
"""Обрабатывает выбор префикса из выпадающего списка."""
|
||||
if index == -1:
|
||||
@@ -2323,7 +2287,6 @@ class WineHelperGUI(QMainWindow):
|
||||
# Успешное удаление, обновляем GUI
|
||||
self._remove_prefix_from_gui_state(prefix_name)
|
||||
self.update_installed_apps()
|
||||
QMessageBox.information(self, "Успех", f"Префикс '{prefix_name}' и все связанные с ним данные были успешно удалены.")
|
||||
else:
|
||||
QMessageBox.critical(self, "Ошибка удаления", f"Не удалось удалить префикс '{prefix_name}'.\nПодробности смотрите в логе.")
|
||||
|
||||
@@ -2332,18 +2295,16 @@ class WineHelperGUI(QMainWindow):
|
||||
is_prefix_selected = bool(prefix_name)
|
||||
self.prefix_management_groupbox.setEnabled(is_prefix_selected)
|
||||
self.create_launcher_button.setEnabled(is_prefix_selected)
|
||||
self.prefix_install_button.setEnabled(is_prefix_selected)
|
||||
|
||||
if is_prefix_selected:
|
||||
self.update_prefix_info_display(prefix_name)
|
||||
else:
|
||||
self.prefix_info_display.clear()
|
||||
self.prefix_install_path_edit.clear()
|
||||
# Сбрасываем состояние кнопок, когда префикс не выбран
|
||||
self.esync_button.setChecked(False)
|
||||
self.fsync_button.setChecked(False)
|
||||
|
||||
self.update_prefix_install_button_state()
|
||||
|
||||
def update_prefix_info_display(self, prefix_name):
|
||||
"""Обновляет информационный блок для созданного префикса, читая данные из last.conf."""
|
||||
if not prefix_name:
|
||||
@@ -2423,8 +2384,13 @@ class WineHelperGUI(QMainWindow):
|
||||
html_content += "</p>"
|
||||
self.prefix_info_display.setHtml(html_content)
|
||||
|
||||
def browse_for_prefix_installer(self):
|
||||
"""Открывает диалог выбора файла для установки в созданный префикс."""
|
||||
def browse_and_run_prefix_installer(self):
|
||||
"""Открывает диалог выбора файла и запускает установку в созданный префикс."""
|
||||
prefix_name = self.current_managed_prefix_name
|
||||
if not prefix_name:
|
||||
QMessageBox.warning(self, "Ошибка", "Сначала выберите префикс для установки.")
|
||||
return
|
||||
|
||||
file_path, _ = QFileDialog.getOpenFileName(
|
||||
self,
|
||||
"Выберите установочный файл",
|
||||
@@ -2432,18 +2398,11 @@ class WineHelperGUI(QMainWindow):
|
||||
"Исполняемые файлы (*.exe *.msi);;Все файлы (*)"
|
||||
)
|
||||
if file_path:
|
||||
self.prefix_install_path_edit.setText(file_path)
|
||||
self.run_prefix_installer(file_path)
|
||||
|
||||
def update_prefix_install_button_state(self):
|
||||
"""Обновляет состояние кнопки установки в префикс."""
|
||||
path_ok = bool(self.prefix_install_path_edit.text().strip())
|
||||
prefix_selected = self.current_managed_prefix_name is not None
|
||||
self.prefix_install_button.setEnabled(path_ok and prefix_selected)
|
||||
|
||||
def run_prefix_installer(self):
|
||||
"""Запускает установку файла в выбранный префикс."""
|
||||
def run_prefix_installer(self, installer_path):
|
||||
"""Запускает установку файла в выбранный префикс через скрипт winehelper."""
|
||||
prefix_name = self.current_managed_prefix_name
|
||||
installer_path = self.prefix_install_path_edit.text().strip()
|
||||
|
||||
if not prefix_name:
|
||||
QMessageBox.warning(self, "Ошибка", "Не выбран префикс для установки.")
|
||||
@@ -2452,9 +2411,6 @@ class WineHelperGUI(QMainWindow):
|
||||
QMessageBox.warning(self, "Ошибка", "Указан неверный путь к установочному файлу.")
|
||||
return
|
||||
|
||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||
wine_executable = self._get_wine_executable_for_prefix(prefix_name)
|
||||
|
||||
self.command_dialog = QDialog(self)
|
||||
self.command_dialog.setWindowTitle(f"Установка в префикс: {prefix_name}")
|
||||
self.command_dialog.setMinimumSize(750, 400)
|
||||
@@ -2478,13 +2434,12 @@ class WineHelperGUI(QMainWindow):
|
||||
self.command_process.readyReadStandardOutput.connect(self._handle_command_output)
|
||||
self.command_process.finished.connect(self._handle_prefix_install_finished)
|
||||
|
||||
env = QProcessEnvironment.systemEnvironment()
|
||||
env.insert("WINEPREFIX", prefix_path)
|
||||
self.command_process.setProcessEnvironment(env)
|
||||
# Окружение полностью настраивается скриптом winehelper
|
||||
self.command_process.setProcessEnvironment(QProcessEnvironment.systemEnvironment())
|
||||
|
||||
args = [installer_path]
|
||||
self.command_log_output.append(f"Запуск установки: {shlex.quote(wine_executable)} {shlex.quote(installer_path)}")
|
||||
self.command_process.start(wine_executable, args)
|
||||
args = ["install-to-prefix", prefix_name, installer_path]
|
||||
self.command_log_output.append(f"Выполнение: {shlex.quote(self.winehelper_path)} {' '.join(shlex.quote(a) for a in args)}")
|
||||
self.command_process.start(self.winehelper_path, args)
|
||||
self.command_dialog.exec_()
|
||||
|
||||
def _get_prefix_component_version(self, prefix_name, component_key):
|
||||
@@ -2992,10 +2947,6 @@ class WineHelperGUI(QMainWindow):
|
||||
if not self.management_container_groupbox.isVisible():
|
||||
self.management_container_groupbox.setVisible(True)
|
||||
|
||||
QMessageBox.information(self, "Успех",
|
||||
f"Префикс '{prefix_name}' успешно создан.\n"
|
||||
"Теперь вы можете управлять им, выбрав его из выпадающего списка.")
|
||||
|
||||
def update_installed_apps(self):
|
||||
"""Обновляет список установленных приложений в виде кнопок"""
|
||||
# Если активная кнопка находится в списке удаляемых, сбрасываем ее
|
||||
@@ -3064,7 +3015,6 @@ class WineHelperGUI(QMainWindow):
|
||||
self.command_process.deleteLater()
|
||||
self.command_process = None
|
||||
self.command_close_button.setEnabled(True)
|
||||
self.prefix_install_path_edit.clear()
|
||||
self.update_installed_apps()
|
||||
|
||||
def _set_active_button(self, button_widget):
|
||||
@@ -3085,11 +3035,13 @@ class WineHelperGUI(QMainWindow):
|
||||
def show_installed_app_info(self, desktop_path, button_widget):
|
||||
"""Показывает информацию об установленном приложении в правой панели."""
|
||||
self._set_active_button(button_widget)
|
||||
# Очищаем поле поиска и принудительно обновляем список, чтобы показать все приложения
|
||||
self.installed_search_edit.blockSignals(True)
|
||||
self.installed_search_edit.clear()
|
||||
self.installed_search_edit.blockSignals(False)
|
||||
self.filter_installed_buttons()
|
||||
# Если в поиске был текст, очищаем его и перерисовываем список.
|
||||
# Это предотвращает "прыжок", если список не был отфильтрован.
|
||||
if self.installed_search_edit.text():
|
||||
self.installed_search_edit.blockSignals(True)
|
||||
self.installed_search_edit.clear()
|
||||
self.installed_search_edit.blockSignals(False)
|
||||
self.filter_installed_buttons()
|
||||
|
||||
# Прокручиваем к выбранному элементу
|
||||
frame = button_widget.parent()
|
||||
@@ -3539,7 +3491,7 @@ class WineHelperGUI(QMainWindow):
|
||||
QMessageBox.critical(self, "Ошибка", f"Не удалось модифицировать команду для отладки: {e}")
|
||||
return
|
||||
|
||||
process = QProcess(self)
|
||||
process = QProcess()
|
||||
env = QProcessEnvironment.systemEnvironment()
|
||||
|
||||
cmd_start_index = 0
|
||||
@@ -3557,7 +3509,10 @@ class WineHelperGUI(QMainWindow):
|
||||
arguments = clean_command[cmd_start_index + 1:]
|
||||
|
||||
process.setProcessEnvironment(env)
|
||||
process.finished.connect(lambda: self._on_app_process_finished(desktop_path))
|
||||
# Используем functools.partial для надежной передачи аргументов
|
||||
# и избегания проблем с замыканием в lambda.
|
||||
process.finished.connect(partial(self._on_app_process_finished, desktop_path))
|
||||
|
||||
|
||||
try:
|
||||
process.start(program, arguments)
|
||||
@@ -3576,6 +3531,36 @@ class WineHelperGUI(QMainWindow):
|
||||
QMessageBox.critical(self, "Ошибка",
|
||||
f"Не удалось обработать команду запуска:\n{command_str}\n\nОшибка: {str(e)}")
|
||||
|
||||
def closeEvent(self, event):
|
||||
"""Обрабатывает событие закрытия главного окна."""
|
||||
if self.running_apps:
|
||||
msg_box = QMessageBox(self)
|
||||
msg_box.setWindowTitle('Подтверждение выхода')
|
||||
msg_box.setTextFormat(Qt.RichText)
|
||||
msg_box.setText('<font color="red">Все запущенные приложения будут закрыты вместе с WineHelper.</font><br><br>'
|
||||
"Вы уверены, что хотите выйти?")
|
||||
msg_box.setIcon(QMessageBox.Question)
|
||||
|
||||
yes_button = msg_box.addButton("Да", QMessageBox.YesRole)
|
||||
no_button = msg_box.addButton("Нет", QMessageBox.NoRole)
|
||||
msg_box.setDefaultButton(no_button)
|
||||
|
||||
msg_box.exec_()
|
||||
|
||||
if msg_box.clickedButton() == yes_button:
|
||||
# Корректно завершаем все дочерние процессы
|
||||
for desktop_path, process in list(self.running_apps.items()):
|
||||
if process.state() == QProcess.Running:
|
||||
print(f"Завершение процесса для {desktop_path}...")
|
||||
process.terminate()
|
||||
if not process.waitForFinished(2000): # Ждем 2 сек
|
||||
process.kill() # Если не закрылся, убиваем
|
||||
event.accept()
|
||||
else:
|
||||
event.ignore()
|
||||
else:
|
||||
super().closeEvent(event)
|
||||
|
||||
def uninstall_app(self):
|
||||
"""Удаляет выбранное установленное приложение и его префикс"""
|
||||
if not self.current_selected_app or 'desktop_path' not in self.current_selected_app:
|
||||
@@ -3759,11 +3744,14 @@ class WineHelperGUI(QMainWindow):
|
||||
search_edit = tab_data['search_edit']
|
||||
scroll_area = tab_data['scroll_area']
|
||||
|
||||
# Общая логика: очищаем поиск, обновляем список и прокручиваем к элементу
|
||||
search_edit.blockSignals(True)
|
||||
search_edit.clear()
|
||||
search_edit.blockSignals(False)
|
||||
self.filter_buttons(tab_type)
|
||||
# Если в поиске был текст, очищаем его и перерисовываем список.
|
||||
# Это предотвращает "прыжок", если список не был отфильтрован.
|
||||
if search_edit.text():
|
||||
search_edit.blockSignals(True)
|
||||
search_edit.clear()
|
||||
search_edit.blockSignals(False)
|
||||
self.filter_buttons(tab_type)
|
||||
|
||||
frame = button_widget.parent()
|
||||
if isinstance(frame, QFrame):
|
||||
QTimer.singleShot(0, lambda: scroll_area.ensureWidgetVisible(frame))
|
||||
@@ -4111,26 +4099,19 @@ class WineHelperGUI(QMainWindow):
|
||||
self._load_created_prefixes()
|
||||
|
||||
new_prefix_name = None
|
||||
selected_new = False
|
||||
if new_prefixes:
|
||||
# Обычно создается один префикс, берем первый из найденных
|
||||
# Обычно создается один префикс, берем первый из найденных.
|
||||
new_prefix_name = new_prefixes.pop()
|
||||
# Находим и выбираем его в выпадающем списке
|
||||
# Находим и выбираем его в выпадающем списке.
|
||||
index = self.created_prefix_selector.findText(new_prefix_name)
|
||||
if index != -1:
|
||||
self.created_prefix_selector.setCurrentIndex(index)
|
||||
# --- Конец обновления списка префиксов ---
|
||||
selected_new = True
|
||||
|
||||
# Создаем кастомный диалог, чтобы кнопка была на русском
|
||||
success_box = QMessageBox(self.install_dialog)
|
||||
success_box.setWindowTitle("Успех")
|
||||
title_name = self._get_current_app_title()
|
||||
success_text = f"Программа «{title_name}» установлена успешно!"
|
||||
if new_prefix_name:
|
||||
success_text += f"\n\nНовый префикс '{new_prefix_name}' был автоматически выбран в списке управления на вкладке 'Менеджер префиксов'."
|
||||
success_box.setText(success_text)
|
||||
success_box.setIcon(QMessageBox.Information)
|
||||
success_box.addButton("Готово", QMessageBox.AcceptRole)
|
||||
success_box.exec_()
|
||||
if not selected_new and self.created_prefix_selector.count() > 0:
|
||||
self.created_prefix_selector.setCurrentIndex(0)
|
||||
# --- Конец обновления списка префиксов ---
|
||||
|
||||
self.update_installed_apps()
|
||||
|
||||
@@ -4231,7 +4212,6 @@ class WineHelperGUI(QMainWindow):
|
||||
"""Обрабатывает завершение создания ярлыка."""
|
||||
self._handle_command_finished(exit_code, exit_status)
|
||||
if exit_code == 0:
|
||||
QMessageBox.information(self, "Успех", "Ярлык успешно создан.")
|
||||
self.update_installed_apps()
|
||||
# Переключаемся на вкладку "Установленные"
|
||||
for i in range(self.tab_bar.count()):
|
||||
|
Reference in New Issue
Block a user