added wine/proton separation by prefix bit depth

This commit is contained in:
Sergey Palcheh
2025-08-23 20:00:47 +06:00
parent 88f1febf54
commit 45bc97d796

View File

@@ -1574,7 +1574,7 @@ generate_wine_metadata () {
# Формат: "ключ_json;репозиторий;расширениеайлааблон_исключения"
local sources=(
"proton_ge;GloriousEggroll/proton-ge-custom;\\.tar\\.gz$;github-action"
"wine_kron4ek;Kron4ek/Wine-Builds;\\.tar\\.xz$;-x86"
"wine_kron4ek;Kron4ek/Wine-Builds;\\.tar\\.xz$;"
"proton_lg;Castro-Fidel/wine_builds;\\.tar\\.xz$;plugins"
"proton_cachyos;CachyOS/proton-cachyos;\\.tar\\.xz$;znver"
"proton_sarek;pythonlover02/Proton-Sarek;\\.tar\\.gz$;"
@@ -1638,13 +1638,40 @@ select_wine_version() {
WINE_METADATA_FILE="$WH_TMP_DIR/wine_metadata.json"
[[ ! -f "$WINE_METADATA_FILE" ]] && fatal "Файл метаданных WINE не найден."
local jq_filter
if [[ "$WINEARCH" == "win64" ]]; then
print_info "Фильтруем версии для 64-битного префикса..."
# Для 64-битных префиксов показываем сборки с 'amd64', 'x86_64', 'wow64'
# или те, у которых нет явного указания на 32-битную архитектуру.
jq_filter='
.[] | .[] |
select(
(.name | test("amd64|x86_64|wow64")) or
(.name | test("i[3-6]86|x86(?!_64)") | not)
) | .name
'
else # win32
print_info "Фильтруем версии для 32-битного префикса..."
# Для 32-битных префиксов показываем только сборки с явным указанием 32-битной архитектуры.
jq_filter='
.[] | .[] |
select(.name | test("i[3-6]86|x86(?!_64)")) | .name
'
fi
# Создание единого, отсортированного списка версий
local versions=()
mapfile -t versions < <(jq -r '.[] | .[] | .name' "$WINE_METADATA_FILE" | sort -V -r | uniq)
mapfile -t versions < <(jq -r "$jq_filter" "$WINE_METADATA_FILE" | sort -V -r | uniq)
if [[ ${#versions[@]} -eq 0 ]]; then
print_warning "Не найдено подходящих версий WINE/Proton для архитектуры $WINEARCH."
print_warning "Будет использована версия по умолчанию: $WH_WINE_USE"
return
fi
local options=("system" "${versions[@]}")
print_info "Выберите версию WINE/Proton:"
print_info "Выберите версию WINE/Proton для $WINEARCH префикса:"
PS3="Ваш выбор: "
select opt in "Отмена" "${options[@]}"; do
if [[ "$REPLY" == "1" ]] || [[ "$opt" == "Отмена" ]]; then