Compare commits

..

8 Commits

3 changed files with 238 additions and 231 deletions

View File

@ -1,5 +1,10 @@
История изменений: История изменений:
0.4.0:
* добавлена автоматическая установка и настройка wine-cpcsp_proxy при
использовании переменной WH_USE_CPCSP_PROXY=1
* подготовка функций для создания бэкапов префикса
0.3.9: 0.3.9:
* обновлен скрипт установки scadoffice * обновлен скрипт установки scadoffice
* добавлена автоустановка: * добавлена автоустановка:
@ -8,7 +13,8 @@
* добавлена возможность удаления префикса * добавлена возможность удаления префикса
0.3.8: 0.3.8:
* добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux приложении * добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux
приложении с помощью перемененной. Пример: WH_XDG_OPEN="rtf txt doc"
* добавлен выбор префикса, если переменная WINEPREFIX не объявлена * добавлен выбор префикса, если переменная WINEPREFIX не объявлена
* добавлено сохранение последней конфигурации использования префикса * добавлено сохранение последней конфигурации использования префикса
* добавлено сохранение скписка создаваемых ярлыков для приложений * добавлено сохранение скписка создаваемых ярлыков для приложений

View File

@ -3,6 +3,7 @@
3571c40a787f0386e0160b5d471b1bf11fa2a235b497156cd38198b90bcb4a9f wine_x_tkg_10-0_i586.tar.xz 3571c40a787f0386e0160b5d471b1bf11fa2a235b497156cd38198b90bcb4a9f wine_x_tkg_10-0_i586.tar.xz
71d6fdfd23d7988471d345c68e81699b8af931352b03dd216424b398f63c7b12 wine_x_tkg_10-0_amd64.tar.xz 71d6fdfd23d7988471d345c68e81699b8af931352b03dd216424b398f63c7b12 wine_x_tkg_10-0_amd64.tar.xz
fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 wine-9.0.14-alt1-i586-spravkibk.tar.xz fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 wine-9.0.14-alt1-i586-spravkibk.tar.xz
e0a84bb4908c3927954d7eef6b8ac7212e442b8c107d000c6890fec340f96183 wine-9.0.14-alt1-amd64.tar.xz
6f86d2220b65b709bf88c6f829a4998de3b929cc2091cd1333a51c32e1491b79 wine-9.0.9-alt1-i586.tar.xz 6f86d2220b65b709bf88c6f829a4998de3b929cc2091cd1333a51c32e1491b79 wine-9.0.9-alt1-i586.tar.xz
##### DXVK ##### ##### DXVK #####

View File

@ -12,21 +12,41 @@ print_warning () { printf "\E[33m%s Предупреждение: $@ %s\e[0m\n"
print_info () { printf "\E[36m%s Информация: \"$@\" %s\e[0m\n" ;} print_info () { printf "\E[36m%s Информация: \"$@\" %s\e[0m\n" ;}
print_ok () { printf "\E[35m%s Успех: $@ %s\e[0m\n" ;} print_ok () { printf "\E[35m%s Успех: $@ %s\e[0m\n" ;}
print_var () { for vp in $@ ; do echo "${vp}=${!vp}" ; done ;} print_var () { for vp in $@ ; do echo "${vp}=${!vp}" ; done ;}
fatal () { print_error "$@" ; exit 1 ;} fatal () {
print_error "$@"
[[ -n "$WINESERVER" ]] && "$WINESERVER" -w
exit 1
}
##### CHECK VARIABLES ##### ##### CHECK VARIABLES #####
check_variables () { [[ -z ${!1} ]] && export $1="$2" ;} check_variables () { [[ -z ${!1} ]] && export $1="$2" ;}
##### CHECK DEBUG ##### ##### CHECK DEBUG #####
if [[ "$1" == "--debug" ]] ; then if [[ "$1" == "--debug" ]] ; then
export DEBUG="full" check_variables WINEDEBUG "+loaddll,+seh"
export LOG_FILE="$HOME/winehelper.log" export DXVK_LOG_LEVEL="error"
export VKD3D_DEBUG "error"
export WINE_MONO_TRACE "E:System.NotImplementedException"
export VK_LOADER_DEBUG "error"
export VKBASALT_LOG_LEVEL "error"
export DXVK_NVAPI_LOG_LEVEL "error"
shift shift
print_warning "Включен режим подробного логирования работы WINE." else
check_variables WINEDEBUG "-all"
check_variables DXVK_LOG_LEVEL "none"
check_variables VKD3D_SHADER_DEBUG "none"
check_variables VKD3D_DEBUG "none"
check_variables DXVK_LOG_PATH "none"
check_variables VKBASALT_LOG_LEVEL "none"
check_variables DXVK_NVAPI_LOG_LEVEL "none"
fi
if [[ $WINEDEBUG != "-all" ]] ; then
export LOG_FILE="$HOME/winehelper.log"
date > "$LOG_FILE"
print_warning "Включен режим логирования работы WINE."
print_warning "Лог будет сохранен по пути: $LOG_FILE" print_warning "Лог будет сохранен по пути: $LOG_FILE"
sleep 3 sleep 3
else
check_variables DEBUG "0"
fi fi
##### WINETRICKS VERSION ##### ##### WINETRICKS VERSION #####
@ -299,9 +319,9 @@ var_winedlloverride_update () {
fi fi
} }
var_vkd3d_config_update () { var_dxvk_config_update () {
if [[ -n "${DXVK_CONFIG}" ]] if [[ -n "${DXVK_CONFIG}" ]]
then export DXVK_CONFIG="${1}; ${DXVK_CONFIG}" then export DXVK_CONFIG="${1};${DXVK_CONFIG}"
else export DXVK_CONFIG="${1}" else export DXVK_CONFIG="${1}"
fi fi
} }
@ -380,12 +400,19 @@ create_desktop () {
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/" cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
# добавляем информацию о приложении в "$WINEPREFIX/desktop.list" if [[ "$RESTORE_FROM_BACKUP" == "1" ]]; then
if [[ -f "$WINEPREFIX/desktop.list" ]] \ print_info "Пропускаем обновление desktop.list (режим восстановления из бэкапа)"
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list" else
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list" # добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
if [[ -f "$WINEPREFIX/desktop.list" ]] \
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
fi
create_new_dir "$WINEPREFIX/icons"
try_copy_file "$icon_file" "$WINEPREFIX/icons/"
echo "$name_desktop=${exe_file//$WINEPREFIX/}=$(basename "$icon_file")" >> "$WINEPREFIX/desktop.list"
fi fi
echo "$name_desktop=${exe_file//$WINEPREFIX/}" >> "$WINEPREFIX/desktop.list"
# создаем файл категории для меню # создаем файл категории для меню
create_new_dir "$HOME/.local/share/desktop-directories" create_new_dir "$HOME/.local/share/desktop-directories"
@ -673,27 +700,6 @@ init_wine_ver () {
export WINESERVER="wineserver" export WINESERVER="wineserver"
fi fi
check_variables DXVK_LOG_LEVEL "none"
check_variables VKD3D_SHADER_DEBUG "none"
check_variables VKD3D_DEBUG "none"
check_variables DXVK_LOG_PATH "none"
check_variables VKBASALT_LOG_LEVEL "none"
check_variables DXVK_NVAPI_LOG_LEVEL "none"
if [[ $DEBUG == "0" ]] ; then
check_variables WINEDEBUG "-all"
elif [[ $DEBUG == "full" ]] ; then
check_variables WINEDEBUG "+loaddll,+seh"
export DXVK_LOG_LEVEL="error"
export VKD3D_DEBUG "error"
export WINE_MONO_TRACE "E:System.NotImplementedException"
export VK_LOADER_DEBUG "error"
export VKBASALT_LOG_LEVEL "error"
export DXVK_NVAPI_LOG_LEVEL "error"
else
check_variables WINEDEBUG "err+all"
fi
print_info "Используется версия wine: $WH_WINE_USE" print_info "Используется версия wine: $WH_WINE_USE"
} }
@ -977,13 +983,27 @@ init_wineprefix () {
else cpcsp_proxy_cmd=("${WINELOADER}64" "cpcsp_proxy_setup.exe") else cpcsp_proxy_cmd=("${WINELOADER}64" "cpcsp_proxy_setup.exe")
fi fi
print_info "Запускаем настройку cpcsp_proxy:" print_info "Запускаем настройку cpcsp_proxy..."
echo "${cpcsp_proxy_cmd[*]}" unset CPCSP_PROXY_OK
if "${cpcsp_proxy_cmd[@]}" set -o pipefail
then print_info "Настройка cpcsp_proxy успешно завершена." for ((i=2; i < 6; i++)) ; do
else fatal "Ошибка во время настройки cpcsp_proxy." "${cpcsp_proxy_cmd[@]}" | tee "$WINEPREFIX/cpcsp_setup.log"
fi local CPCSP_EXIT_STATUS="${PIPESTATUS[0]}"
if grep -q "failed to load /opt/cprocsp/" "$WINEPREFIX/cpcsp_setup.log" ; then
fatal "Проверьте правильность установки CryptoPro в системе.\n Инструкция: https://www.altlinux.org/CryptoPro"
fi
if [[ $CPCSP_EXIT_STATUS == "0" ]] ; then
print_info "Настройка cpcsp_proxy успешно завершена."
CPCSP_PROXY_OK="1"
break
fi
print_warning "Попытка $i из 5..."
wait_wineserver
done
wait_wineserver wait_wineserver
try_remove_file "$WINEPREFIX/cpcsp_setup.log"
[[ $CPCSP_PROXY_OK != "1" ]] && fatal "Ошибка во время настройки cpcsp_proxy."
fi fi
fi fi
@ -1021,10 +1041,6 @@ use_winetricks () {
USE_WT_FROM_DB=0 USE_WT_FROM_DB=0
[[ ! -f "$WINEPREFIX/winetricks.log" ]] && touch "$WINEPREFIX/winetricks.log" [[ ! -f "$WINEPREFIX/winetricks.log" ]] && touch "$WINEPREFIX/winetricks.log"
for need_install_dll_to_pfx in $WH_DLL_INSTALL "isolate_home" ; do for need_install_dll_to_pfx in $WH_DLL_INSTALL "isolate_home" ; do
if [[ "$need_install_dll_to_pfx" == vcrun201[5-9] ]] ; then
sed -i "/${need_install_dll_to_pfx}/d" "$WINEPREFIX/winetricks.log"
need_install_dll_to_pfx="vcrun2022"
fi
if ! grep "$need_install_dll_to_pfx" "$WINEPREFIX/winetricks.log" &>/dev/null ; then if ! grep "$need_install_dll_to_pfx" "$WINEPREFIX/winetricks.log" &>/dev/null ; then
if [[ -z "$WH_DLL_NEED_INSTALL" ]] if [[ -z "$WH_DLL_NEED_INSTALL" ]]
then WH_DLL_NEED_INSTALL="$need_install_dll_to_pfx" then WH_DLL_NEED_INSTALL="$need_install_dll_to_pfx"
@ -1123,13 +1139,15 @@ wine_run () {
WIN_FILE_PATH="$(dirname "$WIN_FILE_EXEC")" WIN_FILE_PATH="$(dirname "$WIN_FILE_EXEC")"
[[ -d "$WIN_FILE_PATH" ]] && cd "$WIN_FILE_PATH" [[ -d "$WIN_FILE_PATH" ]] && cd "$WIN_FILE_PATH"
if [[ $DEBUG == "0" ]] ; then if [[ -n $LOG_FILE ]] && [[ -f "$LOG_FILE" ]] ; then
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS echo "##### Основные переменные #####" | tee -a "$LOG_FILE"
else env | grep -e "WH_" -e "WINE" -e "DXVK" -e "VKD3D" | tee -a "$LOG_FILE"
print_var WH_WINE_USE WINEARCH WINEPREFIX WINEDLLOVERRIDES WH_WINDOWS_VER | tee "$LOG_FILE"
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$LOG_FILE"
fi
echo "##### Лог WINE #####" | tee -a "$LOG_FILE"
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$LOG_FILE"
else
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS
fi
wait_wineserver wait_wineserver
} }
@ -1193,183 +1211,6 @@ run_autoinstall () {
echo echo
} }
backup_prefix() {
local prefix_name="$1"
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
local backup_base_dir="$(xdg-user-dir DESKTOP)"
local timestamp
timestamp=$(date +%Y.%m.%d)
local backup_archive_name="backup_${prefix_name}_${timestamp}.whpack"
local backup_dest_path="$backup_base_dir/$backup_archive_name"
local temp_backup_dir="$WH_TMP_DIR/backup_${prefix_name}_${timestamp}"
if [[ -z "$prefix_name" ]]; then
print_error "Не указано имя префикса для резервного копирования."
echo "Использование: $SCRIPT_NAME backup-prefix [имя_префикса]"
echo "Доступные префиксы:"
ls -1 "$WH_PREFIXES_DIR"
return 1
fi
if [[ ! -d "$prefix_path" ]]; then
print_error "Префикс \"$prefix_name\" не найден по пути $prefix_path."
return 1
fi
print_info "Начало резервного копирования префикса: $prefix_name"
create_new_dir "$backup_base_dir"
try_remove_dir "$temp_backup_dir"
create_new_dir "$temp_backup_dir"
# создание файла с информацией о бэкапе
local backup_info_file="$temp_backup_dir/backup_info.txt"
{
echo "Информация о резервном копировании"
echo "------------------"
echo "Имя префикса: $prefix_name"
echo "Дата копирования: $(date)"
echo "Исходный путь префикса: $prefix_path"
echo ""
echo "Содержимое $prefix_name/last.conf:"
if [[ -f "$prefix_path/last.conf" ]]; then
cat "$prefix_path/last.conf"
else
echo " - $prefix_path/last.conf не найдено."
fi
echo "------------------"
} > "$backup_info_file"
# копирование префикса во временную директорию
print_info "Подготовка префикса к упаковке..."
if cp -a "$prefix_path" "$temp_backup_dir/${prefix_name}"; then
print_ok "Директория префикса подготовлена."
else
print_error "Не удалось подготовить директорию префикса."
try_remove_dir "$temp_backup_dir"
return 1
fi
# упаковка префикса с помощью mksquashfs
print_info "Создание squashfs архива..."
if command -v mksquashfs >/dev/null; then
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd; then
print_ok "Архив успешно создан: $backup_dest_path"
else
print_error "Не удалось создать архив."
try_remove_dir "$temp_backup_dir"
return 1
fi
else
print_error "mksquashfs не установлен. Необходимо установить squashfs-tools."
try_remove_dir "$temp_backup_dir"
return 1
fi
try_remove_dir "$temp_backup_dir"
print_info "Резервное копирование завершено."
return 0
}
restore_prefix() {
local backup_archive_path="$1"
local new_prefix_name="$2"
local temp_extract_dir
local original_prefix_name_from_info
local new_prefix_path
if [[ -z "$backup_archive_path" ]]; then
read -e -p "Укажите путь к архиву резервной копии (.whpack): " backup_archive_path
if [[ -z "$backup_archive_path" ]]; then
print_error "Путь к архиву не указан. Восстановление отменено."
return 1
fi
fi
backup_archive_path=$(echo "$backup_archive_path" | sed "s/'//g; s/\"//g")
if [[ ! -f "$backup_archive_path" ]]; then
print_error "Файл архива не найден: $backup_archive_path"
return 1
fi
print_info "Восстановление из резервной копии: $backup_archive_path"
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)_$(date +%s)"
create_new_dir "$temp_extract_dir"
print_info "Распаковка архива..."
if ! unsquashfs -f -d "$temp_extract_dir" "$backup_archive_path"; then
print_error "Не удалось распаковать архив."
try_remove_dir "$temp_extract_dir"
return 1
fi
local backup_info_file="$temp_extract_dir/backup_info.txt"
if [[ ! -f "$backup_info_file" ]]; then
print_error "Файл backup_info.txt не найден в архиве."
try_remove_dir "$temp_extract_dir"
return 1
fi
original_prefix_name_from_info=$(grep "Имя префикса:" "$backup_info_file" | cut -d':' -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
if [[ -z "$original_prefix_name_from_info" ]]; then
print_error "Не удалось определить имя оригинального префикса."
try_remove_dir "$temp_extract_dir"
return 1
fi
[[ -z "$new_prefix_name" ]] && new_prefix_name="$original_prefix_name_from_info"
new_prefix_path="$WH_PREFIXES_DIR/$new_prefix_name"
if [[ -d "$new_prefix_path" ]]; then
read -p "Префикс \"$new_prefix_name\" уже существует. Перезаписать? (y/N): " answer
if [[ ! "$answer" =~ ^[YyДд]$ ]]; then
print_info "Восстановление отменено."
try_remove_dir "$temp_extract_dir"
return 0
fi
try_remove_dir "$new_prefix_path"
fi
# восстановление префикса
local extracted_prefix_dir="$temp_extract_dir/$original_prefix_name_from_info"
if [[ ! -d "$extracted_prefix_dir" ]]; then
print_error "Директория префикса не найдена в архиве."
try_remove_dir "$temp_extract_dir"
return 1
fi
print_info "Восстановление директории префикса..."
if mv "$extracted_prefix_dir" "$new_prefix_path"; then
print_ok "Директория префикса восстановлена."
else
print_error "Не удалось восстановить директорию префикса."
try_remove_dir "$temp_extract_dir"
return 1
fi
# восстановление ярлыков из desktop.list
if [[ -f "$new_prefix_path/desktop.list" ]]; then
print_info "Восстановление ярлыков из desktop.list..."
while IFS='=' read -r name_desktop relative_exe_path || [[ -n "$name_desktop" ]]; do
relative_exe_path=$(echo "$relative_exe_path" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
if [[ -n "$relative_exe_path" ]]; then
local full_exe_path="$new_prefix_path/$relative_exe_path"
if [[ -f "$full_exe_path" ]]; then
local png_name="$(basename "$full_exe_path" .exe | tr '[:upper:]' '[:lower:]')"
create_desktop "$name_desktop" "$full_exe_path" "$png_name"
else
print_warning "Файл $full_exe_path не найден, пропускаем создание ярлыка"
fi
fi
done < "$new_prefix_path/desktop.list"
fi
try_remove_dir "$temp_extract_dir"
print_ok "Восстановление префикса \"$new_prefix_name\" завершено."
return 0
}
remove_prefix() { remove_prefix() {
local prefix_name="$1" local prefix_name="$1"
local prefix_path="$WH_PREFIXES_DIR/$prefix_name" local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
@ -1477,6 +1318,165 @@ remove_winehelper () {
fi fi
} }
backup_prefix() {
local prefix_name="$1"
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
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)"
if [[ -z "$prefix_name" ]]; then
print_error "Не указано имя префикса для резервного копирования."
echo "Использование: $SCRIPT_NAME backup-prefix [имя_префикса]"
echo "Доступные префиксы:"
ls -1 "$WH_PREFIXES_DIR"
return 1
fi
if [[ ! -d "$prefix_path" ]]; then
print_error "Префикс \"$prefix_name\" не найден по пути $prefix_path."
return 1
fi
print_info "Начало резервного копирования префикса: $prefix_name"
create_new_dir "$temp_backup_dir"
create_new_dir "$temp_backup_dir/prefixes/"
create_new_dir "$temp_backup_dir/dist/"
print_info "Подготовка префикса к упаковке..."
if cp -a "$prefix_path" "$temp_backup_dir/prefixes/$prefix_name"; then
print_ok "Директория префикса подготовлена."
else
print_error "Не удалось подготовить директорию префикса."
try_remove_dir "$temp_backup_dir"
return 1
fi
if [[ -f "$prefix_path/last.conf" ]]; then
local wine_version_to_backup
wine_version_to_backup=$( (source "$prefix_path/last.conf" && echo "$WH_WINE_USE") )
if [[ -n "$wine_version_to_backup" && "$wine_version_to_backup" != system* && -d "$WH_DIST_DIR/$wine_version_to_backup" ]]; then
print_info "Копирование используемой версии Wine: $wine_version_to_backup..."
if ! cp -a "$WH_DIST_DIR/$wine_version_to_backup" "$temp_backup_dir/dist/"; then
print_error "Ошибка: не удалось скопировать версию Wine."
exit 1
fi
print_ok "Версия Wine скопирована."
fi
fi
print_info "Создание squashfs архива..."
if command -v mksquashfs >/dev/null; then
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd; then
print_ok "Архив успешно создан: $backup_dest_path"
else
print_error "Не удалось создать архив."
try_remove_dir "$temp_backup_dir"
return 1
fi
else
print_error "mksquashfs не установлен. Необходимо установить squashfs-tools."
try_remove_dir "$temp_backup_dir"
return 1
fi
try_remove_dir "$temp_backup_dir"
print_info "Резервное копирование завершено."
return 0
}
restore_prefix() {
local backup_archive_path="$1"
local temp_extract_dir
if [[ -z "$backup_archive_path" ]]; then
read -e -p "Укажите путь к архиву резервной копии (/путь/к/архиву.whpack): " backup_archive_path
if [[ -z "$backup_archive_path" ]]; then
print_error "Путь к архиву не указан. Восстановление отменено."
return 1
fi
fi
backup_archive_path=$(echo "$backup_archive_path" | sed "s/'//g; s/\"//g")
if [[ ! -f "$backup_archive_path" ]]; then
print_error "Файл архива не найден: $backup_archive_path"
return 1
fi
print_info "Восстановление из резервной копии: $backup_archive_path"
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)"
create_new_dir "$temp_extract_dir"
print_info "Распаковка архива..."
if ! unsquashfs -f -d "$temp_extract_dir" "$backup_archive_path"; then
print_error "Не удалось распаковать архив."
try_remove_dir "$temp_extract_dir"
return 1
fi
print_ok "Архив успешно распакован."
if [[ -d "$temp_extract_dir/dist" ]]; then
print_info "Восстановление версий Wine..."
# TODO: Нужно ли создавать директортю create_new_dir "$WH_DIST_DIR" и перезаписывать/удалять сушествующие файлы в /dist
if ! mv -n "$temp_extract_dir/dist"/* "$WH_DIST_DIR/"; then
print_warning "Не удалось восстановить версии Wine."
else
print_ok "Версии Wine восстановлены."
fi
fi
if [[ -d "$temp_extract_dir/prefixes" ]]; then
for prefix_dir in "$temp_extract_dir"/prefixes/*; do
local prefix_name=$(basename "$prefix_dir")
if [[ -d "$prefix_dir" ]]; then
print_info "Восстановление префикса: $prefix_name"
# TODO: Нужно ли удалять, перезаписывать или создавать новый префикс try_remove_dir "$WH_PREFIXES_DIR/$prefix_name"
if ! mv "$prefix_dir" "$WH_PREFIXES_DIR/"; then
print_error "Не удалось восстановить префикс $prefix_name."
else
print_ok "Префикс $prefix_name восстановлен."
print_info "Восстановление ярлыков для префикса $prefix_name..."
export RESTORE_FROM_BACKUP=1 # Устанавливаем флаг восстановления
while IFS='=' read -r line; do
local name_desktop=$(echo "$line" | cut -d'=' -f1)
local exe_path=$(echo "$line" | cut -d'=' -f2)
local icon_name=$(echo "$line" | cut -d'=' -f3)
local full_exe_path="$WH_PREFIXES_DIR/$prefix_name${exe_path}"
local full_icon_path="$WH_PREFIXES_DIR/$prefix_name/icons/${icon_name}"
if [[ -f "$full_exe_path" ]]; then
print_info "Создание ярлыка для $name_desktop"
create_desktop "$name_desktop" "$full_exe_path" "${icon_name%.*}"
else
print_warning "Исполняемый файл для ярлыка '$name_desktop' не найден: $full_exe_path"
fi
done < "$WH_PREFIXES_DIR/$prefix_name/desktop.list"
unset RESTORE_FROM_BACKUP # Снимаем флаг после завершения
print_ok "Ярлыки для префикса $prefix_name восстановлены."
fi
fi
done
else
print_error "Директория prefixes не найдена в архиве."
try_remove_dir "$temp_extract_dir"
return 1
fi
try_remove_dir "$temp_extract_dir"
print_ok "Полное восстановление завершено."
return 0
}
wh_info () { wh_info () {
echo "Использование: $SCRIPT_NAME [команда] echo "Использование: $SCRIPT_NAME [команда]
@ -1487,10 +1487,10 @@ wh_info () {
installed список установленных программ installed список установленных программ
run [программа.exe] запуск программы (отладка) run [программа.exe] запуск программы (отладка)
backup-prefix [имя_префикса] создать резервную копию префикса
restore-prefix восстановить резервную копию префикса
remove-all удалить WineHelper и все связанные данные remove-all удалить WineHelper и все связанные данные
remove-prefix [имя_префикса] удалить префикс и все связанные данные remove-prefix [имя_префикса] удалить префикс и все связанные данные
backup-prefix [имя_префикса] создать резерную копию префикса
restore-prefix [имя_префикса] восстановить префикс из резервной копии
Параметры: Параметры:
--help показать эту справку и выйти --help показать эту справку и выйти
@ -1526,7 +1526,7 @@ case "${1,,}" in
run|-r) shift ; run_installed_programs "$1" ;; run|-r) shift ; run_installed_programs "$1" ;;
backup-prefix) shift ; backup_prefix "$@" ;; backup-prefix) shift ; backup_prefix "$@" ;;
restore-prefix) shift ; restore_prefix "$@" ;; restore-prefix) shift ; restore_prefix "$@" ;;
remove-all) shift ; remove_winehelper "$@ ";; remove-all) shift ; remove_winehelper "$@" ;;
remove-prefix) shift ; remove_prefix "$@" ;; remove-prefix) shift ; remove_prefix "$@" ;;
*) *)
if [[ -f "$1" ]] ; then if [[ -f "$1" ]] ; then