Merge branch 'minergenon-devel'

This commit is contained in:
Mikhail Tergoev
2025-09-25 13:10:01 +03:00
2 changed files with 217 additions and 34 deletions

View File

@@ -1184,6 +1184,16 @@ 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
@@ -1206,13 +1216,25 @@ 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
# добавляем ассоциации файлов для запуска с помощью xdg-open
for ext in $WH_XDG_OPEN ; do
get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system"
done
print_info "Используются ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
else
# удаление команды xdg-open из реестра
# удаление всех ассоциаций
for old_ext in $old_xdg_open; do
get_and_set_reg_file --delete "Software\Classes\.$old_ext" '@='
done
get_and_set_reg_file --delete "$XDG_OPEN_REG" '@='
# удаяем скрипт-обёртку
try_remove_file "$WRAPPER"
@@ -1353,6 +1375,13 @@ init_database () {
. "$WHDB_FILE"
elif 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
@@ -1361,10 +1390,19 @@ init_database () {
}
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
@@ -1394,9 +1432,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 () {