forked from CastroFidel/winehelper
added the function of selecting the wine version with improved downloads
This commit is contained in:
76
winehelper
76
winehelper
@@ -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) С рекомендуемыми библиотеками (по умолчанию)"
|
||||
|
Reference in New Issue
Block a user