added the function of selecting the wine version with improved downloads

This commit is contained in:
Sergey Palcheh
2025-08-23 16:07:26 +06:00
parent c756459993
commit 88f1febf54

View File

@@ -811,10 +811,48 @@ init_wine_ver () {
export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE"
if [[ ! -d "$WINEDIR" ]] ; then
local wine_package="$WH_TMP_DIR/$WH_WINE_USE.tar.xz"
try_download "$CLOUD_URL/$WH_WINE_USE.tar.xz" "$wine_package" check256sum
local download_url wine_package_name wine_package check_sum_arg
WINE_METADATA_FILE="$WH_TMP_DIR/wine_metadata.json"
# Сначала пытаемся сформировать URL по старой схеме, как основной для автоустановки
local old_schema_url="$CLOUD_URL/$WH_WINE_USE.tar.xz"
# `curl -f -s -I` делает HEAD-запрос. `-f` заставляет его вернуть код ошибки при 404.
if curl -f -s -I "$old_schema_url" > /dev/null ; then
download_url="$old_schema_url"
elif [[ -f "$WINE_METADATA_FILE" ]]; then
# Если по старому URL ничего нет, ищем в метаданных
print_info "Версия '$WH_WINE_USE' не найдена на основном сервере, ищем в метаданных..."
download_url=$(jq -r --arg name "$WH_WINE_USE" '.[] | .[] | select(.name == $name) | .url' "$WINE_METADATA_FILE" | head -n 1)
else
# Если и метаданных нет, то считаем, что должен был быть старый URL
print_warning "Файл метаданных не найден. Предполагается, что версия '$WH_WINE_USE' находится на основном сервере."
download_url="$old_schema_url"
fi
# Если URL так и не был найден, выводим ошибку.
if [[ -z "$download_url" ]]; then
fatal "Не удалось найти URL для скачивания версии '$WH_WINE_USE'."
fi
wine_package_name="$(basename "$download_url")"
wine_package="$WH_TMP_DIR/$wine_package_name"
# Проверяем хэш-сумму только для файлов с нашего сервера
if [[ "$download_url" == *"$CLOUD_URL"* ]]; then
check_sum_arg="check256sum"
fi
try_download "$download_url" "$wine_package" "$check_sum_arg"
unpack "$wine_package" "$WH_DIST_DIR/"
try_remove_file "$wine_package"
# Handle Proton's 'files' subdirectory structure by moving contents up
if [[ -d "$WINEDIR/files" ]]; then
print_info "Обнаружена структура каталогов Proton, исправляем пути..."
mv "$WINEDIR"/files/* "$WINEDIR/"
rmdir "$WINEDIR/files"
fi
fi
[[ ! -f "$WINEDIR/version" ]] && echo "$WH_WINE_USE" > "$WINEDIR/version"
@@ -1589,6 +1627,38 @@ generate_wine_metadata () {
fi
}
select_wine_version() {
if ! command -v jq &> /dev/null; then
print_warning "Команда 'jq' не найдена. Невозможно отобразить список версий WINE/Proton."
print_warning "Будет использована версия по умолчанию: $WH_WINE_USE"
return
fi
generate_wine_metadata
WINE_METADATA_FILE="$WH_TMP_DIR/wine_metadata.json"
[[ ! -f "$WINE_METADATA_FILE" ]] && fatal "Файл метаданных WINE не найден."
# Создание единого, отсортированного списка версий
local versions=()
mapfile -t versions < <(jq -r '.[] | .[] | .name' "$WINE_METADATA_FILE" | sort -V -r | uniq)
local options=("system" "${versions[@]}")
print_info "Выберите версию WINE/Proton:"
PS3="Ваш выбор: "
select opt in "Отмена" "${options[@]}"; do
if [[ "$REPLY" == "1" ]] || [[ "$opt" == "Отмена" ]]; then
print_info "Создание префикса отменено."
exit 0
elif [[ -n "$opt" ]]; then
export WH_WINE_USE="$opt"
break
else
print_error "Неверный выбор. Попробуйте еще раз."
fi
done
}
create_prefix() {
print_info "Существующие префиксы:"
local prefixes=()
@@ -1636,6 +1706,8 @@ create_prefix() {
*) fatal "Неверный выбор. Операция отменена." ;;
esac
select_wine_version
print_info "Выберите тип создаваемого префикса:"
echo " 0) Отмена создания префикса"
echo " 1) С рекомендуемыми библиотеками (по умолчанию)"