forked from CastroFidel/winehelper
		
	added the installation of dxvk/vkd3d in the text interface
This commit is contained in:
		
							
								
								
									
										113
									
								
								winehelper
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								winehelper
									
									
									
									
									
								
							| @@ -2018,7 +2018,7 @@ update_last_conf_var() { | ||||
|     local new_value="$2" | ||||
|     local conf_file="$WINEPREFIX/last.conf" | ||||
|  | ||||
|     if [[ ! -f "$conf_file" ]]; then | ||||
|     if [[ ! -f "$conf_file" ]] ; then | ||||
|         print_warning "Файл last.conf не найден, не могу обновить переменную $var_name." | ||||
|         return 1 | ||||
|     fi | ||||
| @@ -2030,8 +2030,108 @@ update_last_conf_var() { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| list_component_versions() { | ||||
|     local component_group="$1" | ||||
|     local sha256_file="$DATA_PATH/sha256sum.list" | ||||
|     [[ ! -f "$sha256_file" ]] && fatal "Файл с версиями не найден: $sha256_file" | ||||
|  | ||||
|     print_info "Доступные версии для $component_group:" | ||||
|  | ||||
|     awk -v group="$component_group" ' | ||||
|         /^#+\s*([^#]+?)\s*#*$/ { | ||||
|             current_group = $0 | ||||
|             gsub(/^#+\s*|\s*#*$/, "", current_group) | ||||
|         } | ||||
|         /^[a-f0-9]{64}/ { | ||||
|             if (current_group == group) { | ||||
|                 filename = $2 | ||||
|                 sub(/\.tar\.xz$/, "", filename) | ||||
|                 print " - " filename | ||||
|             } | ||||
|         } | ||||
|     ' "$sha256_file" | sort -Vr | ||||
| } | ||||
|  | ||||
| select_component_version() { | ||||
|     local component_group="$1" | ||||
|     local sha256_file="$DATA_PATH/sha256sum.list" | ||||
|     [[ ! -f "$sha256_file" ]] && fatal "Файл с версиями не найден: $sha256_file" | ||||
|  | ||||
|     local versions=() | ||||
|     local current_group="" | ||||
|     while IFS= read -r line; do | ||||
|         if [[ "$line" =~ ^#+[[:space:]]([^#[:space:]]+)[[:space:]]#* ]] ; then | ||||
|             current_group="${BASH_REMATCH[1]}" | ||||
|         elif [[ "$current_group" == "$component_group" ]] && [[ "$line" =~ [a-f0-9]{64} ]] ; then | ||||
|             local filename | ||||
|             filename=$(echo "$line" | awk '{print $2}') | ||||
|             local version_name=${filename%.tar.xz} | ||||
|             versions+=("$version_name") | ||||
|         fi | ||||
|     done < "$sha256_file" | ||||
|  | ||||
|     IFS=$'\n' versions=($(sort -Vr <<<"${versions[*]}")) | ||||
|     unset IFS | ||||
|  | ||||
|     if [[ ${#versions[@]} -eq 0 ]] ; then | ||||
|         print_warning "Не найдено доступных версий для $component_group." >&2 | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     print_info "Выберите версию $component_group для установки:" >&2 | ||||
|     echo >&2 | ||||
|  | ||||
|     local items_to_print=(" 0) Отмена") | ||||
|     for i in "${!versions[@]}" ; do | ||||
|         items_to_print+=(" $((i+1))) ${versions[$i]}") | ||||
|     done | ||||
|  | ||||
|     local num_items=${#items_to_print[@]} | ||||
|     local term_width=${COLUMNS:-80} | ||||
|     local max_len=0 | ||||
|     for item in "${items_to_print[@]}" ; do | ||||
|         (( ${#item} > max_len )) && max_len=${#item} | ||||
|     done | ||||
|  | ||||
|     ((max_len+=2)) | ||||
|     local num_cols=$(( term_width / max_len )) | ||||
|     (( num_cols = num_cols > 0 ? num_cols : 1 )) | ||||
|     local num_rows=$(( (num_items + num_cols - 1) / num_cols )) | ||||
|  | ||||
|     for ((i=0; i<num_rows; i++)) ; do | ||||
|         for ((j=0; j<num_cols; j++)) ; do | ||||
|             local index=$(( i + j * num_rows )) | ||||
|             (( index < num_items )) && printf "%-*s" "$max_len" "${items_to_print[index]}" >&2 | ||||
|         done | ||||
|         echo >&2 | ||||
|     done | ||||
|  | ||||
|     local max_choice=${#versions[@]} | ||||
|     local user_choice | ||||
|     while true; do | ||||
|         echo >&2 | ||||
|         read -p "Введите номер (0-$max_choice): " user_choice | ||||
|         if [[ "$user_choice" =~ ^[0-9]+$ ]] && (( user_choice >= 0 && user_choice <= max_choice )) ; then | ||||
|             if [[ "$user_choice" == "0" ]] ; then | ||||
|                 return 1 | ||||
|             fi | ||||
|             echo "${versions[$((user_choice-1))]}" | ||||
|             return 0 | ||||
|         else | ||||
|             print_error "Неверный выбор. Введите число от 0 до $max_choice." >&2 | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| run_install_dxvk() { | ||||
|     local version="$1" | ||||
|     if [[ -z "$version" ]] ; then | ||||
|         version=$(select_component_version "DXVK") | ||||
|         [[ $? -ne 0 ]] && print_info "Установка DXVK отменена." && return | ||||
|     elif [[ "$version" == "list" ]]; then | ||||
|         list_component_versions "DXVK" | ||||
|         return | ||||
|     fi | ||||
|     check_prefix_var | ||||
|     init_database | ||||
|     init_wine_ver | ||||
| @@ -2049,6 +2149,13 @@ run_install_dxvk() { | ||||
|  | ||||
| run_install_vkd3d() { | ||||
|     local version="$1" | ||||
|     if [[ -z "$version" ]] ; then | ||||
|         version=$(select_component_version "VKD3D") | ||||
|         [[ $? -ne 0 ]] && print_info "Установка VKD3D отменена." && return | ||||
|     elif [[ "$version" == "list" ]] ; then | ||||
|         list_component_versions "VKD3D" | ||||
|         return | ||||
|     fi | ||||
|     check_prefix_var | ||||
|     init_database | ||||
|     init_wine_ver | ||||
| @@ -2072,8 +2179,8 @@ wh_info () { | ||||
|     install [скрипт]                запустить скрипт установки программы | ||||
|     install [скрипт] --clear-pfx    не использовать готовый префикс для установки ПО | ||||
|  | ||||
|     install-dxvk [версия|none]      установить/удалить DXVK в выбранный префикс | ||||
|     install-vkd3d [версия|none]     установить/удалить VKD3D в выбранный префикс | ||||
|     install-dxvk [версия|none|list] установить, удалить или показать версии DXVK | ||||
|     install-vkd3d [версия|none|list] установить, удалить или показать версии VKD3D | ||||
|  | ||||
|     installed                       список установленных программ | ||||
|     run [программа]                 запуск программы (отладка) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user