forked from CastroFidel/winehelper
		
	Compare commits
	
		
			37 Commits
		
	
	
		
			839b480c39
			...
			0.5.4.6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 5c01220382 | ||
|  | b74fe77bad | ||
|  | 3a442f6288 | ||
|  | 20030d43e4 | ||
|  | b44849661d | ||
|  | 4c39ec3c8e | ||
|  | 8950d8de2f | ||
|  | 85bd5fdf5d | ||
|  | b98c6e5408 | ||
|  | bab49377a3 | ||
|  | aa591112ff | ||
|  | 08090bbb6b | ||
|  | 759421d725 | ||
|  | bf3a30487e | ||
|  | 13efa924d8 | ||
|  | 721fd5e76e | ||
|  | 7f3f330fc4 | ||
|  | 1e19fa3c56 | ||
|  | a57df9a259 | ||
|  | 3f22b3540e | ||
|  | 861b6743fd | ||
|  | aa267ad9ef | ||
|  | 3e91bcf241 | ||
|  | 5571f74125 | ||
|  | a15b2621b6 | ||
|  | fd00b61c71 | ||
|  | 74eaf34c00 | ||
|  | a69493df73 | ||
|  | 6b958dd7f1 | ||
|  | 2483f4c66c | ||
|  | ab0e23952e | ||
|  | 92a682ba8a | ||
|  | 3381054c21 | ||
|  | 76b7d4f046 | ||
|  | aeae544640 | ||
|  | eeb94523b3 | ||
|  | a2186b63cb | 
| @@ -1,5 +1,14 @@ | ||||
| История изменений: | ||||
|  | ||||
| 0.5.4: | ||||
| * обновлен графический режим Qt5: | ||||
|     - добавлена возможность установки системных зависимостей | ||||
|     - исправлены/улучшены основные функции | ||||
|     - добавлено управление префиксами (в разработке) | ||||
|     - добавлена возможность создания ярлыка | ||||
| * добавлено автоматическое создание иконки для ярлыков (desktop файлов) | ||||
| * префикс tflex17 переименован в tflex (т.к. 18-я версия работает в том же префиксе) | ||||
|  | ||||
| 0.5.3: | ||||
| * исправлена установка grdcontrol для t-flex-* | ||||
| * обновлен графический режим Qt5 | ||||
|   | ||||
| @@ -4,7 +4,7 @@ _winehelper_completions() { | ||||
|     COMPREPLY=() | ||||
|     cur="${COMP_WORDS[COMP_CWORD]}" | ||||
|     prev="${COMP_WORDS[COMP_CWORD-1]}" | ||||
|     opts="--help --version --debug install installed -r -i remove-all --clear-pfx killall remove-prefix backup-prefix restore-prefix create-prefix --changelog changelog" | ||||
|     opts="--help --version --debug install installed install-dxvk install-vkd3d -r -i remove-all --clear-pfx killall remove-prefix backup-prefix restore-prefix create-prefix --changelog changelog change-wine" | ||||
|     wine_cmd="winecfg winereg winefile wineconsole winetricks desktop regedit explorer cmd run" | ||||
|  | ||||
|     case "${prev}" in | ||||
| @@ -34,6 +34,20 @@ _winehelper_completions() { | ||||
|         restore-prefix) | ||||
|             return 0 | ||||
|             ;; | ||||
|         install-dxvk|install-vkd3d) | ||||
|             local versions=$(winehelper "${prev}" list 2>/dev/null | grep ' - ' | sed 's/ - //') | ||||
|             COMPREPLY=( $(compgen -W "${versions} none list" -- "${cur}") ) | ||||
|             return 0 | ||||
|             ;; | ||||
|         change-wine) | ||||
|             local wine_versions=$(awk ' | ||||
|                 /^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/ { in_group=1 } | ||||
|                 /^#+/ { if (! ($0 ~ /^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/)) in_group=0 } | ||||
|                 /^[a-f0-9]{64}/ && in_group { sub(/\.tar\.xz$/, "", $2); print $2 } | ||||
|             ' /usr/share/winehelper/sha256sum.list 2>/dev/null) | ||||
|             COMPREPLY=( $(compgen -W "system ${wine_versions}" -- "${cur}") ) | ||||
|             return 0 | ||||
|             ;; | ||||
|         *) | ||||
|             ;; | ||||
|     esac | ||||
|   | ||||
| @@ -8,6 +8,8 @@ _winehelper() { | ||||
|     '--version[Показать информацию о пакете и его версии]' | ||||
|     '--debug[Режим отладки]' | ||||
|     'install[Запустить скрипт установки программы]' | ||||
|     'install-dxvk[Установить/удалить DXVK]' | ||||
|     'install-vkd3d[Установить/удалить VKD3D]' | ||||
|     'installed[Список установленных программ]' | ||||
|     '-r[Запуск программы (отладка)]' | ||||
|     '-i[Запустить скрипт установки программы]' | ||||
| @@ -18,6 +20,7 @@ _winehelper() { | ||||
|     'remove-prefix[Удалить префикс и все связанные данные]' | ||||
|     'backup-prefix[Создать резерную копию префикса]' | ||||
|     'restore-prefix[восстановить префикс из резервной копии "путь/до/whpack"]' | ||||
|     'change-wine[Изменить версию Wine/Proton для префикса]' | ||||
|   ) | ||||
|  | ||||
|   wine_cmd=( | ||||
| @@ -61,6 +64,15 @@ _winehelper() { | ||||
|         restore-prefix) | ||||
|           _files | ||||
|           ;; | ||||
|         install-dxvk) | ||||
|           _get_component_versions 'install-dxvk' | ||||
|           ;; | ||||
|         install-vkd3d) | ||||
|           _get_component_versions 'install-vkd3d' | ||||
|           ;; | ||||
|         change-wine) | ||||
|           _get_wine_versions | ||||
|           ;; | ||||
|         *) | ||||
|           _values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}" | ||||
|           ;; | ||||
| @@ -69,6 +81,32 @@ _winehelper() { | ||||
|   esac | ||||
| } | ||||
|  | ||||
| _get_component_versions () { | ||||
|   local component_command=$1 | ||||
|   local -a versions | ||||
|  | ||||
|   versions=( ${(f)"$(winehelper "${component_command}" list 2>/dev/null | grep ' - ' | sed 's/ - //')" } ) | ||||
|   versions+=(none list) | ||||
|  | ||||
|   _values 'versions' "${versions[@]}" | ||||
| } | ||||
|  | ||||
| _get_wine_versions () { | ||||
|   local -a versions | ||||
|   local sha256_file="/usr/share/winehelper/sha256sum.list" | ||||
|  | ||||
|   if [[ -f "$sha256_file" ]]; then | ||||
|     versions=( ${(f)"$(awk ' | ||||
|         /^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/ { in_group=1 } | ||||
|         /^#+/ { if (! ($0 ~ /^#+\s*(WINE|WINE_LG|PROTON_LG|PROTON_STEAM)\s*#*$/)) in_group=0 } | ||||
|         /^[a-f0-9]{64}/ && in_group { sub(/\.tar\.xz$/, "", $2); print $2 } | ||||
|     ' "$sha256_file" 2>/dev/null)"} ) | ||||
|   fi | ||||
|  | ||||
|   versions+=(system) | ||||
|   _values 'wine/proton versions' "${versions[@]}" | ||||
| } | ||||
|  | ||||
| _get_prefixes () { | ||||
|   prefixes=( ${(f)"$(ls -1 ~/.local/share/winehelper/prefixes 2>/dev/null)"} ) | ||||
|  | ||||
|   | ||||
							
								
								
									
										39
									
								
								autoinstall/arm-kt-att
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								autoinstall/arm-kt-att
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| #!/usr/bin/env bash | ||||
| # info_ru: Программа “АРМ КТ ПРОФ АТТЕСТАТ” для документов об основном общем, среднем общем образовании. | ||||
| ######################################################################## | ||||
| export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-4" | ||||
| export WH_WINE_USE="wine_x_tkg_10-0_amd64" | ||||
| export WINEPREFIX="arm-kt" | ||||
| export PROG_NAME="АРМ КТ ПРОФ АТТЕСТАТ" | ||||
| export PROG_ICON="armkt" | ||||
| export BASE_PFX="none" | ||||
| export WINEARCH="win64" | ||||
| export INSTALL_DLL="" | ||||
| export WH_WINDOWS_VER="7" | ||||
|  | ||||
| AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}') | ||||
| SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}') | ||||
| VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') | ||||
| AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip" | ||||
| AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe" | ||||
|  | ||||
| if [[ -z $VER_EXE ]] | ||||
| then fatal "Не удалось получить версию ПО со страницы на сайте!" | ||||
| else print_info "Устанавливаем $PROG_NAME версии $VER_EXE" | ||||
| fi | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then | ||||
|     unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}" | ||||
|     try_remove_file "$AUTOINSTALL_ZIP" | ||||
|  | ||||
|     wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT | ||||
|     try_remove_file "${AUTOINSTALL_EXE}" | ||||
|  | ||||
|     create_desktop "$PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON" | ||||
|  | ||||
|     create_desktop "Регистрация $PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON" | ||||
| fi | ||||
							
								
								
									
										39
									
								
								autoinstall/arm-kt-dpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								autoinstall/arm-kt-dpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| #!/usr/bin/env bash | ||||
| # info_ru: Программа “АРМ КТ ПРОФ ДПП” для заполнения бланков документов о повышении квалификации и профессиональной переподготовке. | ||||
| ######################################################################## | ||||
| export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank" | ||||
| export WH_WINE_USE="wine_x_tkg_10-0_amd64" | ||||
| export WINEPREFIX="arm-kt" | ||||
| export PROG_NAME="АРМ КТ ПРОФ ДПП" | ||||
| export PROG_ICON="armkt" | ||||
| export BASE_PFX="none" | ||||
| export WINEARCH="win64" | ||||
| export INSTALL_DLL="" | ||||
| export WH_WINDOWS_VER="7" | ||||
|  | ||||
| AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}') | ||||
| SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}') | ||||
| VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') | ||||
| AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip" | ||||
| AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe" | ||||
|  | ||||
| if [[ -z $VER_EXE ]] | ||||
| then fatal "Не удалось получить версию ПО со страницы на сайте!" | ||||
| else print_info "Устанавливаем $PROG_NAME версии $VER_EXE" | ||||
| fi | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then | ||||
|     unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}" | ||||
|     try_remove_file "$AUTOINSTALL_ZIP" | ||||
|  | ||||
|     wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT | ||||
|     try_remove_file "${AUTOINSTALL_EXE}" | ||||
|  | ||||
|     create_desktop "$PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON" | ||||
|  | ||||
|     create_desktop "Регистрация $PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON" | ||||
| fi | ||||
							
								
								
									
										35
									
								
								autoinstall/arm-kt-es
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								autoinstall/arm-kt-es
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| #!/usr/bin/env bash | ||||
| # info_ru: Программа “АРМ КТ ПРОФ НШ” для заполнения бланков документов об окончании начальной школы. | ||||
| ######################################################################## | ||||
| export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-1" | ||||
| export WH_WINE_USE="wine_x_tkg_10-0_amd64" | ||||
| export WINEPREFIX="arm-kt" | ||||
| export PROG_NAME="АРМ КТ ПРОФ НШ" | ||||
| export PROG_ICON="armkt" | ||||
| export BASE_PFX="none" | ||||
| export WINEARCH="win64" | ||||
| export INSTALL_DLL="" | ||||
| export WH_WINDOWS_VER="7" | ||||
|  | ||||
| AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.exe" | awk -F'"' '{print $2}') | ||||
| SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}') | ||||
| VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') | ||||
| AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe" | ||||
|  | ||||
| if [[ -z $VER_EXE ]] | ||||
| then fatal "Не удалось получить версию ПО со страницы на сайте!" | ||||
| else print_info "Устанавливаем $PROG_NAME версии $VER_EXE" | ||||
| fi | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_EXE" ; then | ||||
|     wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT | ||||
|     try_remove_file "${AUTOINSTALL_EXE}" | ||||
|  | ||||
|     create_desktop "$PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON" | ||||
|  | ||||
|     create_desktop "Регистрация $PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON" | ||||
| fi | ||||
							
								
								
									
										38
									
								
								autoinstall/arm-kt-med
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								autoinstall/arm-kt-med
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| #!/usr/bin/env bash | ||||
| # info_ru: Программа “АРМ КТ ПРОФ МЕД” для заполнения бланков документов о послевузовском профессиональном образовании и сертификатов специалиста.###################################################### | ||||
| export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-3" | ||||
| export WH_WINE_USE="wine_x_tkg_10-0_amd64" | ||||
| export WINEPREFIX="arm-kt" | ||||
| export PROG_NAME="АРМ КТ ПРОФ МЕД" | ||||
| export PROG_ICON="armkt" | ||||
| export BASE_PFX="none" | ||||
| export WINEARCH="win64" | ||||
| export INSTALL_DLL="" | ||||
| export WH_WINDOWS_VER="7" | ||||
|  | ||||
| AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}') | ||||
| SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}') | ||||
| VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') | ||||
| AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip" | ||||
| AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe" | ||||
|  | ||||
| if [[ -z $VER_EXE ]] | ||||
| then fatal "Не удалось получить версию ПО со страницы на сайте!" | ||||
| else print_info "Устанавливаем $PROG_NAME версии $VER_EXE" | ||||
| fi | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then | ||||
|     unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}" | ||||
|     try_remove_file "$AUTOINSTALL_ZIP" | ||||
|  | ||||
|     wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT | ||||
|     try_remove_file "${AUTOINSTALL_EXE}" | ||||
|  | ||||
|     create_desktop "$PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON" | ||||
|  | ||||
|     create_desktop "Регистрация $PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON" | ||||
| fi | ||||
							
								
								
									
										39
									
								
								autoinstall/arm-kt-prof
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								autoinstall/arm-kt-prof
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| #!/usr/bin/env bash | ||||
| # info_ru: Программа “АРМ КТ ПРОФ ПРОФЕССИЯ” для заполнения бланков документов профессионального обучения. | ||||
| ######################################################################## | ||||
| export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-5" | ||||
| export WH_WINE_USE="wine_x_tkg_10-0_amd64" | ||||
| export WINEPREFIX="arm-kt" | ||||
| export PROG_NAME="АРМ КТ ПРОФ ПРОФЕССИЯ" | ||||
| export PROG_ICON="armkt" | ||||
| export BASE_PFX="none" | ||||
| export WINEARCH="win64" | ||||
| export INSTALL_DLL="" | ||||
| export WH_WINDOWS_VER="7" | ||||
|  | ||||
| AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}') | ||||
| SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}') | ||||
| VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') | ||||
| AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip" | ||||
| AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe" | ||||
|  | ||||
| if [[ -z $VER_EXE ]] | ||||
| then fatal "Не удалось получить версию ПО со страницы на сайте!" | ||||
| else print_info "Устанавливаем $PROG_NAME версии $VER_EXE" | ||||
| fi | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then | ||||
|     unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}" | ||||
|     try_remove_file "$AUTOINSTALL_ZIP" | ||||
|  | ||||
|     wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT | ||||
|     try_remove_file "${AUTOINSTALL_EXE}" | ||||
|  | ||||
|     create_desktop "$PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON" | ||||
|  | ||||
|     create_desktop "Регистрация $PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON" | ||||
| fi | ||||
							
								
								
									
										39
									
								
								autoinstall/arm-kt-spo
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								autoinstall/arm-kt-spo
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| #!/usr/bin/env bash | ||||
| # info_ru: Программа “АРМ КТ ПРОФ СПО” для заполнения бланков документов о среднем профессиональном образовании. | ||||
| ######################################################################## | ||||
| export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-2" | ||||
| export WH_WINE_USE="wine_x_tkg_10-0_amd64" | ||||
| export WINEPREFIX="arm-kt" | ||||
| export PROG_NAME="АРМ КТ ПРОФ СПО" | ||||
| export PROG_ICON="armkt" | ||||
| export BASE_PFX="none" | ||||
| export WINEARCH="win64" | ||||
| export INSTALL_DLL="" | ||||
| export WH_WINDOWS_VER="7" | ||||
|  | ||||
| AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}') | ||||
| SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}') | ||||
| VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') | ||||
| AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip" | ||||
| AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe" | ||||
|  | ||||
| if [[ -z $VER_EXE ]] | ||||
| then fatal "Не удалось получить версию ПО со страницы на сайте!" | ||||
| else print_info "Устанавливаем $PROG_NAME версии $VER_EXE" | ||||
| fi | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then | ||||
|     unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}" | ||||
|     try_remove_file "$AUTOINSTALL_ZIP" | ||||
|  | ||||
|     wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT | ||||
|     try_remove_file "${AUTOINSTALL_EXE}" | ||||
|  | ||||
|     create_desktop "$PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON" | ||||
|  | ||||
|     create_desktop "Регистрация $PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON" | ||||
| fi | ||||
							
								
								
									
										39
									
								
								autoinstall/arm-kt-vuz
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								autoinstall/arm-kt-vuz
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| #!/usr/bin/env bash | ||||
| # info_ru: Программа “АРМ КТ ПРОФ ВУЗ” для заполнения бланков документов о высшем образовании. | ||||
| ######################################################################## | ||||
| export PROG_URL="https://armregistr.ru/programmnoe-obespechenie/licenziya-na-programmnoe-obespechenie-dlya-zapolneniya-blank-6" | ||||
| export WH_WINE_USE="wine_x_tkg_10-0_amd64" | ||||
| export WINEPREFIX="arm-kt" | ||||
| export PROG_NAME="АРМ КТ ПРОФ ВУЗ" | ||||
| export PROG_ICON="armkt" | ||||
| export BASE_PFX="none" | ||||
| export WINEARCH="win64" | ||||
| export INSTALL_DLL="" | ||||
| export WH_WINDOWS_VER="7" | ||||
|  | ||||
| AUTOINSTALL_URL=$(curl -s "$PROG_URL" | grep "setup.zip" | awk -F'"' '{print $2}') | ||||
| SHORT_NAME=$(echo $AUTOINSTALL_URL | awk -F'/' '{print $5}') | ||||
| VER_EXE=$(echo $AUTOINSTALL_URL | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') | ||||
| AUTOINSTALL_ZIP="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.zip" | ||||
| AUTOINSTALL_EXE="${WH_TMP_DIR}/$SHORT_NAME-$VER_EXE-setup.exe" | ||||
|  | ||||
| if [[ -z $VER_EXE ]] | ||||
| then fatal "Не удалось получить версию ПО со страницы на сайте!" | ||||
| else print_info "Устанавливаем $PROG_NAME версии $VER_EXE" | ||||
| fi | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| if try_download "$AUTOINSTALL_URL" "$AUTOINSTALL_ZIP" ; then | ||||
|     unpack "$AUTOINSTALL_ZIP" "${WH_TMP_DIR}" | ||||
|     try_remove_file "$AUTOINSTALL_ZIP" | ||||
|  | ||||
|     wine_run_install "${AUTOINSTALL_EXE}" /VERYSILENT | ||||
|     try_remove_file "${AUTOINSTALL_EXE}" | ||||
|  | ||||
|     create_desktop "$PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/$SHORT_NAME.exe" "$PROG_ICON" | ||||
|  | ||||
|     create_desktop "Регистрация $PROG_NAME" \ | ||||
|     "$DRIVE_C/Program Files/KtSoftware/$SHORT_NAME/${SHORT_NAME}Reg.exe" "$PROG_ICON" | ||||
| fi | ||||
| @@ -5,7 +5,7 @@ export WH_WINDOWS_VER="10" | ||||
| export WH_WINE_USE="wine_wh_tflex_10-9_amd64" | ||||
| export BASE_PFX="tflex17_pfx_x64_v02" | ||||
| export WINEARCH="win64" | ||||
| export WINEPREFIX="tflex17" | ||||
| export WINEPREFIX="tflex" | ||||
| export PROG_VERSION="" | ||||
| export WH_XDG_OPEN="log" | ||||
| export INSTALL_DLL="corefonts d3dcompiler_47 dotnet48 vcrun2022 ucrtbase2019 msxml6 fontsmooth=rgb baekmuk droid eufonts ipamona liberation lucida opensymbol sourcehansans tahoma takao uff unifont vlgothic wenquanyi wenquanyizenhei" | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								image/armkt.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								image/armkt.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 23 KiB | 
							
								
								
									
										383
									
								
								winehelper
									
									
									
									
									
								
							
							
						
						
									
										383
									
								
								winehelper
									
									
									
									
									
								
							| @@ -7,18 +7,20 @@ if [[ $(id -u) -eq 0 ]] ; then | ||||
| fi | ||||
|  | ||||
| ##### DEFAULT PATH ##### | ||||
| export SCRIPT_NAME USER_WORK_PATH RUN_SCRIPT DATA_PATH CHANGELOG_FILE WH_ICON_PATH LICENSE_FILE AGREEMENT | ||||
| export SCRIPT_NAME USER_WORK_PATH RUN_SCRIPT DATA_PATH CHANGELOG_FILE WH_ICON_PATH LICENSE_FILE AGREEMENT THIRD_PARTY_FILE | ||||
|  | ||||
| SCRIPT_NAME="$(basename "$0")" | ||||
| if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then | ||||
|     # переменные для установленного WineHelper в систему | ||||
|     WH_VERSION="$(rpm -q winehelper | awk -F'-' '{print $2}')" | ||||
|     USER_WORK_PATH="$HOME/.local/share/$SCRIPT_NAME" | ||||
|     RUN_SCRIPT="/usr/bin/$SCRIPT_NAME" | ||||
|     DATA_PATH="/usr/share/$SCRIPT_NAME" | ||||
|     CHANGELOG_FILE="$(realpath "/usr/share/doc/winehelper"-*/CHANGELOG)" | ||||
|     WH_ICON_PATH="$DATA_PATH/image/gui/winehelper.svg" | ||||
|     LICENSE_FILE="$(realpath "/usr/share/doc/winehelper"-*/LICENSE)" | ||||
|     AGREEMENT="$(realpath "/usr/share/doc/winehelper"-*/LICENSE_AGREEMENT)" | ||||
|     CHANGELOG_FILE="/usr/share/doc/winehelper-$WH_VERSION/CHANGELOG" | ||||
|     LICENSE_FILE="/usr/share/doc/winehelper-$WH_VERSION/LICENSE" | ||||
|     AGREEMENT="/usr/share/doc/winehelper-$WH_VERSION/LICENSE_AGREEMENT" | ||||
|     THIRD_PARTY_FILE="/usr/share/doc/winehelper-$WH_VERSION/THIRD-PARTY" | ||||
| else | ||||
|     # переменные для тестового запуска WineHelper из репозитория | ||||
|     USER_WORK_PATH="$HOME/test-$SCRIPT_NAME" | ||||
| @@ -28,6 +30,7 @@ else | ||||
|     WH_ICON_PATH="$DATA_PATH/image/gui/winehelper-devel.svg" | ||||
|     LICENSE_FILE="$DATA_PATH/LICENSE" | ||||
|     AGREEMENT="$DATA_PATH/LICENSE_AGREEMENT" | ||||
|     THIRD_PARTY_FILE="$DATA_PATH/THIRD-PARTY" | ||||
|  | ||||
|     # минимальная проверка синтаксиса скриптов | ||||
|     for self_check_script in "$RUN_SCRIPT" \ | ||||
| @@ -190,7 +193,7 @@ su_run () { | ||||
|             ((i++)) | ||||
|         done | ||||
|     else | ||||
|         pkexec "$@" && return 0 | ||||
|         pkexec bash -c "$@" && return 0 | ||||
|     fi | ||||
|     fatal "Не удалось установить необходимые компоненты!" | ||||
| } | ||||
| @@ -509,63 +512,41 @@ var_ld_library_path_update () { | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| extract_icon() { | ||||
|     check_prefix_var | ||||
|     local exe_file="$1" | ||||
|     local ico_name="$(basename "$exe_file" .exe).ico" | ||||
|     local png_name="$(basename "$exe_file" .exe).png" | ||||
|     local tmp_ico_dir="$WH_TMP_DIR/icons" | ||||
|     local user_icons="$WINEPREFIX/icons" | ||||
|  | ||||
|     create_new_dir "$tmp_ico_dir" | ||||
|  | ||||
|     if ! wrestool -x -t 14 "$exe_file" -o "$tmp_ico_dir/$ico_name" ; then | ||||
|         print_warning "Не удалось извлечь иконку из $exe_file" | ||||
|         try_remove_file "$tmp_ico_dir" | ||||
|         return 1 | ||||
| find_prefix () { | ||||
|     # Автоматическое определение префикса, если он не задан | ||||
|     if [[ -z "$WINEPREFIX" ]] && [[ "$1" == "$WH_PREFIXES_DIR"* ]]; then | ||||
|         local extracted_prefix | ||||
|         extracted_prefix="$(echo "$1" | grep -o ".*/prefixes/[^/]*")" | ||||
|         if [[ -d "$extracted_prefix" ]]; then | ||||
|             export WINEPREFIX="$extracted_prefix" | ||||
|             print_info "Префикс автоматически определен: $(basename "$WINEPREFIX")" | ||||
|         fi | ||||
|  | ||||
|     if ! icotool -x -i 1 "$tmp_ico_dir/$ico_name" -o "$tmp_ico_dir/$png_name" ; then | ||||
|         print_warning "Не удалось извлечь иконку из $ico_name" | ||||
|         try_remove_file "$tmp_ico_dir" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     create_new_dir "$user_icons" | ||||
|  | ||||
|     if ! try_copy_file "$tmp_ico_dir/$png_name" "$user_icons" ; then | ||||
|         print_warning "Не удалось копировать иконку в префикс" | ||||
|         try_remove_file "$user_icons" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     try_remove_dir "$tmp_ico_dir" | ||||
|     print_ok "Иконка сохранена: $user_icons/$png_name" | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| create_desktop () { | ||||
|     local name_desktop exe_file desktop_filename icon_file desktop_path | ||||
|     local name_desktop exe_file desktop_filename icon_file desktop_path icon_arg desktop_filename_arg | ||||
|     name_desktop="$1" | ||||
|     exe_file="$2" | ||||
|     if [[ -n $4 ]] && [[ $4 != "nocopy" ]]; | ||||
|     then desktop_filename="$4" | ||||
|     else desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|")" | ||||
|     fi | ||||
|     if [[ "$RESTORE_FROM_BACKUP" == "1" ]] && [[ -f "$3" ]] | ||||
|     then icon_file="$3" | ||||
|     elif [[ -f "$WH_IMAGE_PATH/$3.png" ]] | ||||
|     then icon_file="$WH_IMAGE_PATH/$3.png" | ||||
|     else icon_file="wine" | ||||
|     icon_arg="$3" | ||||
|     desktop_filename_arg="$4" | ||||
|  | ||||
|     # Определяем имя desktop-файла | ||||
|     if [[ -n "$desktop_filename_arg" ]] && [[ "$desktop_filename_arg" != "nocopy" ]]; then | ||||
|         desktop_filename="$desktop_filename_arg" | ||||
|     else | ||||
|         desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|g")" | ||||
|     fi | ||||
|  | ||||
|     # Проверяем обязательные аргументы и наличие exe-файла | ||||
|     if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then | ||||
|         fatal "Used: $SCRIPT_NAME --desktop \"desktop_name\" \"path_to_exe\" \"name_png_from_image\"" | ||||
|         fatal "Использование: $0 desktop \"Имя ярлыка\" \"/путь/к/файлу.exe\" [иконка|auto] [имя_desktop_файла]" | ||||
|     elif [[ ! -f "$exe_file" ]] ; then | ||||
|         print_warning "Для создания ярлыка не найден исполняемый файл: $exe_file" | ||||
|  | ||||
|         BASENAME_EXE="$(basename "$exe_file")" | ||||
|         local BASENAME_EXE="$(basename "$exe_file")" | ||||
|         print_info "Запускаем поиск $BASENAME_EXE" | ||||
|         local FIND_PATH | ||||
|         if [[ -z "$DRIVE_C" ]] || [[ ! -d "$DRIVE_C" ]] | ||||
|         then FIND_PATH="$WH_PREFIXES_DIR" | ||||
|         else FIND_PATH="$DRIVE_C" | ||||
| @@ -575,11 +556,57 @@ create_desktop () { | ||||
|                     -iname "$BASENAME_EXE")" | ||||
|         if [[ -z "$exe_file" ]] || [[ ! -f "$exe_file" ]] | ||||
|         then fatal "Для создания ярлыка не найден исполняемый файл: $BASENAME_EXE" | ||||
|         else print_ok "Исполняемый файл $BASENAME_EXE найден по пути $(dirname "$exe_file")/" | ||||
|         else print_ok "Исполняемый файл $BASENAME_EXE найден по пути: $(dirname "$exe_file")/" | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     # создаем .desktop файл | ||||
|     find_prefix "$exe_file" | ||||
|  | ||||
|     # --- Логика обработки иконки --- | ||||
|     local user_icons_dir="$WINEPREFIX/icons" | ||||
|     create_new_dir "$user_icons_dir" | ||||
|  | ||||
|     # Случай 1: Восстановление из бэкапа (передан явный путь) | ||||
|     if [[ "$RESTORE_FROM_BACKUP" == "1" ]] && [[ -f "$icon_arg" ]]; then | ||||
|         icon_file="$icon_arg" | ||||
|     # Случай 2: 'auto' или пустой аргумент - пытаемся извлечь из EXE | ||||
|     elif [[ -z "$icon_arg" ]] || [[ "$icon_arg" == "auto" ]]; then | ||||
|         print_info "Попытка извлечь иконку из $exe_file..." | ||||
|         local png_name="$(basename "$exe_file" .exe).png" | ||||
|         local extracted_icon_path="$user_icons_dir/$png_name" | ||||
|  | ||||
|         # Проверяем, существует ли иконка, чтобы избежать повторного извлечения | ||||
|         if [[ -f "$extracted_icon_path" ]]; then | ||||
|             print_info "Иконка уже существует: $extracted_icon_path" | ||||
|             icon_file="$extracted_icon_path" | ||||
|         else | ||||
|             local tmp_ico_dir="$WH_TMP_DIR/icons_$$" # Используем PID для временного каталога | ||||
|             create_new_dir "$tmp_ico_dir" | ||||
|             local ico_name="$(basename "$exe_file" .exe).ico" | ||||
|  | ||||
|             if wrestool -x -t 14 "$exe_file" -o "$tmp_ico_dir/$ico_name" &>/dev/null && \ | ||||
|                icotool -x -i 1 "$tmp_ico_dir/$ico_name" -o "$tmp_ico_dir/$png_name" &>/dev/null && \ | ||||
|                try_copy_file "$tmp_ico_dir/$png_name" "$user_icons_dir/"; then | ||||
|  | ||||
|                 icon_file="$extracted_icon_path" | ||||
|                 print_ok "Иконка успешно извлечена и сохранена: $icon_file" | ||||
|             else | ||||
|                 print_warning "Не удалось извлечь иконку из $exe_file. Используется иконка по умолчанию." | ||||
|                 icon_file="wine" # Запасной вариант | ||||
|             fi | ||||
|             try_remove_dir "$tmp_ico_dir" | ||||
|         fi | ||||
|     # Случай 3: Передано конкретное имя иконки | ||||
|     elif [[ -f "$WH_IMAGE_PATH/$icon_arg.png" ]]; then | ||||
|         icon_file="$WH_IMAGE_PATH/$icon_arg.png" | ||||
|     # Случай 4: Запасной вариант по умолчанию | ||||
|     else | ||||
|         print_info "Иконка '$icon_arg' не найдена. Используется иконка по умолчанию." | ||||
|         icon_file="wine" | ||||
|     fi | ||||
|     # --- Конец логики обработки иконки --- | ||||
|  | ||||
|     # Создаем .desktop файл | ||||
|     create_new_dir "$WH_MENU_DIR" | ||||
|     { | ||||
|         echo "[Desktop Entry]" | ||||
| @@ -596,19 +623,29 @@ create_desktop () { | ||||
|     cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/" | ||||
|  | ||||
|     if [[ "$RESTORE_FROM_BACKUP" == "1" ]] ; then | ||||
|         print_info "Пропускаем обновление desktop.list (режим восстановления из бэкапа)" | ||||
|         print_info "Пропускаем обновление desktop.list (режим восстановления)" | ||||
|     else | ||||
|         # добавляем информацию о приложении в "$WINEPREFIX/desktop.list" | ||||
|         # Добавляем информацию о приложении в "$WINEPREFIX/desktop.list" | ||||
|         if [[ -f "$WINEPREFIX/desktop.list" ]] \ | ||||
|         && grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list" | ||||
|         then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list" | ||||
|         fi | ||||
|         create_new_dir "$WINEPREFIX/icons" | ||||
|         try_copy_file "$icon_file" "$WINEPREFIX/icons/" | ||||
|         echo "$name_desktop=${exe_file//$WINEPREFIX/}=$(basename "$icon_file")" >> "$WINEPREFIX/desktop.list" | ||||
|  | ||||
|         # Копируем финальную иконку в директорию иконок префикса, если ее там нет | ||||
|         local final_icon_name | ||||
|         if [[ -f "$icon_file" ]]; then | ||||
|             final_icon_name=$(basename "$icon_file") | ||||
|             if [[ ! -f "$user_icons_dir/$final_icon_name" ]]; then | ||||
|                 try_copy_file "$icon_file" "$user_icons_dir/" | ||||
|             fi | ||||
|         else | ||||
|             final_icon_name="$icon_file" # например, "wine" | ||||
|         fi | ||||
|  | ||||
|     # создаем файл категории для меню | ||||
|         echo "$name_desktop=${exe_file//$WINEPREFIX/}=${final_icon_name}" >> "$WINEPREFIX/desktop.list" | ||||
|     fi | ||||
|  | ||||
|     # Создаем файл категории для меню | ||||
|     create_new_dir "$HOME/.local/share/desktop-directories" | ||||
|     if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then | ||||
|     cat > "$WH_MENU_CATEGORY" <<EOF | ||||
| @@ -619,7 +656,7 @@ Icon=wine | ||||
| EOF | ||||
|     fi | ||||
|  | ||||
|     # Создаем файл меню для всех приложений | ||||
|     # Создаем файл меню для всех приложений WineHelper | ||||
|     create_new_dir "$HOME/.config/menus/applications-merged" | ||||
|     if [[ ! -f "$WH_MENU_CONFIG" ]] ; then | ||||
|     cat > "$WH_MENU_CONFIG" <<EOF | ||||
| @@ -638,15 +675,15 @@ EOF | ||||
| EOF | ||||
|     fi | ||||
|  | ||||
|     # Обновляем кэш desktop файлов | ||||
|     # Обновляем кэш desktop-файлов | ||||
|     update-desktop-database "$HOME/.local/share/applications" | ||||
|  | ||||
|     if [[ $4 != "nocopy" ]] ; then | ||||
|     if [[ "$desktop_filename_arg" != "nocopy" ]] ; then | ||||
|         desktop_path="$(xdg-user-dir DESKTOP)" | ||||
|         print_info "В меню и на рабочем столе создан $desktop_filename.desktop" | ||||
|         print_info "В меню и на рабочем столе создан ярлык: $desktop_filename.desktop" | ||||
|         cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$desktop_path" | ||||
|     else | ||||
|         print_info "В меню создан $desktop_filename.desktop" | ||||
|         print_info "В меню создан ярлык: $desktop_filename.desktop" | ||||
|     fi | ||||
|  | ||||
|     if [[ -n "$INSTALL_SCRIPT_NAME" ]] \ | ||||
| @@ -743,8 +780,9 @@ init_dxvk () { | ||||
|     check_variables USE_DXVK_VER "$1" | ||||
|  | ||||
|     get_dxvk() { | ||||
|         DXVK_URL="$1" | ||||
|         DXVK_PACKAGE="${WH_VULKAN_LIBDIR}/dxvk-${DXVK_VAR_VER}.tar.$(echo ${DXVK_URL#*.tar.})" | ||||
|         local DXVK_URL="$1" | ||||
|         local DXVK_VAR_VER="$2" | ||||
|         local DXVK_PACKAGE="${WH_VULKAN_LIBDIR}/${DXVK_VAR_VER}.tar.$(echo "${DXVK_URL#*.tar.}")" | ||||
|         if try_download "$DXVK_URL" "$DXVK_PACKAGE" check256sum \ | ||||
|         && unpack "$DXVK_PACKAGE" "$WH_VULKAN_LIBDIR" | ||||
|         then | ||||
| @@ -755,8 +793,8 @@ init_dxvk () { | ||||
|     } | ||||
|  | ||||
|     for DXVK_VAR_VER in "$USE_DXVK_VER" $@ ; do | ||||
|         if [[ ! -d "${WH_VULKAN_LIBDIR}/dxvk-$DXVK_VAR_VER" ]] ; then | ||||
|             get_dxvk "$CLOUD_URL/dxvk-${DXVK_VAR_VER}.tar.xz" | ||||
|         if [[ ! -d "${WH_VULKAN_LIBDIR}/${DXVK_VAR_VER}" ]] ; then | ||||
|             get_dxvk "$CLOUD_URL/${DXVK_VAR_VER}.tar.xz" "$DXVK_VAR_VER" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
| @@ -769,8 +807,8 @@ init_dxvk () { | ||||
|     fi | ||||
|  | ||||
|     for dxvkfiles in $DXVK_FILES ; do | ||||
|         try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/dxvk-$USE_DXVK_VER/x64/$dxvkfiles.dll" | ||||
|         if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/dxvk-$USE_DXVK_VER/x32/$dxvkfiles.dll" | ||||
|         try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/${USE_DXVK_VER}/x64/$dxvkfiles.dll" | ||||
|         if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/${USE_DXVK_VER}/x32/$dxvkfiles.dll" | ||||
|         then var_winedlloverride_update "$dxvkfiles=n" | ||||
|         fi | ||||
|     done | ||||
| @@ -780,8 +818,9 @@ init_vkd3d () { | ||||
|     check_variables USE_VKD3D_VER "$1" | ||||
|  | ||||
|     get_vkd3d() { | ||||
|         VKD3D_URL="$1" | ||||
|         VKD3D_PACKAGE="${WH_VULKAN_LIBDIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.$(echo ${VKD3D_URL#*.tar.})" | ||||
|         local VKD3D_URL="$1" | ||||
|         local VKD3D_VAR_VER="$2" | ||||
|         local VKD3D_PACKAGE="${WH_VULKAN_LIBDIR}/${VKD3D_VAR_VER}.tar.$(echo "${VKD3D_URL#*.tar.}")" | ||||
|         if try_download "$VKD3D_URL" "$VKD3D_PACKAGE" check256sum \ | ||||
|         && unpack "$VKD3D_PACKAGE" "$WH_VULKAN_LIBDIR" | ||||
|         then | ||||
| @@ -792,15 +831,15 @@ init_vkd3d () { | ||||
|     } | ||||
|  | ||||
|     for VKD3D_VAR_VER in "$USE_VKD3D_VER" $@ ; do | ||||
|         if [[ ! -d "${WH_VULKAN_LIBDIR}/vkd3d-proton-$VKD3D_VAR_VER" ]] ; then | ||||
|             get_vkd3d "$CLOUD_URL/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz" | ||||
|         if [[ ! -d "${WH_VULKAN_LIBDIR}/${VKD3D_VAR_VER}" ]] ; then | ||||
|             get_vkd3d "$CLOUD_URL/${VKD3D_VAR_VER}.tar.xz" "$VKD3D_VAR_VER" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     VKD3D_FILES="d3d12 d3d12core libvkd3d-shader-1 libvkd3d-1" # libvkd3d-proton-utils-3 | ||||
|     for vkd3dfiles in $VKD3D_FILES ; do | ||||
|         try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/vkd3d-proton-$USE_VKD3D_VER/x64/$vkd3dfiles.dll" | ||||
|         if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/vkd3d-proton-$USE_VKD3D_VER/x86/$vkd3dfiles.dll" | ||||
|         try_copy_other_dll_to_pfx_64 "${WH_VULKAN_LIBDIR}/${USE_VKD3D_VER}/x64/$vkd3dfiles.dll" | ||||
|         if try_copy_other_dll_to_pfx_32 "${WH_VULKAN_LIBDIR}/${USE_VKD3D_VER}/x86/$vkd3dfiles.dll" | ||||
|         then var_winedlloverride_update "$vkd3dfiles=n" | ||||
|         fi | ||||
|     done | ||||
| @@ -1535,11 +1574,9 @@ select_wine_version() { | ||||
|                     group_versions+=("$version_name") | ||||
|                 fi | ||||
|             else # win32 | ||||
|                 if [[ "$version_name" =~ i[3-6]86 ]]; then | ||||
|                 group_versions+=("$version_name") | ||||
|             fi | ||||
|         fi | ||||
|         fi | ||||
|     done < "$sha256_file" | ||||
|     flush_group | ||||
|  | ||||
| @@ -1618,8 +1655,8 @@ select_wine_version() { | ||||
|         read -p "Введите номер для выбора wine/proton (0-$max_choice): " user_choice | ||||
|         if [[ "$user_choice" =~ ^[0-9]+$ ]] && (( user_choice >= 0 && user_choice <= max_choice )); then | ||||
|             if [[ "$user_choice" == "0" ]]; then | ||||
|                 print_info "Создание префикса отменено." | ||||
|                 exit 0 | ||||
|                 print_info "Операция отменена." | ||||
|                 return 1 | ||||
|             fi | ||||
|             local selected_opt | ||||
|             selected_opt="${selectable_options[$user_choice]}" | ||||
| @@ -1633,6 +1670,7 @@ select_wine_version() { | ||||
|             print_error "Неверный выбор. Введите число от 0 до $max_choice." | ||||
|         fi | ||||
|     done | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| create_prefix() { | ||||
| @@ -1682,7 +1720,7 @@ create_prefix() { | ||||
|         *) fatal "Неверный выбор. Операция отменена." ;; | ||||
|     esac | ||||
|  | ||||
|     select_wine_version | ||||
|     select_wine_version || exit 0 | ||||
|  | ||||
|     print_info "Выберите тип создаваемого префикса:" | ||||
|     echo " 0) Отмена создания префикса" | ||||
| @@ -1979,6 +2017,185 @@ restore_prefix() { | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| update_last_conf_var() { | ||||
|     local var_name="$1" | ||||
|     local new_value="$2" | ||||
|     local conf_file="$WINEPREFIX/last.conf" | ||||
|  | ||||
|     if [[ ! -f "$conf_file" ]] ; then | ||||
|         print_warning "Файл last.conf не найден, не могу обновить переменную $var_name." | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     if grep -q "export $var_name=" "$conf_file"; then | ||||
|         sed -i "s|^export $var_name=.*|export $var_name=\"$new_value\"|" "$conf_file" | ||||
|     else | ||||
|         echo "export $var_name=\"$new_value\"" >> "$conf_file" | ||||
|     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 | ||||
|     init_wineprefix | ||||
|     if [[ "$version" == "none" ]] ; then | ||||
|         print_info "Удаление DXVK..." | ||||
|         init_wined3d | ||||
|         update_last_conf_var "DXVK_VER" "" | ||||
|     else | ||||
|         init_dxvk "$version" | ||||
|         update_last_conf_var "DXVK_VER" "$USE_DXVK_VER" | ||||
|     fi | ||||
|     wait_wineserver | ||||
| } | ||||
|  | ||||
| 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 | ||||
|     init_wineprefix | ||||
|     if [[ "$version" == "none" ]] ; then | ||||
|         print_info "Удаление VKD3D..." | ||||
|         init_wined3d | ||||
|         update_last_conf_var "VKD3D_VER" "" | ||||
|     else | ||||
|         init_vkd3d "$version" | ||||
|         update_last_conf_var "VKD3D_VER" "$USE_VKD3D_VER" | ||||
|     fi | ||||
|     wait_wineserver | ||||
| } | ||||
|  | ||||
| run_change_wine_version() { | ||||
|     local new_version="$1" | ||||
|  | ||||
|     check_prefix_var | ||||
|     init_database | ||||
|  | ||||
|     if [[ -z "$new_version" ]]; then | ||||
|         select_wine_version || exit 0 | ||||
|         new_version="$WH_WINE_USE" | ||||
|     else | ||||
|         export WH_WINE_USE="$new_version" | ||||
|     fi | ||||
|  | ||||
|     init_wine_ver | ||||
|  | ||||
|     init_wineprefix | ||||
|  | ||||
|     wait_wineserver | ||||
|     print_ok "Версия Wine для префикса $PREFIX_NAME успешно изменена на $WH_WINE_USE." | ||||
| } | ||||
|  | ||||
| wh_info () { | ||||
|     echo "Использование: $SCRIPT_NAME [команда] | ||||
|  | ||||
| @@ -1987,6 +2204,10 @@ wh_info () { | ||||
|     install [скрипт]                запустить скрипт установки программы | ||||
|     install [скрипт] --clear-pfx    не использовать готовый префикс для установки ПО | ||||
|  | ||||
|     install-dxvk [версия|none|list] установить, удалить или показать версии DXVK | ||||
|     install-vkd3d [версия|none|list] установить, удалить или показать версии VKD3D | ||||
|     change-wine [версия]            изменить версию Wine/Proton для текущего префикса | ||||
|  | ||||
|     installed                       список установленных программ | ||||
|     run [программа]                 запуск программы (отладка) | ||||
|     remove-all                      удалить WineHelper и все связанные данные | ||||
| @@ -2034,6 +2255,9 @@ case "$arg1" in | ||||
|     winetricks) prepair_wine ; "$WH_WINETRICKS" -q "$@" ;; | ||||
|     desktop) create_desktop "$@" ; exit 0 ;; | ||||
|     install|-i) run_autoinstall "$@" ;; | ||||
|     install-dxvk) run_install_dxvk "$@" ;; | ||||
|     install-vkd3d) run_install_vkd3d "$@" ;; | ||||
|     change-wine) run_change_wine_version "$@" ;; | ||||
|     installed) check_installed_programs "$1" ;; | ||||
|     run|-r) run_installed_programs "$1" ;; | ||||
|     backup-prefix) backup_prefix "$@" ;; | ||||
| @@ -2046,7 +2270,8 @@ case "$arg1" in | ||||
|     *) | ||||
|         if [[ -f "$arg1" ]] ; then | ||||
|             WIN_FILE_EXEC="$(readlink -f "$arg1")" | ||||
|             WIN_FILE_NAME="$(basename "$arg1")" | ||||
|             WIN_FILE_NAME="$(basename "$WIN_FILE_EXEC")" | ||||
|             find_prefix "$WIN_FILE_EXEC" | ||||
|             case "${WIN_FILE_NAME,,}" in | ||||
|                 *.exe) prepair_wine ; wine_run $WINE_WIN_START "$WIN_FILE_EXEC" "$@" ;; | ||||
|                 *.msi) prepair_wine ; wine_run msiexec /i "$WIN_FILE_EXEC" "$@" ;; | ||||
|   | ||||
							
								
								
									
										1305
									
								
								winehelper_gui.py
									
									
									
									
									
								
							
							
						
						
									
										1305
									
								
								winehelper_gui.py
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user