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"
|
export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE"
|
||||||
|
|
||||||
if [[ ! -d "$WINEDIR" ]] ; then
|
if [[ ! -d "$WINEDIR" ]] ; then
|
||||||
local wine_package="$WH_TMP_DIR/$WH_WINE_USE.tar.xz"
|
local download_url wine_package_name wine_package check_sum_arg
|
||||||
try_download "$CLOUD_URL/$WH_WINE_USE.tar.xz" "$wine_package" check256sum
|
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/"
|
unpack "$wine_package" "$WH_DIST_DIR/"
|
||||||
try_remove_file "$wine_package"
|
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
|
fi
|
||||||
|
|
||||||
[[ ! -f "$WINEDIR/version" ]] && echo "$WH_WINE_USE" > "$WINEDIR/version"
|
[[ ! -f "$WINEDIR/version" ]] && echo "$WH_WINE_USE" > "$WINEDIR/version"
|
||||||
@@ -1589,6 +1627,38 @@ generate_wine_metadata () {
|
|||||||
fi
|
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() {
|
create_prefix() {
|
||||||
print_info "Существующие префиксы:"
|
print_info "Существующие префиксы:"
|
||||||
local prefixes=()
|
local prefixes=()
|
||||||
@@ -1636,6 +1706,8 @@ create_prefix() {
|
|||||||
*) fatal "Неверный выбор. Операция отменена." ;;
|
*) fatal "Неверный выбор. Операция отменена." ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
select_wine_version
|
||||||
|
|
||||||
print_info "Выберите тип создаваемого префикса:"
|
print_info "Выберите тип создаваемого префикса:"
|
||||||
echo " 0) Отмена создания префикса"
|
echo " 0) Отмена создания префикса"
|
||||||
echo " 1) С рекомендуемыми библиотеками (по умолчанию)"
|
echo " 1) С рекомендуемыми библиотеками (по умолчанию)"
|
||||||
|
Reference in New Issue
Block a user