From b1f192b2ffd5cf0a7724f9656d6e7981e906b4d5 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 25 Sep 2025 15:04:04 +0300 Subject: [PATCH] fixed file associacion and always read last.conf --- winehelper | 48 ++++++++++-------------------------------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/winehelper b/winehelper index 038a3aef..3cdff0ea 100755 --- a/winehelper +++ b/winehelper @@ -694,9 +694,11 @@ EOF echo '#!/usr/bin/env bash' echo "# cmd_name: $INSTALL_SCRIPT_NAME" } > "$exe_file".whdb - grep -e "info_" -e "#####" -e "export" -e "var_" "$INSTALL_SCRIPT" \ - | grep -vE "LAUNCH_PARAMETERS|AUTOINSTALL|WIN_FILE_EXEC|echo" \ + + grep -e "info_" -e "#####" -e "PROG_URL=" -e "WINEPREFIX=" -e "INSTALL_DLL=" \ + -e "PROG_NAME=" -e "PROG_ICON=" -e "var_" "$INSTALL_SCRIPT" \ | awk '{$1=$1;print}' >> "$exe_file".whdb + print_info "Создан файл настроек для $exe_file" fi } @@ -1184,16 +1186,7 @@ init_wineprefix () { # добавление ассоциаций файлов для запуска нативного приложения из wine # пример переменной: WH_XDG_OPEN="txt doc pdf" check_variables WH_XDG_OPEN "0" - # Сохраняем старые ассоциации, чтобы потом удалить те, что больше не нужны - local old_xdg_open - if [[ -f "$WINEPREFIX/last.conf" ]]; then - old_xdg_open=$(grep "WH_XDG_OPEN=" "$WINEPREFIX/last.conf" | sed -e 's/.*WH_XDG_OPEN="//' -e 's/"$//') - fi - # Если переменная WH_XDG_OPEN была установлена извне (например, из GUI), - # то мы должны принудительно установить ее значение в "0", если она пуста, - # чтобы корректно удалить старые ассоциации. - [[ -z "$WH_XDG_OPEN" ]] && WH_XDG_OPEN="0" local WRAPPER="${WH_TMP_DIR}/wh-xdg-open.sh" local XDG_OPEN_REG="Software\Classes\xdg-open\shell\open\command" if [[ $WH_XDG_OPEN != "0" ]] ; then @@ -1216,14 +1209,8 @@ init_wineprefix () { # добавляем новую команду xdg-open в реестр get_and_set_reg_file --add "$XDG_OPEN_REG" '@=' 'REG_SZ' "$WRAPPER %1" "system" - # Удаляем старые ассоциации, которых нет в новом списке - if [[ -n "$old_xdg_open" ]]; then - for old_ext in $old_xdg_open; do - if ! echo " $WH_XDG_OPEN " | grep -q " $old_ext "; then - get_and_set_reg_file --delete "Software\Classes\.$old_ext" '@=' - fi - done - fi + # удаляем старые ассоциации, которых нет в новом списке + sed -i '/@="xdg-open"/d' "$WINEPREFIX/system.reg" # добавляем ассоциации файлов для запуска с помощью xdg-open for ext in $WH_XDG_OPEN ; do @@ -1373,36 +1360,21 @@ init_database () { if [[ "$WHDB_FILE" != "0" ]] ; then print_info "Используется файл настроек: $WHDB_FILE" . "$WHDB_FILE" - elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then + fi + + if check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then print_info "Найдены настройки из предыдущего использования префикса: $WINEPREFIX" - # Сохраняем значение WH_XDG_OPEN, если оно было установлено извне (например, из GUI). - # Это предотвращает его перезапись старым значением из last.conf. - # Используем `declare -p` для надежного определения, была ли переменная установлена, - # даже если она пустая (что означает "удалить все ассоциации"). - if declare -p WH_XDG_OPEN &>/dev/null; then - wh_xdg_open_from_env="$WH_XDG_OPEN" - fi cat "$WINEPREFIX/last.conf" . "$WINEPREFIX/last.conf" - else - print_warning "Файл настроек не найден. Пропускаем." fi } prepair_wine () { - # Объявляем переменную здесь, чтобы она была доступна после вызова init_database - local wh_xdg_open_from_env - if [[ -n "$INSTALL_SCRIPT_NAME" ]] then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME" else init_database fi - # Восстанавливаем значение WH_XDG_OPEN, если оно было установлено извне. - # Проверяем, была ли переменная сохранена, а не ее значение. - # Это позволяет корректно передать пустую строку. - if declare -p wh_xdg_open_from_env &>/dev/null; then - export WH_XDG_OPEN="$wh_xdg_open_from_env" - fi + init_wine_ver init_wineprefix use_winetricks