forked from CastroFidel/winehelper
fixed file associacion and always read last.conf
This commit is contained in:
48
winehelper
48
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
|
||||
|
Reference in New Issue
Block a user