Compare commits
	
		
			53 Commits
		
	
	
		
			yad_portab
			...
			libs_v48
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 1b81250f39 | ||
|  | 44fcea77d1 | ||
|  | 36592917ce | ||
|  | 71cbcb7b65 | ||
|  | 2972d02f70 | ||
|  | f28aa3423e | ||
|  | 0fe873e24e | ||
|  | 4cf9554884 | ||
|  | bfeb559a2f | ||
|  | 263072994c | ||
|  | 175a15393f | ||
|  | 337070718e | ||
|  | 8d04691db5 | ||
|  | 0d879470da | ||
|  | 1a6bb21089 | ||
|  | 1ebf5e1f0f | ||
|  | 3422a2da79 | ||
|  | 8c248618f9 | ||
|  | 467caf6a5e | ||
|  | 500681865c | ||
|  | 3718b4d3d5 | ||
|  | e44a85ac20 | ||
|  | f0f0099164 | ||
|  | d2f5b1d36f | ||
|  | 8b50639a80 | ||
|  | a6aec0bb95 | ||
|  | 42feee474b | ||
|  | 887d64fef4 | ||
|  | 97645fe48e | ||
|  | c8a35b02cc | ||
|  | 938fa60a02 | ||
|  | 53f3d5a13e | ||
|  | 2d6be9b1b0 | ||
|  | e623b589e8 | ||
|  | 1280cb9ac5 | ||
|  | cc3fdaf86a | ||
|  | 9e043ce6c1 | ||
|  | 8b199bfe5a | ||
|  | 6553d4f6fb | ||
|  | 1470641e35 | ||
|  | 641ac18316 | ||
|  | b0f830f274 | ||
|  | cd9df5097a | ||
|  | 9bc78beae0 | ||
|  | 4fd30bedb6 | ||
|  | e020be766f | ||
|  | c322b56eed | ||
|  | 9a6e1f14f9 | ||
|  | 4e5fed3c47 | ||
|  | d2138ff830 | ||
|  | aeaf707fc8 | ||
|  | ac89471590 | ||
|  | 2bb37df6a1 | 
| @@ -176,6 +176,14 @@ sudo -E dnf install curl icoutils libcurl  bubblewrap zstd cabextract tar goverl | ||||
| sudo eopkg it curl file bubblewrap curl icoutils tar  zstd cabextract xdg-utils openssl vulkan vulkan-32bit mesalib-32bit samba | ||||
| ``` | ||||
|  | ||||
| * **Void** | ||||
| ```sh | ||||
| sudo xbps-install -Su void-repo-multilib | ||||
|  | ||||
| sudo xbps-install -S bash wget icoutils yad bubblewrap zstd cabextract gzip tar xz openssl desktop-file-utils curl dbus freetype xdg-utils | ||||
| gdk-pixbuf noto-fonts-ttf nss xrandr lsof mesa-demos ImageMagick Vulkan-Tools libgcc alsa-plugins-32bit libX11-32bit freetype-32bit libglvnd-32bit libgpg-error-32bit nss-32bit openssl-32bit vulkan-loader vulkan-loader-32bit | ||||
| ``` | ||||
|  | ||||
| ## Контакты | ||||
|  | ||||
| <p> | ||||
|   | ||||
| @@ -178,6 +178,14 @@ sudo -E dnf install curl icoutils libcurl bubblewrap zstd cabextract tar goverla | ||||
| sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba | ||||
| ``` | ||||
|  | ||||
| * **Void** | ||||
| ```sh | ||||
| sudo xbps-install -Su void-repo-multilib | ||||
|  | ||||
| sudo xbps-install -S bash wget icoutils yad bubblewrap zstd cabextract gzip tar xz openssl desktop-file-utils curl dbus freetype xdg-utils | ||||
| gdk-pixbuf noto-fonts-ttf nss xrandr lsof mesa-demos ImageMagick Vulkan-Tools libgcc alsa-plugins-32bit libX11-32bit freetype-32bit libglvnd-32bit libgpg-error-32bit nss-32bit openssl-32bit vulkan-loader vulkan-loader-32bit | ||||
| ``` | ||||
|  | ||||
| ## Contacts | ||||
|  | ||||
| <p> | ||||
|   | ||||
| @@ -2,6 +2,112 @@ You can help us in the development of the project on the website: https://linux- | ||||
| ---------------------------------------- | ||||
| Changelog: | ||||
|  | ||||
| ###Scripts version 2274### Date: 07.04.2024 / Download update size: 15 megabytes | ||||
| * added the previous theme for PortProton, enabled by adding "export GUI_THEME=classic" to "data/user.conf" | ||||
|  | ||||
| ###Scripts version 2273### Date: 06.04.2024 / Download update size: 15 megabytes | ||||
| * the PortProton interface has been updated | ||||
| * improved the quality of the tray icon | ||||
| * added the CatsLauncher (the Front Edge game) to the AUTOINSTALL | ||||
| * added initial support .css (GTK+) | ||||
| * updated DOTNET prefix | ||||
|  | ||||
| ###Scripts version 2272### Date: 04.04.2024 / Download update size: 15 megabytes | ||||
| * script refactoring: | ||||
|  - yad_gui script combined with functions_helper | ||||
|  - runlib script combined with start.sh | ||||
|  - all functions from runlib, yad_gui and start.sh moved to functions_helper | ||||
| * fixed winetricks update on some systems (thanks to Boria138) | ||||
| * when cleaning the prefix, Common Files directories are not deleted from Program Files (to save vst libraries) | ||||
| * updated the interface software (yad) to version 13.0 with Cyrillic support by default | ||||
|  | ||||
| ###Scripts version 2271### Date: 03.04.2024 / Download update size: 15 megabytes | ||||
| * improved interface of the prefix manager (xterm has been replaced with the standard PortProton interface) | ||||
| * fixed the launch of the game "Dragon Age: Origin" from EAapp | ||||
| * many small script improvements | ||||
|  | ||||
| ###Scripts version 2270### Date: 31.03.2024 / Download update size: 15 megabytes | ||||
| * added support for the game Horizon Forbidden West (to apply, you need to run the exe of the game and select SETTINGS -> RESET SETTINGS) | ||||
| * fixed the operation of WINE from Kron4ek and returned the ability to download it using GET-OTHER-WINE | ||||
| * fixed the launch of GET-OTHER-WINE (the interface for downloading third-party versions of WINE-PROTON) when launching exe files | ||||
|  | ||||
| ###Scripts version 2269### Date: 29.03.2024 / Download update size: 15 megabytes | ||||
| * added improvements when using the system WINE | ||||
| * the preparation of PortProton scripts for working in flatpak has been completed | ||||
|  | ||||
| ###Scripts version 2268### Date: 27.03.2024 / Download update size: 15 megabytes | ||||
| * fixed the launch of some 32-bit games on the DEFAULT prefix. Examples: | ||||
|     LEGO Marvel Super Heroes | ||||
|     LEGO The Lord Of The Rings | ||||
|     LEGO Star Wars - The Clone Wars | ||||
|     Warhammer 40,000 Space Marine | ||||
|     Star Wars The Force Unleashed | ||||
|     Wolverine | ||||
|  | ||||
| ###Scripts version 2267### Date: 27.03.2024 / Download update size: 15 megabytes | ||||
| * implemented a twofold acceleration of prefix updates on all systems | ||||
| * improved the functionality of settings for exe files (EDIT_DB) | ||||
| * fixed the automatic installation of BattleNET | ||||
|  | ||||
| ###Scripts version 2266### Date: 26.03.2024 / Download update size: 185 megabytes | ||||
| * HOTFIX - download plugins from GITHUB | ||||
|  | ||||
| ###Scripts version 2265### Date: 26.03.2024 / Download update size: 570 megabytes | ||||
| * the faudio component has been added to the DEFAULT prefix (required for games running on the Creation Engine, example The Elder Scrolls) | ||||
| * the plugins_v14 library package has been updated: | ||||
|     transferred from the libs package: d3d_extras, reshade and default_pfx | ||||
|     portable versions have been added: yad_v13_0, perl, exiftool (thanks to Boria138) | ||||
| * the libs_v47 library package has been updated: | ||||
|     pressure-vessel 0.20240306.0 | ||||
|     sniper 0.20240307.80401 | ||||
| * updated PROTON_LG to version "9-2" | ||||
| * updated versions: | ||||
|     DXVK_GIT "2.3.1" | ||||
|     VKD3D_GIT "1.1-3973" | ||||
| * added saving of settings changes to EDIT_DB when using the "OPEN SETTINGS FILE" button | ||||
| * improved support for the PortProton test build in flatpak | ||||
| * many small script improvements | ||||
|  | ||||
| ###Scripts version 2264### Date: 15.03.2024 / Download update size: 15 megabytes | ||||
| * added the option to end the first PortProton session when starting the second | ||||
| * added auto-installation of the game "Pulse Online" | ||||
|  | ||||
| ###Scripts version 2263### Date: 15.03.2024 / Download update size: 15 megabytes | ||||
| * the lock file of the second session has been moved to "/tmp/portproton.lock" | ||||
| * when starting from the terminal, it is clearly indicated that the lock file and its location have been found | ||||
|  | ||||
| ###Scripts version 2262### Date: 14.03.2024 / Download update size: 230 megabytes | ||||
| * added a warning when starting the second PortProton session | ||||
| * added the ability to disable the container | ||||
| * added the ability to use system WINE | ||||
| * updated PROTON_LG to version 9-1 | ||||
| * updated versions: | ||||
|     DXVK_GIT "2.3-90" | ||||
|     VKD3D_GIT "1.1-3954" | ||||
| * fixed installation of libraries from the prefix manager on openSUSE OS (thanks to Boria138) | ||||
| * a separate version of PROTON is no longer required for Black Desert Online | ||||
|  | ||||
| ###Scripts version 2261### Date: 07.03.2024 / Download update size: 15 megabytes | ||||
| * HOTFIX - use settings from Black Desert Online launcher | ||||
|  | ||||
| ###Scripts version 2260### Date: 07.03.2024 / Download update size: 15 megabytes | ||||
| * added Black Desert Online to AUTOINSTALL | ||||
| * fixed the prefix filling request while using the automatic installation of desktop games/launchers | ||||
|  | ||||
| ###Scripts version 2259### Date: 06.03.2024 / Download update size: 15 megabytes | ||||
| * the PortProton update feature has been fixed for Steam Deck in Gaming Mode (the current update needs to be installed from desktop mode) | ||||
|  | ||||
| ###Scripts version 2258### Date: 06.03.2024 / Download update size: 15 megabytes | ||||
| * fixed saving complex arguments for an exe file (example: "- /B/TX /lang:01 /tex:1 /spg:50 KingKongTheGame.bf") | ||||
| * added automatic recovery shortcut to the menu for Steam Deck after SteamOS update (it is necessary to launch PP with any other shortcut of any game, or from Gaming Mode) | ||||
| * the use of gamemode is disabled for Steam Deck in Gaming Mode (the session itself uses the pre-installed gamemode in SteamOS) | ||||
|  | ||||
| ###Scripts version 2257### Date: 15.02.2024 / Download update size: 15 megabytes | ||||
| * for all setup.exe is automatically selected by WINE_LG (corrects errors unarc.dll ) | ||||
| * added a function to disable compositing (thanks to Boria138) | ||||
| * improved prefix update function | ||||
| * many small script improvements | ||||
|  | ||||
| ###Scripts version 2256### Date: 13.02.2024 / Download update size: 15 megabytes | ||||
| * updated WINE_LG to version 9-2 | ||||
| * updated versions: | ||||
| @@ -1201,7 +1307,7 @@ export WINE_FULLSCREEN_FSR="1" (by default) | ||||
| * updated db files | ||||
|  | ||||
| ###Scripts version 2065### | ||||
| * HOTFIX - correcting the termination of the yad and yad_v12_3 processes | ||||
| * HOTFIX - correcting the termination of the yad and yad_v13_0 processes | ||||
|  | ||||
| ###Scripts version 2064### | ||||
| * added notification to the user about possible problems when starting in a Wayland session (once and only under Wayland) | ||||
|   | ||||
| @@ -2,6 +2,117 @@ | ||||
| ----------------------------------------- | ||||
| История изменений: | ||||
|  | ||||
| ###Scripts version 2274### Дата: 07.04.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * добавлена предыдущая тема для PortProton, включается добавлением "export GUI_THEME=classic" в "data/user.conf" | ||||
|  | ||||
| ###Scripts version 2273### Дата: 06.04.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * обновлён интерфейс PortProton | ||||
| * улучшено качество иконки в трее | ||||
| * улучшена локализация | ||||
| * добавлен лончер CatsLauncher (игра "Передний край") в "АВТОУСТАНОВКИ" | ||||
| * добавлена начальная поддержка стилей .css (GTK+) | ||||
| * обновлен префикс DOTNET | ||||
|  | ||||
| ###Scripts version 2272### Дата: 04.04.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * рефакторинг скриптов: | ||||
|     - скрипт yad_gui объединён с functions_helper | ||||
|     - скрипт runlib объединён с start.sh | ||||
|     - все функции из runlib, yad_gui и start.sh перенесены в functions_helper | ||||
| * исправлено обновление winetricks на некоторых системах (спасибо Boria138) | ||||
| * при чистке префикса не удаляются каталоги Common Files из Program Files (для сохранения библиотек vst) | ||||
| * обновлено ПО интерфейса (yad) до версии 13.0 с поддержкой кириллицы по умолчанию | ||||
| * дополнительные небольшие улучшения интерфейса | ||||
|  | ||||
| ###Scripts version 2271### Дата: 03.04.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * улучшен интерфейс менеджера префиксов (xterm заменен на стандартный интерфейс PortProton) | ||||
| * исправлена работа русского языка в EAapp (для применения необходимо запустить EALauncher и в PP выбрать НАСТРОЙКИ -> СБРОСИТЬ НАСТРОЙКИ) | ||||
| * исправлен запуск игры "DragonAge: Origin" из EAapp | ||||
| * множество небольших улучшений скриптов | ||||
|  | ||||
| ###Scripts version 2270### Дата: 31.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * добавлена поддержка игры Horizon Forbidden West (для применения необходимо запустить exe игры и выбрать НАСТРОЙКИ -> СБРОСИТЬ НАСТРОЙКИ) | ||||
| * исправлена работа WINE от Kron4ek и возвращена возможность его скачивания с помощью GET-OTHER-WINE | ||||
| * исправлен запуск GET-OTHER-WINE (интерфейс скачивания сторонних версий WINE-PROTON) при запуске exe файлов | ||||
|  | ||||
| ###Scripts version 2269### Дата: 29.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * добавлены улучшения при использовании cистемного WINE | ||||
| * завершена подготовка скриптов PortProton для работы во flatpak | ||||
|  | ||||
| ###Scripts version 2268### Дата: 27.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * исправлен запуск некоторых 32-х битных игр на префиксе DEFAULT. Примеры: | ||||
|     LEGO Marvel Super Heroes | ||||
|     LEGO The Lord Of The Rings | ||||
|     LEGO Star Wars - The Clone Wars | ||||
|     Warhammer 40,000 Space Marine | ||||
|     Star Wars The Force Unleashed | ||||
|     Wolverine | ||||
|  | ||||
| ###Scripts version 2267### Дата: 27.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * реализовано двукратное ускорение обновления префикса на всех системах | ||||
| * улучшен функционал настроек для exe файлов (EDIT_DB) | ||||
| * исправлена автоустановка BattleNET | ||||
|  | ||||
| ###Scripts version 2266### Дата: 26.03.2024 / Размер скачиваемого обновления: 170 мегабайт | ||||
| * HOTFIX - исправлен баг гитхаба при доступе к plugins | ||||
|  | ||||
| ###Scripts version 2265### Дата: 26.03.2024 / Размер скачиваемого обновления: 570 мегабайт | ||||
| * в префикс DEFAULT добавлен компонент faudio (необходим для игр на движке Creation Engine, пример The Elder Scrolls) | ||||
| * обновлен пакет библиотек plugins_v14: | ||||
|     перенесены из пакета libs: d3d_extras, reshade и default_pfx | ||||
|     добавлены портативные версии: yad_v13_0, perl, exiftool (спасибо Boria138) | ||||
| * обновлен пакет библиотек libs_v47: | ||||
|     pressure-vessel 0.20240306.0 | ||||
|     sniper 0.20240307.80401 | ||||
| * обновлен PROTON_LG до версии "9-2" | ||||
| * обновлены версии: | ||||
|     DXVK_GIT "2.3.1" | ||||
|     VKD3D_GIT "1.1-3973" | ||||
| * добавлено сохранение изменений настроек в EDIT_DB при искользовании кнопки "ОТКРЫТЬ ФАЙЛ НАСТРОЕК" | ||||
| * улучшена поддержка тестовой сборки PortProton во flatpak | ||||
| * множество небольших улучшений скриптов | ||||
|  | ||||
| ###Scripts version 2264### Дата: 15.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * добавлен выбор завершения первой сессии PortProton при запуске второй | ||||
| * добавлена автоустановка игры "Pulse Online" | ||||
|  | ||||
| ###Scripts version 2263### Дата: 15.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * файл блокировки второй сессии перенесен в "/tmp/portproton.lock" | ||||
| * при запуске с терминала, явно указано что найден файл блокировки и его месторасположение | ||||
|  | ||||
| ###Scripts version 2262### Дата: 14.03.2024 / Размер скачиваемого обновления: 230 мегабайт | ||||
| * добавлено предупреждение при запуске второй сессии PortProton | ||||
| * добавлена возможность отключения контейнера | ||||
| * добавлена возможность использования системного WINE | ||||
| * обновлен PROTON_LG до версии 9-1 | ||||
| * обновлены версии: | ||||
|     DXVK_GIT "2.3-90" | ||||
|     VKD3D_GIT "1.1-3954" | ||||
| * исправлена установка библиотек из префикс менеджера на ОС "OpenSUSE" (спасибо Boria138) | ||||
| * для Black Desert Online более не требуется отдельной версии PROTON | ||||
|  | ||||
| ###Scripts version 2261### Дата: 07.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * HOTFIX - изменения настроек игры из лаунчера Black Desert Online | ||||
|  | ||||
| ###Scripts version 2260### Дата: 07.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * добавлена автоустановка игры Black Desert Online | ||||
| * исправлен запрос наполнения префикса во время исползования автоустановки игр/лаунчеров | ||||
|  | ||||
| ###Scripts version 2259### Дата: 06.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * для Steam Deck в режиме Gaming Mode исправлена возможность обновления PortProton (текущее обновление требуется устнановить из режима рабочего стола) | ||||
|  | ||||
| ###Scripts version 2258### Дата: 06.03.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * исправлено сохранение сложных аргументов для exe файла (пример: "- /B /TX /lang:01 /tex:1 /spg:50 KingKongTheGame.bf") | ||||
| * добавлено автовостановление ярлыка в меню для Steam Deck после обновления SteamOS (необходим запуск PP любым другим ярлыком любой игры, или из режима Gaming Mode) | ||||
| * для Steam Deck в режиме Gaming Mode отключено использование gamemode (сама сессия использует предустановленный gamemode в SteamOS) | ||||
|  | ||||
| ###Scripts version 2257### Дата: 15.02.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * для всех setup.exe автоматически выбирается WINE_LG (исправляет ошибки unarc.dll) | ||||
| * добавлена функция отключения композитинга (спасибо Boria138) | ||||
| * для префиксов созданных вручную, добавлен выбор его наполнения (чистый, или с рекомендованными библиотеками) | ||||
| * улучшена функция обновления префикса при смене версии WINE-PROTON | ||||
| * улучшение переводов  | ||||
| * множество небольших улучшений скриптов | ||||
|  | ||||
| ###Scripts version 2256### Дата: 13.02.2024 / Размер скачиваемого обновления: 15 мегабайт | ||||
| * обновлен WINE_LG до версии 9-2 | ||||
| * обновлены версии: | ||||
| @@ -1012,7 +1123,7 @@ export WINE_FULLSCREEN_FSR="1" (используется по умолчанию | ||||
| * обновлены db файлы | ||||
|  | ||||
| ###Scripts version 2065### | ||||
| * HOTFIX - корректировка завершения процессов yad и yad_v12_3 | ||||
| * HOTFIX - корректировка завершения процессов yad и yad_v13_0 | ||||
|  | ||||
| ###Scripts version 2064### | ||||
| * добавлено уведомление пользователю о возможных проблемах при запуске в Wayland сессии (один раз и только под Wayland) | ||||
| @@ -1419,7 +1530,7 @@ PS: не забывает для активации добавить перем | ||||
|  | ||||
| ###Scripts version 1104### | ||||
| * крупное обновлеение контейнера (libs_v16): | ||||
|     - добавлен /bin/yad_v12_3 версии 10.1 скомпилированный специально для будущего меню в трее) | ||||
|     - добавлен /bin/yad_v13_0 версии 10.1 скомпилированный специально для будущего меню в трее) | ||||
|     - обновлен MANGOHUD (требуется проверка под OpenGL) | ||||
|     - обновлен 7z необходимый для будущей автоматической установки Rockstar Game Launcher | ||||
| * для тестовой поддержки wayland добавлена переменная в скрипт var: GDK_BACKEND="x11" | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/24.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 4.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/28.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 4.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/32.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 4.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/36.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 4.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/40.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 4.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/Alt_PP.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 112 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/bdo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 9.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/catslauncher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.4 KiB | 
| Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 8.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/close.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/covers/lol_cover.jpg
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 76 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/covers/pw_loading_cover.gif
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 3.5 MiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/covers/pw_update_pfx_cover.gif
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 3.5 MiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/fulqrumgames.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/history.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/history_from_web.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 5.3 KiB | 
| Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 5.3 KiB | 
| Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 6.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/pulseonline.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.9 KiB | 
| Before Width: | Height: | Size: 468 B | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/wine_file.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.3 KiB | 
							
								
								
									
										602
									
								
								data_from_portwine/img/gui/wine_file.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,602 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||||
|  | ||||
| <svg | ||||
|    width="28" | ||||
|    version="1.1" | ||||
|    height="28" | ||||
|    viewBox="0 0 28 28" | ||||
|    id="svg1" | ||||
|    sodipodi:docname="wine_file.svg" | ||||
|    inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" | ||||
|    xml:space="preserve" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns:xlink="http://www.w3.org/1999/xlink" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview | ||||
|      id="namedview1" | ||||
|      pagecolor="#ffffff" | ||||
|      bordercolor="#000000" | ||||
|      borderopacity="0.25" | ||||
|      inkscape:showpageshadow="2" | ||||
|      inkscape:pageopacity="0.0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      inkscape:deskcolor="#d1d1d1" | ||||
|      inkscape:zoom="22.627417" | ||||
|      inkscape:cx="15.512155" | ||||
|      inkscape:cy="13.390835" | ||||
|      inkscape:window-width="2991" | ||||
|      inkscape:window-height="1194" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="0" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="layer1" /><defs | ||||
|      id="defs5455"><linearGradient | ||||
|        id="linearGradient4256"><stop | ||||
|          style="stop-color:#8cbdf8" | ||||
|          id="stop4258" /><stop | ||||
|          offset="1" | ||||
|          style="stop-color:#d5e8ff" | ||||
|          id="stop4260" /></linearGradient><linearGradient | ||||
|        id="linearGradient4232"><stop | ||||
|          style="stop-color:#3889e9" | ||||
|          id="stop4234-0" /><stop | ||||
|          offset="1" | ||||
|          style="stop-color:#5ea5fb" | ||||
|          id="stop4236" /></linearGradient><linearGradient | ||||
|        id="a" | ||||
|        x1="300" | ||||
|        x2="300" | ||||
|        y1="44" | ||||
|        y2="556" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          offset="0" | ||||
|          stop-color="#46bac6" | ||||
|          id="stop1" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#1497a5" | ||||
|          id="stop2" /></linearGradient><linearGradient | ||||
|        id="linearGradient4194"><stop | ||||
|          style="stop-color:#b5006a" | ||||
|          id="stop4196" /><stop | ||||
|          offset="1" | ||||
|          style="stop-color:#c70073" | ||||
|          id="stop4198" /></linearGradient><linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient848" | ||||
|        id="linearGradient854" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x1="203.3689" | ||||
|        y1="55.640129" | ||||
|        x2="244.86897" | ||||
|        y2="55.640129" /><linearGradient | ||||
|        inkscape:collect="always" | ||||
|        id="linearGradient848"><stop | ||||
|          style="stop-color:#4b8bd4;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop844" /><stop | ||||
|          style="stop-color:#3b6ca7;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop846" /></linearGradient><linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient848" | ||||
|        id="linearGradient1004" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x1="387.57144" | ||||
|        y1="505.798" | ||||
|        x2="445.57141" | ||||
|        y2="505.798" | ||||
|        gradientTransform="matrix(1.3888828,0,0,1,-172.49732,0)" /><linearGradient | ||||
|        id="linearGradient4301"><stop | ||||
|          style="stop-color:#f10000;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop4303" /><stop | ||||
|          style="stop-color:#b20000;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop4305" /></linearGradient><linearGradient | ||||
|        id="linearGradient4305"><stop | ||||
|          style="stop-color:#ffffff;stop-opacity:1;" | ||||
|          offset="0" | ||||
|          id="stop4307" /><stop | ||||
|          style="stop-color:#ffffff;stop-opacity:0;" | ||||
|          offset="1" | ||||
|          id="stop4309" /></linearGradient><linearGradient | ||||
|        id="linearGradient4428" | ||||
|        y1="4.7160001" | ||||
|        x1="17.483" | ||||
|        y2="39.833" | ||||
|        x2="37.757999" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)"><stop | ||||
|          stop-color="#3fc380" | ||||
|          id="stop4430" | ||||
|          style="stop-color:#3cc6ae;stop-opacity:1" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#3f8ed3" | ||||
|          id="stop4432" | ||||
|          style="stop-color:#3f7ad3;stop-opacity:1" /></linearGradient><linearGradient | ||||
|        id="a-2" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="translate(-384.57,-499.8)"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop7" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop9" /></linearGradient><linearGradient | ||||
|        id="b" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop12" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop14" /></linearGradient><linearGradient | ||||
|        id="c" | ||||
|        y1="522.79999" | ||||
|        x1="403.57001" | ||||
|        y2="534.79999" | ||||
|        x2="413.26001" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#020303" | ||||
|          id="stop17" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          stop-opacity="0" | ||||
|          id="stop19" /></linearGradient><linearGradient | ||||
|        xlink:href="#c" | ||||
|        id="d" | ||||
|        y1="521.79999" | ||||
|        x1="400.76999" | ||||
|        y2="533.59998" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="412.57001" /><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-3"><stop | ||||
|          id="stop4268" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop4270" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-6"><stop | ||||
|          id="stop4273" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop4275" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-5" | ||||
|        fill-rule="evenodd" /><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="a-35"><stop | ||||
|          id="stop4339" | ||||
|          stop-color="#3fc380" /><stop | ||||
|          id="stop4341" | ||||
|          stop-color="#3f8ed3" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,31.34)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="b-62" | ||||
|        xlink:href="#a-35" /><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,16.34)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="c-9" | ||||
|        xlink:href="#a-35" /><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.0067,0.00423,1.56572,47.823,12.372)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="d-1"><stop | ||||
|          id="stop4346" | ||||
|          stop-color="#148e76" /><stop | ||||
|          id="stop4348" | ||||
|          stop-color="#218059" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(0,-2)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="43" | ||||
|        y2="31" | ||||
|        x1="4" | ||||
|        y1="18" | ||||
|        id="e-2"><stop | ||||
|          id="stop4351" | ||||
|          stop-color="#292c2f" | ||||
|          style="stop-color:#000000;stop-opacity:1" /><stop | ||||
|          id="stop4353" | ||||
|          stop-opacity="0" | ||||
|          offset="1" | ||||
|          style="stop-color:#000000;stop-opacity:0.32644629" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(0,14)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="44" | ||||
|        y2="28" | ||||
|        x1="30.625" | ||||
|        y1="14" | ||||
|        id="f" | ||||
|        xlink:href="#e-2" /><linearGradient | ||||
|        gradientTransform="matrix(0.99376,0.0067,-0.00423,-1.56572,50.177,5.628)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="g" | ||||
|        xlink:href="#d-1" /><linearGradient | ||||
|        x1="428.81601" | ||||
|        gradientTransform="translate(-384.57,-499.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="388.86499" | ||||
|        y2="499.67899" | ||||
|        y1="547.63397" | ||||
|        id="a-9"><stop | ||||
|          id="stop7-3" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop9-6" | ||||
|          stop-color="#536161" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        x1="36" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="14" | ||||
|        y2="12" | ||||
|        y1="44" | ||||
|        id="b-0"><stop | ||||
|          style="stop-color:#bfc9c9;stop-opacity:1" | ||||
|          id="stop12-6" | ||||
|          stop-color="#536161" /><stop | ||||
|          style="stop-color:#fbfbfb;stop-opacity:1" | ||||
|          id="stop14-2" | ||||
|          stop-color="#f4f5f5" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(-384.57,-499.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="419.974" | ||||
|        y2="539.82501" | ||||
|        x1="418.57001" | ||||
|        y1="529.79999" | ||||
|        id="c-61"><stop | ||||
|          id="stop17-8" | ||||
|          stop-color="#292c2f" /><stop | ||||
|          id="stop19-7" | ||||
|          stop-opacity="0" | ||||
|          offset="1" /></linearGradient><style | ||||
|        type="text/css" | ||||
|        id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style><linearGradient | ||||
|        gradientTransform="translate(-404.99,-523.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="419.974" | ||||
|        y2="539.82501" | ||||
|        x1="406.50101" | ||||
|        y1="527.01398" | ||||
|        id="c-6"><stop | ||||
|          id="stop17-7" | ||||
|          stop-color="#292c2f" /><stop | ||||
|          id="stop19-5" | ||||
|          stop-opacity="0" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        xlink:href="#linearGradient4428" | ||||
|        id="linearGradient4408-1" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,43.823,-1.66)" | ||||
|        x1="9.875" | ||||
|        y1="-2.3239999" | ||||
|        x2="44.278" | ||||
|        y2="42.318001" /><linearGradient | ||||
|        id="a-8"><stop | ||||
|          id="stop4631" | ||||
|          stop-opacity=".742" | ||||
|          stop-color="#dcedfe" /><stop | ||||
|          id="stop4633" | ||||
|          stop-opacity="0" | ||||
|          stop-color="#dcedfe" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(15.653,1.018)" | ||||
|        x2="40.709" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="30.416" | ||||
|        x1="10.972" | ||||
|        y1="-0.017999999" | ||||
|        id="b-4"><stop | ||||
|          id="stop4636" /><stop | ||||
|          id="stop4638" | ||||
|          stop-opacity="0" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(23.03,5.02)" | ||||
|        x2="29.129999" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="22.129999" | ||||
|        x1="11" | ||||
|        y1="4" | ||||
|        id="c-5" | ||||
|        xlink:href="#b-4" /><linearGradient | ||||
|        gradientTransform="translate(-99.4835,-40.4835)" | ||||
|        x2="30.347" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="45.981998" | ||||
|        x1="7.3470001" | ||||
|        y1="6.9819999" | ||||
|        id="d-0"><stop | ||||
|          id="stop4642" | ||||
|          stop-color="#eeeeee" /><stop | ||||
|          id="stop4644" | ||||
|          stop-color="#cccccc" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="32" | ||||
|        y1="36" | ||||
|        id="e-3"><stop | ||||
|          id="stop4647" | ||||
|          stop-color="#c58c00" /><stop | ||||
|          id="stop4649" | ||||
|          stop-color="#ffc318" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="matrix(1,0,0,1.25,-111.4835,-50.4855)" | ||||
|        x2="19" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="33" | ||||
|        x1="23.219999" | ||||
|        y1="42.986" | ||||
|        id="f-6"><stop | ||||
|          id="stop4652" | ||||
|          stop-color="#70431c" /><stop | ||||
|          id="stop4654" | ||||
|          stop-color="#be8c5a" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(-106.4835,-44.4855)" | ||||
|        x2="21" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="46" | ||||
|        x1="13.98" | ||||
|        y1="38.957001" | ||||
|        id="g-1" | ||||
|        xlink:href="#b-4" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="2.987" | ||||
|        y1="43.922001" | ||||
|        id="h" | ||||
|        gradientTransform="translate(-122.5135,-45.5035)"><stop | ||||
|          id="stop4658" | ||||
|          stop-color="#22a7f0" /><stop | ||||
|          id="stop4660" | ||||
|          stop-color="#19b5fe" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="34.040001" | ||||
|        y1="43.922001" | ||||
|        id="i"><stop | ||||
|          id="stop4663" | ||||
|          stop-color="#c8e3fe" /><stop | ||||
|          id="stop4665" | ||||
|          stop-color="#e4f1fe" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="27" | ||||
|        x1="19" | ||||
|        y2="44" | ||||
|        y1="33.998001" | ||||
|        id="j"><stop | ||||
|          id="stop4668" | ||||
|          stop-color="#383e51" /><stop | ||||
|          id="stop4670" | ||||
|          stop-opacity="0" | ||||
|          stop-color="#655c6f" | ||||
|          offset="1" /></linearGradient><radialGradient | ||||
|        gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        r="16" | ||||
|        id="k" | ||||
|        xlink:href="#a-8" | ||||
|        cy="48.672001" | ||||
|        cx="31.01" /><radialGradient | ||||
|        gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        r="16" | ||||
|        id="l" | ||||
|        xlink:href="#a-8" | ||||
|        cy="38.130001" | ||||
|        cx="30.299999" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-0"><stop | ||||
|          id="stop4858" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop4860" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-63"><stop | ||||
|          id="stop4863" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop4865" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-0" | ||||
|        fill-rule="evenodd" /><linearGradient | ||||
|        xlink:href="#linearGradient4305" | ||||
|        id="linearGradient4311" | ||||
|        x1="16.75" | ||||
|        y1="-4.5" | ||||
|        x2="36" | ||||
|        y2="32" | ||||
|        gradientUnits="userSpaceOnUse" /><radialGradient | ||||
|        xlink:href="#linearGradient4301" | ||||
|        id="radialGradient4309" | ||||
|        cx="20.853001" | ||||
|        cy="17.349001" | ||||
|        fx="20.853001" | ||||
|        fy="17.349001" | ||||
|        r="8.1289997" | ||||
|        gradientTransform="matrix(-0.01162882,1.1950891,-1.274916,-0.0124056,46.239569,-9.6229889)" | ||||
|        gradientUnits="userSpaceOnUse" /><linearGradient | ||||
|        gradientTransform="translate(-384.57,-499.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-09"><stop | ||||
|          id="stop7-36" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop9-0" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-626"><stop | ||||
|          id="stop12-1" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop14-8" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-02" | ||||
|        fill-rule="evenodd" /><linearGradient | ||||
|        id="a-3-3" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop4268-7" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop4270-5" /></linearGradient><linearGradient | ||||
|        id="b-6-9" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop4273-2" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop4275-2" /></linearGradient><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e-5-8" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><style | ||||
|        id="current-color-scheme-8" | ||||
|        type="text/css"> | ||||
|    .ColorScheme-Text { color:#4d4d4d; } | ||||
|   </style><linearGradient | ||||
|        id="e-3-3" | ||||
|        y1="36" | ||||
|        y2="32" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"><stop | ||||
|          stop-color="#c58c00" | ||||
|          id="stop4647-2" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#ffc318" | ||||
|          id="stop4649-0" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(-122.5135,-45.5035)" | ||||
|        id="h-5" | ||||
|        y1="43.922001" | ||||
|        y2="2.987" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#22a7f0" | ||||
|          id="stop4658-5" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#19b5fe" | ||||
|          id="stop4660-4" /></linearGradient><linearGradient | ||||
|        id="i-7" | ||||
|        y1="43.922001" | ||||
|        y2="34.040001" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#c8e3fe" | ||||
|          id="stop4663-6" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#e4f1fe" | ||||
|          id="stop4665-5" /></linearGradient><radialGradient | ||||
|        cx="31.01" | ||||
|        cy="48.672001" | ||||
|        xlink:href="#a-8" | ||||
|        id="k-3" | ||||
|        r="16" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" /><radialGradient | ||||
|        cx="30.299999" | ||||
|        cy="38.130001" | ||||
|        xlink:href="#a-8" | ||||
|        id="l-7" | ||||
|        r="16" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" /><linearGradient | ||||
|        id="a-0-4" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop4858-5" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop4860-2" /></linearGradient><linearGradient | ||||
|        id="b-63-5" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop4863-4" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop4865-7" /></linearGradient><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e-0-4" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /></defs><metadata | ||||
|      id="metadata5458" /><g | ||||
|      inkscape:label="Capa 1" | ||||
|      inkscape:groupmode="layer" | ||||
|      id="layer1" | ||||
|      transform="translate(-384.57143,-515.798)"><circle | ||||
|        style="opacity:1;fill:#09bec8;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0" | ||||
|        id="path1" | ||||
|        cx="398.57144" | ||||
|        cy="529.79797" | ||||
|        r="14" /><path | ||||
|        id="rect11" | ||||
|        style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.337561" | ||||
|        d="m 390.91518,522.15542 c -1.17836,0 -2.12695,1.02085 -2.12695,2.29102 v 3.53125 c 0,-1.39758 0.85081,-1.98047 2.12695,-1.98047 h 3.4043 c 4.67925,-0.46574 3.86782,-2.29688 6.8457,-2.29688 h 5.00977 c 1.17828,0 2.18164,0.49449 2.18164,1.78516 v -1.03906 c 0,-1.27017 -0.9486,-2.29102 -2.12696,-2.29102 z m 10.24805,2.1543 c -2.97788,0 -2.16643,1.83309 -6.84571,2.29883 h -3.40429 c -1.27614,0 -2.12696,0.5829 -2.12696,1.98046 v 6.52149 c 0,1.29066 0.94866,2.33008 2.12696,2.33008 h 15.31445 c 1.1783,0 2.12695,-1.03977 2.12695,-2.33008 v -0.52735 c 2.9e-4,-0.0157 0.002,-0.0311 0.002,-0.0469 v -0.0352 c 0,0.0159 -0.002,0.0311 -0.002,0.0469 v -8.45313 c 0,-1.29067 -1.00334,-1.78515 -2.18164,-1.78515 z m -6.08008,2.87304 h 0.69726 5.58204 0.002 0.69531 v 2.44336 c 0,1.80869 -1.3761,3.2955 -3.13867,3.47071 v 2.45898 h 1.74414 c 0.38651,0 0.69727,0.31076 0.69727,0.69727 h -5.58204 c 0,-0.38651 0.31076,-0.69727 0.69727,-0.69727 h 1.74414 v -2.45898 c -1.76257,-0.17521 -3.13867,-1.66202 -3.13867,-3.47071 z m 0.69726,2.47461 c 0.002,0.17292 0.0214,0.34158 0.0527,0.50586 l 0.54101,-0.043 0.0371,-0.46289 z m 0.7129,0 0.0371,0.46289 0.96485,0.0781 -0.96485,0.0801 -0.0781,0.96289 -0.0781,-0.96289 -0.52734,-0.043 c 0.27399,1.25618 1.37505,2.20312 2.71289,2.20312 1.54008,0 2.79116,-1.2439 2.80274,-2.78125 z m 0.58984,0.72657 0.041,0.55078 0.55079,0.041 -0.55079,0.043 -0.041,0.55078 -0.041,-0.55078 -0.55078,-0.043 0.55078,-0.041 z" /></g></svg> | ||||
| After Width: | Height: | Size: 20 KiB | 
							
								
								
									
										
											BIN
										
									
								
								data_from_portwine/img/gui/wine_system.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.3 KiB | 
							
								
								
									
										866
									
								
								data_from_portwine/img/gui/wine_system.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,866 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||||
|  | ||||
| <svg | ||||
|    width="28" | ||||
|    version="1.1" | ||||
|    height="28" | ||||
|    viewBox="0 0 28 28" | ||||
|    id="svg1" | ||||
|    sodipodi:docname="wine_system.svg" | ||||
|    inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" | ||||
|    xml:space="preserve" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns:xlink="http://www.w3.org/1999/xlink" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview | ||||
|      id="namedview1" | ||||
|      pagecolor="#ffffff" | ||||
|      bordercolor="#000000" | ||||
|      borderopacity="0.25" | ||||
|      inkscape:showpageshadow="2" | ||||
|      inkscape:pageopacity="0.0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      inkscape:deskcolor="#d1d1d1" | ||||
|      inkscape:zoom="16" | ||||
|      inkscape:cx="7.5" | ||||
|      inkscape:cy="8.5" | ||||
|      inkscape:window-width="2991" | ||||
|      inkscape:window-height="1194" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="0" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="layer1" /><defs | ||||
|      id="defs5455"><linearGradient | ||||
|        id="linearGradient4256"><stop | ||||
|          style="stop-color:#8cbdf8" | ||||
|          id="stop4258" /><stop | ||||
|          offset="1" | ||||
|          style="stop-color:#d5e8ff" | ||||
|          id="stop4260" /></linearGradient><linearGradient | ||||
|        id="linearGradient4232"><stop | ||||
|          style="stop-color:#3889e9" | ||||
|          id="stop4234-0" /><stop | ||||
|          offset="1" | ||||
|          style="stop-color:#5ea5fb" | ||||
|          id="stop4236" /></linearGradient><linearGradient | ||||
|        id="a" | ||||
|        x1="300" | ||||
|        x2="300" | ||||
|        y1="44" | ||||
|        y2="556" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          offset="0" | ||||
|          stop-color="#46bac6" | ||||
|          id="stop1" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#1497a5" | ||||
|          id="stop2" /></linearGradient><linearGradient | ||||
|        id="linearGradient4194"><stop | ||||
|          style="stop-color:#b5006a" | ||||
|          id="stop4196" /><stop | ||||
|          offset="1" | ||||
|          style="stop-color:#c70073" | ||||
|          id="stop4198" /></linearGradient><linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient848" | ||||
|        id="linearGradient854" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x1="203.3689" | ||||
|        y1="55.640129" | ||||
|        x2="244.86897" | ||||
|        y2="55.640129" /><linearGradient | ||||
|        inkscape:collect="always" | ||||
|        id="linearGradient848"><stop | ||||
|          style="stop-color:#4b8bd4;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop844" /><stop | ||||
|          style="stop-color:#3b6ca7;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop846" /></linearGradient><linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient848" | ||||
|        id="linearGradient1004" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x1="387.57144" | ||||
|        y1="505.798" | ||||
|        x2="445.57141" | ||||
|        y2="505.798" | ||||
|        gradientTransform="matrix(1.3888828,0,0,1,-172.49732,0)" /><linearGradient | ||||
|        id="linearGradient4301"><stop | ||||
|          style="stop-color:#f10000;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop4303" /><stop | ||||
|          style="stop-color:#b20000;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop4305" /></linearGradient><linearGradient | ||||
|        id="linearGradient4305"><stop | ||||
|          style="stop-color:#ffffff;stop-opacity:1;" | ||||
|          offset="0" | ||||
|          id="stop4307" /><stop | ||||
|          style="stop-color:#ffffff;stop-opacity:0;" | ||||
|          offset="1" | ||||
|          id="stop4309" /></linearGradient><linearGradient | ||||
|        id="linearGradient4428" | ||||
|        y1="4.7160001" | ||||
|        x1="17.483" | ||||
|        y2="39.833" | ||||
|        x2="37.757999" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)"><stop | ||||
|          stop-color="#3fc380" | ||||
|          id="stop4430" | ||||
|          style="stop-color:#3cc6ae;stop-opacity:1" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#3f8ed3" | ||||
|          id="stop4432" | ||||
|          style="stop-color:#3f7ad3;stop-opacity:1" /></linearGradient><linearGradient | ||||
|        id="a-2" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="translate(-384.57,-499.8)"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop7" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop9" /></linearGradient><linearGradient | ||||
|        id="b" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop12" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop14" /></linearGradient><linearGradient | ||||
|        id="c" | ||||
|        y1="522.79999" | ||||
|        x1="403.57001" | ||||
|        y2="534.79999" | ||||
|        x2="413.26001" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#020303" | ||||
|          id="stop17" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          stop-opacity="0" | ||||
|          id="stop19" /></linearGradient><linearGradient | ||||
|        xlink:href="#c" | ||||
|        id="d" | ||||
|        y1="521.79999" | ||||
|        x1="400.76999" | ||||
|        y2="533.59998" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="412.57001" /><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-3"><stop | ||||
|          id="stop4268" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop4270" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-6"><stop | ||||
|          id="stop4273" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop4275" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-5" | ||||
|        fill-rule="evenodd" /><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="a-35"><stop | ||||
|          id="stop4339" | ||||
|          stop-color="#3fc380" /><stop | ||||
|          id="stop4341" | ||||
|          stop-color="#3f8ed3" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,31.34)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="b-62" | ||||
|        xlink:href="#a-35" /><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,16.34)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="c-9" | ||||
|        xlink:href="#a-35" /><linearGradient | ||||
|        gradientTransform="matrix(-0.99376,-0.0067,0.00423,1.56572,47.823,12.372)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="d-1"><stop | ||||
|          id="stop4346" | ||||
|          stop-color="#148e76" /><stop | ||||
|          id="stop4348" | ||||
|          stop-color="#218059" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(0,-2)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="43" | ||||
|        y2="31" | ||||
|        x1="4" | ||||
|        y1="18" | ||||
|        id="e-2"><stop | ||||
|          id="stop4351" | ||||
|          stop-color="#292c2f" | ||||
|          style="stop-color:#000000;stop-opacity:1" /><stop | ||||
|          id="stop4353" | ||||
|          stop-opacity="0" | ||||
|          offset="1" | ||||
|          style="stop-color:#000000;stop-opacity:0.32644629" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(0,14)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="44" | ||||
|        y2="28" | ||||
|        x1="30.625" | ||||
|        y1="14" | ||||
|        id="f" | ||||
|        xlink:href="#e-2" /><linearGradient | ||||
|        gradientTransform="matrix(0.99376,0.0067,-0.00423,-1.56572,50.177,5.628)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="37.757999" | ||||
|        y2="39.833" | ||||
|        x1="17.483" | ||||
|        y1="4.7160001" | ||||
|        id="g" | ||||
|        xlink:href="#d-1" /><linearGradient | ||||
|        x1="428.81601" | ||||
|        gradientTransform="translate(-384.57,-499.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="388.86499" | ||||
|        y2="499.67899" | ||||
|        y1="547.63397" | ||||
|        id="a-9"><stop | ||||
|          id="stop7-3" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop9-6" | ||||
|          stop-color="#536161" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        x1="36" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="14" | ||||
|        y2="12" | ||||
|        y1="44" | ||||
|        id="b-0"><stop | ||||
|          style="stop-color:#bfc9c9;stop-opacity:1" | ||||
|          id="stop12-6" | ||||
|          stop-color="#536161" /><stop | ||||
|          style="stop-color:#fbfbfb;stop-opacity:1" | ||||
|          id="stop14-2" | ||||
|          stop-color="#f4f5f5" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(-384.57,-499.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="419.974" | ||||
|        y2="539.82501" | ||||
|        x1="418.57001" | ||||
|        y1="529.79999" | ||||
|        id="c-61"><stop | ||||
|          id="stop17-8" | ||||
|          stop-color="#292c2f" /><stop | ||||
|          id="stop19-7" | ||||
|          stop-opacity="0" | ||||
|          offset="1" /></linearGradient><style | ||||
|        type="text/css" | ||||
|        id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style><linearGradient | ||||
|        gradientTransform="translate(-404.99,-523.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="419.974" | ||||
|        y2="539.82501" | ||||
|        x1="406.50101" | ||||
|        y1="527.01398" | ||||
|        id="c-6"><stop | ||||
|          id="stop17-7" | ||||
|          stop-color="#292c2f" /><stop | ||||
|          id="stop19-5" | ||||
|          stop-opacity="0" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        xlink:href="#linearGradient4428" | ||||
|        id="linearGradient4408-1" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,43.823,-1.66)" | ||||
|        x1="9.875" | ||||
|        y1="-2.3239999" | ||||
|        x2="44.278" | ||||
|        y2="42.318001" /><linearGradient | ||||
|        id="a-8"><stop | ||||
|          id="stop4631" | ||||
|          stop-opacity=".742" | ||||
|          stop-color="#dcedfe" /><stop | ||||
|          id="stop4633" | ||||
|          stop-opacity="0" | ||||
|          stop-color="#dcedfe" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(15.653,1.018)" | ||||
|        x2="40.709" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="30.416" | ||||
|        x1="10.972" | ||||
|        y1="-0.017999999" | ||||
|        id="b-4"><stop | ||||
|          id="stop4636" /><stop | ||||
|          id="stop4638" | ||||
|          stop-opacity="0" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(23.03,5.02)" | ||||
|        x2="29.129999" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="22.129999" | ||||
|        x1="11" | ||||
|        y1="4" | ||||
|        id="c-5" | ||||
|        xlink:href="#b-4" /><linearGradient | ||||
|        gradientTransform="translate(-99.4835,-40.4835)" | ||||
|        x2="30.347" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="45.981998" | ||||
|        x1="7.3470001" | ||||
|        y1="6.9819999" | ||||
|        id="d-0"><stop | ||||
|          id="stop4642" | ||||
|          stop-color="#eeeeee" /><stop | ||||
|          id="stop4644" | ||||
|          stop-color="#cccccc" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="32" | ||||
|        y1="36" | ||||
|        id="e-3"><stop | ||||
|          id="stop4647" | ||||
|          stop-color="#c58c00" /><stop | ||||
|          id="stop4649" | ||||
|          stop-color="#ffc318" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="matrix(1,0,0,1.25,-111.4835,-50.4855)" | ||||
|        x2="19" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="33" | ||||
|        x1="23.219999" | ||||
|        y1="42.986" | ||||
|        id="f-6"><stop | ||||
|          id="stop4652" | ||||
|          stop-color="#70431c" /><stop | ||||
|          id="stop4654" | ||||
|          stop-color="#be8c5a" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(-106.4835,-44.4855)" | ||||
|        x2="21" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="46" | ||||
|        x1="13.98" | ||||
|        y1="38.957001" | ||||
|        id="g-1" | ||||
|        xlink:href="#b-4" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="2.987" | ||||
|        y1="43.922001" | ||||
|        id="h" | ||||
|        gradientTransform="translate(-122.5135,-45.5035)"><stop | ||||
|          id="stop4658" | ||||
|          stop-color="#22a7f0" /><stop | ||||
|          id="stop4660" | ||||
|          stop-color="#19b5fe" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="34.040001" | ||||
|        y1="43.922001" | ||||
|        id="i"><stop | ||||
|          id="stop4663" | ||||
|          stop-color="#c8e3fe" /><stop | ||||
|          id="stop4665" | ||||
|          stop-color="#e4f1fe" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="27" | ||||
|        x1="19" | ||||
|        y2="44" | ||||
|        y1="33.998001" | ||||
|        id="j"><stop | ||||
|          id="stop4668" | ||||
|          stop-color="#383e51" /><stop | ||||
|          id="stop4670" | ||||
|          stop-opacity="0" | ||||
|          stop-color="#655c6f" | ||||
|          offset="1" /></linearGradient><radialGradient | ||||
|        gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        r="16" | ||||
|        id="k" | ||||
|        xlink:href="#a-8" | ||||
|        cy="48.672001" | ||||
|        cx="31.01" /><radialGradient | ||||
|        gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        r="16" | ||||
|        id="l" | ||||
|        xlink:href="#a-8" | ||||
|        cy="38.130001" | ||||
|        cx="30.299999" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-0"><stop | ||||
|          id="stop4858" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop4860" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-63"><stop | ||||
|          id="stop4863" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop4865" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-0" | ||||
|        fill-rule="evenodd" /><linearGradient | ||||
|        xlink:href="#linearGradient4305" | ||||
|        id="linearGradient4311" | ||||
|        x1="16.75" | ||||
|        y1="-4.5" | ||||
|        x2="36" | ||||
|        y2="32" | ||||
|        gradientUnits="userSpaceOnUse" /><radialGradient | ||||
|        xlink:href="#linearGradient4301" | ||||
|        id="radialGradient4309" | ||||
|        cx="20.853001" | ||||
|        cy="17.349001" | ||||
|        fx="20.853001" | ||||
|        fy="17.349001" | ||||
|        r="8.1289997" | ||||
|        gradientTransform="matrix(-0.01162882,1.1950891,-1.274916,-0.0124056,46.239569,-9.6229889)" | ||||
|        gradientUnits="userSpaceOnUse" /><linearGradient | ||||
|        gradientTransform="translate(-384.57,-499.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-09"><stop | ||||
|          id="stop7-36" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop9-0" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-626"><stop | ||||
|          id="stop12-1" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop14-8" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-02" | ||||
|        fill-rule="evenodd" /><linearGradient | ||||
|        id="a-3-3" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop4268-7" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop4270-5" /></linearGradient><linearGradient | ||||
|        id="b-6-9" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop4273-2" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop4275-2" /></linearGradient><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e-5-8" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><style | ||||
|        id="current-color-scheme-8" | ||||
|        type="text/css"> | ||||
|    .ColorScheme-Text { color:#4d4d4d; } | ||||
|   </style><linearGradient | ||||
|        id="e-3-3" | ||||
|        y1="36" | ||||
|        y2="32" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"><stop | ||||
|          stop-color="#c58c00" | ||||
|          id="stop4647-2" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#ffc318" | ||||
|          id="stop4649-0" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(-122.5135,-45.5035)" | ||||
|        id="h-5" | ||||
|        y1="43.922001" | ||||
|        y2="2.987" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#22a7f0" | ||||
|          id="stop4658-5" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#19b5fe" | ||||
|          id="stop4660-4" /></linearGradient><linearGradient | ||||
|        id="i-7" | ||||
|        y1="43.922001" | ||||
|        y2="34.040001" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#c8e3fe" | ||||
|          id="stop4663-6" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#e4f1fe" | ||||
|          id="stop4665-5" /></linearGradient><radialGradient | ||||
|        cx="31.01" | ||||
|        cy="48.672001" | ||||
|        xlink:href="#a-8" | ||||
|        id="k-3" | ||||
|        r="16" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" /><radialGradient | ||||
|        cx="30.299999" | ||||
|        cy="38.130001" | ||||
|        xlink:href="#a-8" | ||||
|        id="l-7" | ||||
|        r="16" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" /><linearGradient | ||||
|        id="a-0-4" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop4858-5" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop4860-2" /></linearGradient><linearGradient | ||||
|        id="b-63-5" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop4863-4" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop4865-7" /></linearGradient><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e-0-4" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient | ||||
|        id="a-87" | ||||
|        x1="300" | ||||
|        x2="300" | ||||
|        y1="44" | ||||
|        y2="556" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          offset="0" | ||||
|          stop-color="#46bac6" | ||||
|          id="stop1-9" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#1497a5" | ||||
|          id="stop2-2" /></linearGradient><linearGradient | ||||
|        id="a-2-7" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="translate(-384.57,-499.8)"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop7-361" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop9-2" /></linearGradient><linearGradient | ||||
|        id="b-9" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop12-3" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop14-1" /></linearGradient><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e-7" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-3-8"><stop | ||||
|          id="stop4268-4" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop4270-50" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-6-3"><stop | ||||
|          id="stop4273-6" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop4275-1" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-5-0" | ||||
|        fill-rule="evenodd" /><style | ||||
|        type="text/css" | ||||
|        id="current-color-scheme-6">.ColorScheme-Text { color: #fcfcfc; } </style><linearGradient | ||||
|        gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        y2="32" | ||||
|        y1="36" | ||||
|        id="e-3-7"><stop | ||||
|          id="stop4647-4" | ||||
|          stop-color="#c58c00" /><stop | ||||
|          id="stop4649-4" | ||||
|          stop-color="#ffc318" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="2.987" | ||||
|        y1="43.922001" | ||||
|        id="h-7" | ||||
|        gradientTransform="translate(-122.5135,-45.5035)"><stop | ||||
|          id="stop4658-8" | ||||
|          stop-color="#22a7f0" /><stop | ||||
|          id="stop4660-6" | ||||
|          stop-color="#19b5fe" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="34.040001" | ||||
|        y1="43.922001" | ||||
|        id="i-8"><stop | ||||
|          id="stop4663-8" | ||||
|          stop-color="#c8e3fe" /><stop | ||||
|          id="stop4665-4" | ||||
|          stop-color="#e4f1fe" | ||||
|          offset="1" /></linearGradient><radialGradient | ||||
|        gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        r="16" | ||||
|        id="k-4" | ||||
|        xlink:href="#a-8" | ||||
|        cy="48.672001" | ||||
|        cx="31.01" /><radialGradient | ||||
|        gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        r="16" | ||||
|        id="l-9" | ||||
|        xlink:href="#a-8" | ||||
|        cy="38.130001" | ||||
|        cx="30.299999" /><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-0-2"><stop | ||||
|          id="stop4858-0" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop4860-6" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-63-8"><stop | ||||
|          id="stop4863-9" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop4865-2" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-0-6" | ||||
|        fill-rule="evenodd" /><radialGradient | ||||
|        xlink:href="#linearGradient4301" | ||||
|        id="radialGradient4309-6" | ||||
|        cx="20.853001" | ||||
|        cy="17.349001" | ||||
|        fx="20.853001" | ||||
|        fy="17.349001" | ||||
|        r="8.1289997" | ||||
|        gradientTransform="matrix(-0.01162882,1.1950891,-1.274916,-0.0124056,46.239569,-9.6229889)" | ||||
|        gradientUnits="userSpaceOnUse" /><linearGradient | ||||
|        gradientTransform="translate(-384.57,-499.8)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="503.79999" | ||||
|        y1="543.79999" | ||||
|        id="a-09-4"><stop | ||||
|          id="stop7-36-9" | ||||
|          stop-color="#2a2c2f" /><stop | ||||
|          id="stop9-0-5" | ||||
|          stop-color="#424649" | ||||
|          offset="1" /></linearGradient><linearGradient | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        y2="506.79999" | ||||
|        y1="532.79999" | ||||
|        id="b-626-0"><stop | ||||
|          id="stop12-1-4" | ||||
|          stop-color="#989a9b" /><stop | ||||
|          id="stop14-8-8" | ||||
|          stop-color="#f6f6f7" | ||||
|          offset="1" /></linearGradient><path | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" | ||||
|        id="e-02-7" | ||||
|        fill-rule="evenodd" /><linearGradient | ||||
|        id="a-3-3-1" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop4268-7-7" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop4270-5-2" /></linearGradient><linearGradient | ||||
|        id="b-6-9-7" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop4273-2-2" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop4275-2-2" /></linearGradient><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e-5-8-6" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><style | ||||
|        id="current-color-scheme-8-1" | ||||
|        type="text/css"> | ||||
|    .ColorScheme-Text { color:#4d4d4d; } | ||||
|   </style><linearGradient | ||||
|        id="e-3-3-0" | ||||
|        y1="36" | ||||
|        y2="32" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        x2="0" | ||||
|        gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"><stop | ||||
|          stop-color="#c58c00" | ||||
|          id="stop4647-2-6" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#ffc318" | ||||
|          id="stop4649-0-1" /></linearGradient><linearGradient | ||||
|        gradientTransform="translate(-122.5135,-45.5035)" | ||||
|        id="h-5-5" | ||||
|        y1="43.922001" | ||||
|        y2="2.987" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#22a7f0" | ||||
|          id="stop4658-5-9" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#19b5fe" | ||||
|          id="stop4660-4-4" /></linearGradient><linearGradient | ||||
|        id="i-7-9" | ||||
|        y1="43.922001" | ||||
|        y2="34.040001" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#c8e3fe" | ||||
|          id="stop4663-6-0" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#e4f1fe" | ||||
|          id="stop4665-5-9" /></linearGradient><radialGradient | ||||
|        cx="31.01" | ||||
|        cy="48.672001" | ||||
|        xlink:href="#a-8" | ||||
|        id="k-3-1" | ||||
|        r="16" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" /><radialGradient | ||||
|        cx="30.299999" | ||||
|        cy="38.130001" | ||||
|        xlink:href="#a-8" | ||||
|        id="l-7-7" | ||||
|        r="16" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" /><linearGradient | ||||
|        id="a-0-4-7" | ||||
|        y1="543.79999" | ||||
|        y2="503.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#2a2c2f" | ||||
|          id="stop4858-5-1" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#424649" | ||||
|          id="stop4860-2-1" /></linearGradient><linearGradient | ||||
|        id="b-63-5-5" | ||||
|        y1="532.79999" | ||||
|        y2="506.79999" | ||||
|        x2="0" | ||||
|        gradientUnits="userSpaceOnUse"><stop | ||||
|          stop-color="#989a9b" | ||||
|          id="stop4863-4-9" /><stop | ||||
|          offset="1" | ||||
|          stop-color="#f6f6f7" | ||||
|          id="stop4865-7-7" /></linearGradient><path | ||||
|        fill-rule="evenodd" | ||||
|        id="e-0-4-7" | ||||
|        d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /></defs><metadata | ||||
|      id="metadata5458" /><g | ||||
|      inkscape:label="Capa 1" | ||||
|      inkscape:groupmode="layer" | ||||
|      id="layer1" | ||||
|      transform="translate(-384.57143,-515.798)"><circle | ||||
|        style="opacity:1;fill:#09bec8;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0" | ||||
|        id="path1" | ||||
|        cx="398.57144" | ||||
|        cy="529.79797" | ||||
|        r="14" /><g | ||||
|        id="g4" | ||||
|        transform="translate(-0.1974492,1.22754)"><path | ||||
|          id="rect4364" | ||||
|          style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.07519;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" | ||||
|          d="m 392.60073,522.03433 v 4.18359 c 0,3.09604 2.35596,5.6415 5.37304,5.94141 v 4.20898 h -2.98632 c -0.66161,0 -1.19336,0.53175 -1.19336,1.19336 h 9.55468 c 0,-0.66161 -0.53175,-1.19336 -1.19336,-1.19336 h -2.98632 v -4.20898 c 2.65921,-0.26434 4.80387,-2.2746 5.27539,-4.86719 -0.019,0.006 -0.0376,0.012 -0.0566,0.0176 -0.0884,0.0258 -0.18291,0.008 -0.25391,-0.0508 l -0.40039,-0.33008 c -0.14585,0.0187 -0.29271,0.0277 -0.43945,0.0273 -0.34833,2.30652 -2.33891,4.07618 -4.74219,4.07618 -2.29007,0 -4.17552,-1.6212 -4.64453,-3.77149 l 0.90234,0.0723 0.13477,1.64843 0.13281,-1.64843 1.65234,-0.13672 -1.65234,-0.13281 -0.0625,-0.79297 h 5.92969 l 0.004,-0.26758 c -0.2074,-0.201 -0.38726,-0.42891 -0.53711,-0.67578 l -0.50781,-0.10742 c -0.0901,-0.0189 -0.16422,-0.0809 -0.19922,-0.16602 -0.1643,-0.39935 -0.26191,-0.82286 -0.28711,-1.25391 -0.005,-0.0919 0.0346,-0.18014 0.10743,-0.23632 l 0.4121,-0.31641 c 0.0279,-0.2876 0.0917,-0.57073 0.19141,-0.8418 l -0.18555,-0.37109 h -6.14843 z m 1.19336,4.23633 h 1.08007 l -0.0645,0.79297 -0.92578,0.0723 c -0.0537,-0.28121 -0.0865,-0.56922 -0.0898,-0.86523 z m 2.23047,1.24414 -0.0703,0.94336 -0.94336,0.0703 0.94336,0.0723 0.0703,0.94336 0.0703,-0.94336 0.9414,-0.0723 -0.9414,-0.0703 z" /><path | ||||
|          id="path1-9-6" | ||||
|          style="fill:#ffffff;stroke-width:0.139005" | ||||
|          d="m 403.61335,519.57925 c -0.21517,0 -0.43035,0.0178 -0.6433,0.0535 -0.0908,0.0153 -0.16807,0.0744 -0.20657,0.15792 l -0.21698,0.4708 c -0.27413,0.091 -0.53546,0.21699 -0.77761,0.37448 1.5e-4,0 -0.50335,-0.124 -0.50335,-0.124 -0.0894,-0.022 -0.18373,0.002 -0.25227,0.0631 -0.32124,0.28844 -0.59244,0.62843 -0.8022,1.00596 -0.0446,0.0804 -0.0467,0.17764 -0.005,0.25994 l 0.23281,0.46316 c -0.0997,0.27107 -0.16413,0.55381 -0.19207,0.84141 l -0.41078,0.31625 c -0.0728,0.0562 -0.11329,0.1447 -0.10787,0.23659 0.0252,0.43105 0.12192,0.85499 0.28622,1.25434 0.035,0.0851 0.1098,0.14738 0.19988,0.16628 l 0.50737,0.10675 c 0.14985,0.24687 0.33071,0.47373 0.53811,0.67473 l -0.009,0.51833 c -0.001,0.092 0.0426,0.17877 0.1176,0.23187 0.3528,0.2491 0.74468,0.43775 1.15933,0.55826 0.0884,0.0257 0.18362,0.006 0.25465,-0.0525 l 0.39979,-0.3301 c 0.28634,0.0368 0.57643,0.0368 0.86292,0 l 0.39979,0.3301 c 0.071,0.0585 0.16624,0.0783 0.25465,0.0525 0.41465,-0.12051 0.8065,-0.30916 1.15929,-0.55826 0.0751,-0.0531 0.11916,-0.13985 0.11763,-0.23187 l -0.009,-0.51833 c 0.20739,-0.201 0.38825,-0.42772 0.5381,-0.67473 l 0.50737,-0.10675 c 0.0901,-0.0189 0.16485,-0.0812 0.19988,-0.16628 0.1643,-0.39935 0.26105,-0.82329 0.28621,-1.25434 0.006,-0.0919 -0.035,-0.18043 -0.10786,-0.23659 l -0.41078,-0.31625 c -0.0278,-0.28746 -0.0924,-0.57034 -0.19211,-0.84141 l 0.23285,-0.46316 c 0.0414,-0.0823 0.0394,-0.17959 -0.005,-0.25994 -0.20976,-0.37753 -0.48096,-0.71752 -0.8022,-1.00596 -0.0685,-0.0614 -0.16289,-0.0851 -0.25227,-0.0631 l -0.50349,0.124 c -0.242,-0.15749 -0.50334,-0.2833 -0.77745,-0.37448 l -0.217,-0.4708 c -0.0385,-0.0835 -0.11579,-0.14263 -0.20655,-0.15792 -0.21296,-0.0357 -0.42813,-0.0535 -0.64332,-0.0535 z m 0,2.25755 a 1.5628182,1.5628182 0 0 1 1.56283,1.56283 1.5628182,1.5628182 0 0 1 -1.56283,1.56282 1.5628182,1.5628182 0 0 1 -1.56282,-1.56282 1.5628182,1.5628182 0 0 1 1.56282,-1.56283 z" /></g></g></svg> | ||||
| After Width: | Height: | Size: 30 KiB | 
| @@ -1,484 +0,0 @@ | ||||
| #!/usr/bin/env python3 | ||||
|  | ||||
| import os | ||||
| import re | ||||
| import shlex | ||||
| import shutil | ||||
| import logging | ||||
| from configparser import RawConfigParser | ||||
| from pathlib import Path | ||||
| from subprocess import run | ||||
| from types import SimpleNamespace | ||||
| try: | ||||
|     from PyQt6.QtCore import * # type: ignore | ||||
|     from PyQt6.QtGui import * # type: ignore | ||||
|     from PyQt6.QtWidgets import * # type: ignore | ||||
| except ModuleNotFoundError: | ||||
|     from PyQt5.QtCore import * # type: ignore | ||||
|     from PyQt5.QtGui import * # type: ignore | ||||
|     from PyQt5.QtWidgets import * # type: ignore | ||||
|  | ||||
| settings = QSettings('PPGL', 'PortProtonGamesLib') | ||||
| g = SimpleNamespace(locale = '') | ||||
|  | ||||
| class MainWindow(QMainWindow): | ||||
|     def __init__(self): | ||||
|         super().__init__() | ||||
|  | ||||
|         self.resize(QSize(800, 600)) | ||||
|         geometry = settings.value('geometry_main') | ||||
|         if geometry: | ||||
|             self.restoreGeometry(geometry) | ||||
|  | ||||
|         shortcut = RawConfigParser() | ||||
|         shortcut.read(os.getenv('HOME') + '/.local/share/applications/PortProton.desktop') | ||||
|         scripts_dir = shortcut.get('Desktop Entry', 'Path', fallback=os.getenv('HOME') + '/.local/share/PortWINE/PortProton/data/scripts') | ||||
|         if not scripts_dir or not Path(scripts_dir).is_dir(): | ||||
|             QMessageBox.critical(self, 'Error', 'Can not find installed PortProton') | ||||
|             exit(1) | ||||
|         g.scripts_dir = scripts_dir.rstrip('/') | ||||
|         g.pp_icon = shortcut.get('Desktop Entry', 'Icon', fallback='/usr/share/pixmaps/portproton.png') | ||||
|         pp_icon = QIcon(g.pp_icon) | ||||
|         self.setWindowIcon(pp_icon) | ||||
|         self.setWindowTitle('PortProton games library') | ||||
|  | ||||
|         g.base_dir = str(Path(scripts_dir + '/../..').resolve()) | ||||
|         g.install_pfx = g.base_dir + '/data/prefixes/INSTALL' | ||||
|         g.shortcuts_dir = g.base_dir + '/shortcuts' | ||||
|         g.games_dir = g.base_dir + '/games' | ||||
|  | ||||
|         loc_path = Path(g.base_dir + '/data/tmp/PortProton_loc') | ||||
|         if loc_path.exists(): | ||||
|             g.locale = loc_path.read_text().strip() | ||||
|  | ||||
|         Path(g.shortcuts_dir).mkdir(parents=True, exist_ok=True) | ||||
|         Path(g.games_dir).mkdir(parents=True, exist_ok=True) | ||||
|  | ||||
|         sep = QFrame(self) | ||||
|         sep.setFrameShape(QFrame.Shape.VLine) | ||||
|         sep.setFrameShadow(QFrame.Shadow.Sunken) | ||||
|         self._status_size = QLabel(self) | ||||
|         self._status_dir = QLabel(self) | ||||
|         self._status_wine = QLabel(self) | ||||
|         self.statusBar().setVisible(False) | ||||
|         self.statusBar().addWidget(self._status_dir, 1) | ||||
|         self.statusBar().addWidget(self._status_wine) | ||||
|         self.statusBar().addWidget(sep) | ||||
|         self.statusBar().addWidget(self._status_size) | ||||
|  | ||||
|  | ||||
|         self.game_list = GameList(self) | ||||
|         self.setCentralWidget(self.game_list) | ||||
|  | ||||
|         self.toolbar = self.addToolBar('Main') | ||||
|         self.toolbar.setIconSize(QSize(32, 32)) | ||||
|         self.toolbar.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) | ||||
|         self.toolbar.setMovable(False) | ||||
|         action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_FileDialogNewFolder), _tr('Install new game'), self) | ||||
|         action.triggered.connect(self.install_game) | ||||
|         self.toolbar.addAction(action) | ||||
|         action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_FileLinkIcon), _tr('Add game entry'), self) | ||||
|         action.triggered.connect(self.add_game) | ||||
|         self.toolbar.addAction(action) | ||||
|         action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_BrowserReload), _tr('Reload list'), self) | ||||
|         action.triggered.connect(self.reload_list) | ||||
|         self.toolbar.addAction(action) | ||||
|         action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_TrashIcon), _tr('Drop install prefix'), self) | ||||
|         action.triggered.connect(self.drop_prefix) | ||||
|         self.toolbar.addAction(action) | ||||
|         spacer = QWidget(self) | ||||
|         spacer.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) | ||||
|         self.toolbar.addWidget(spacer) | ||||
|         action = QAction(pp_icon, 'PortProton', self) | ||||
|         action.triggered.connect(self.run_pp) | ||||
|         self.toolbar.addAction(action) | ||||
|  | ||||
|     def install_game(self): | ||||
|         InstallGame(self) | ||||
|  | ||||
|     def add_game(self): | ||||
|         InstallGame(self, False) | ||||
|  | ||||
|     def reload_list(self): | ||||
|         self.game_list.reload() | ||||
|  | ||||
|     def drop_prefix(self): | ||||
|         res = QMessageBox.question(self, _tr('Are you sure ?'), _tr('Do you really want to remove<br/><b>{0}</b> ?', g.install_pfx)) | ||||
|         if res == QMessageBox.StandardButton.Yes: | ||||
|             shutil.rmtree(g.install_pfx, True) | ||||
|  | ||||
|     def run_pp(self): | ||||
|         self.setDisabled(True) | ||||
|         app.processEvents() | ||||
|         run([g.scripts_dir + '/start.sh']) | ||||
|         self.setDisabled(False) | ||||
|  | ||||
|     def set_status(self, item): | ||||
|         self.statusBar().setVisible(bool(item)) | ||||
|         if item: | ||||
|             self._status_size.setText('Size: ' + item.dir_size_human) | ||||
|             self._status_dir.setText(' ' + item.game_dir) | ||||
|             self._status_wine.setText(item.wine_use) | ||||
|  | ||||
|     def closeEvent(self, event): | ||||
|         geometry = self.saveGeometry() | ||||
|         settings.setValue('geometry_main', geometry) | ||||
|         super().closeEvent(event) | ||||
|  | ||||
| class LoadListThread(QThread): | ||||
|     completed = pyqtSignal(list) | ||||
|     def __init__(self, parent, install_dir): | ||||
|         super().__init__(parent) | ||||
|         self.install_dir = install_dir | ||||
|     def run(self): | ||||
|         exe_list = list(Path(self.install_dir).glob('**/*.exe')) | ||||
|         self.completed.emit(exe_list) | ||||
|  | ||||
| class InstallGame(QDialog): | ||||
|     def __init__(self, parent, installing=True): | ||||
|         super().__init__(parent) | ||||
|         self._installing = installing | ||||
|         self.install_dir = g.install_pfx + '/drive_c/Games' if installing else g.games_dir | ||||
|         self._exe_list_widget = QListWidget(self) | ||||
|         self._exe_list_widget.setIconSize(QSize(16, 16)) | ||||
|         self._exe_list_widget.itemDoubleClicked.connect(self._handleDoubleClick) | ||||
|         layout = QVBoxLayout() | ||||
|         layout.addWidget(self._exe_list_widget) | ||||
|  | ||||
|         self._pbar = QProgressBar(self) | ||||
|         self._pbar.setMaximum(0) | ||||
|         layout.addWidget(self._pbar) | ||||
|         thread = LoadListThread(self, self.install_dir) | ||||
|         thread.completed.connect(self.load) | ||||
|         thread.start() | ||||
|  | ||||
|         if self._installing: | ||||
|             setup_btn = QPushButton(self) | ||||
|             setup_btn.setIcon(self.style().standardIcon(QStyle.StandardPixmap.SP_FileDialogStart)) | ||||
|             setup_btn.setText(_tr('Run another setup')) | ||||
|             setup_btn.clicked.connect(self._runSetup) | ||||
|             layout.addWidget(setup_btn) | ||||
|         self.setLayout(layout) | ||||
|         self.resize(400, 300) | ||||
|         self.setModal(True) | ||||
|         self.setWindowTitle(_tr('Select game exe file')) | ||||
|         geometry = settings.value('geometry_install') | ||||
|         if geometry: | ||||
|             self.restoreGeometry(geometry) | ||||
|         self.show() | ||||
|  | ||||
|     def load(self, exe_list): | ||||
|         if self._installing and len(exe_list) == 0: | ||||
|             self._runSetup() | ||||
|             exe_list = list(Path(self.install_dir).glob('**/*.exe')) | ||||
|         if len(exe_list) == 0: | ||||
|             return self.close() | ||||
|         def render_list(): | ||||
|             pixmap = QPixmap(16, 16) | ||||
|             pixmap.fill(Qt.GlobalColor.transparent) | ||||
|             empty_icon = QIcon(pixmap) | ||||
|             for exe in sorted(exe_list): | ||||
|                 ico_file = str(exe) + '.ico' | ||||
|                 item = QListWidgetItem(self._exe_list_widget) | ||||
|                 item.setText(str(exe)[len(self.install_dir)+1:]) | ||||
|                 try: | ||||
|                     if not Path(ico_file).exists(): | ||||
|                         run(['wrestool', '-x', '-t14', '-o', ico_file, exe], capture_output=True) | ||||
|                     item.setIcon(QIcon(ico_file)) | ||||
|                 except Exception: | ||||
|                     pass | ||||
|                 if item.icon().pixmap(16, 16).isNull(): | ||||
|                     item.setIcon(empty_icon) | ||||
|                 self._exe_list_widget.addItem(item) | ||||
|             self._pbar.setVisible(False) | ||||
|         thread = QThread(self) | ||||
|         thread.run = render_list | ||||
|         thread.start() | ||||
|  | ||||
|     def _runSetup(self): | ||||
|         downloads_dir = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.DownloadLocation) | ||||
|         exe_file, _ = QFileDialog.getOpenFileName(self, caption=_tr('Choose setup file'), filter='Exe files (*.exe)', directory=downloads_dir) | ||||
|         if not exe_file: | ||||
|             return | ||||
|         ppdb = shlex.quote(exe_file + '.ppdb') | ||||
|         script = f""" | ||||
|             mkdir -p {shlex.quote(g.install_pfx + '/drive_c/Games')} | ||||
|             echo ' | ||||
|                 export PW_VULKAN_USE=1 | ||||
|                 export PW_GUI_DISABLED_CS=1 | ||||
|                 export PW_PREFIX_NAME=INSTALL | ||||
|                 export PW_DLL_INSTALL=mfc42 | ||||
|             ' > {ppdb} | ||||
|             {shlex.quote(g.scripts_dir + '/start.sh')} {shlex.quote(exe_file)} | ||||
|             rm -f {ppdb} | ||||
|         """ | ||||
|         self.setDisabled(True) | ||||
|         app.processEvents() | ||||
|         run(['bash', '-c', script]) | ||||
|         self.setDisabled(False) | ||||
|  | ||||
|     def _handleDoubleClick(self, item): | ||||
|         game_dir = item.text().split('/')[0] | ||||
|         dlg = QInputDialog(self) | ||||
|         dlg.setWindowTitle(_tr('Please enter game entry name')) | ||||
|         dlg.setLabelText(_tr('New game entry')) | ||||
|         dlg.setTextValue(game_dir) | ||||
|         dlg.resize(300, 0) | ||||
|         ok = dlg.exec() | ||||
|         shortcut_name = dlg.textValue() | ||||
|         if not ok or not shortcut_name: | ||||
|             return | ||||
|         file_name = re.sub(r'[<>:/\\|?*]', '_', shortcut_name) | ||||
|         shortcut = f"{g.shortcuts_dir}/{file_name}.desktop" | ||||
|         if Path(shortcut).exists(): | ||||
|             res = QMessageBox.question(self, _tr('Shortcut already exists'), _tr('Shortcut <b>{0}</b> already exists. Overwrite ?', file_name)) | ||||
|             if res != QMessageBox.StandardButton.Yes: | ||||
|                 return | ||||
|         src_dir = self.install_dir + '/' + game_dir | ||||
|         dst_dir = g.games_dir + '/' + game_dir | ||||
|         exe_file = shlex.quote(g.games_dir + '/' + item.text()) | ||||
|         ppdb = shlex.quote(g.games_dir + '/' + item.text() + '.ppdb') | ||||
|         self.setDisabled(True) | ||||
|         if self._installing and Path(dst_dir).exists(): | ||||
|             res = QMessageBox.question(self, _tr('Dir already exists'), _tr('Dir <b>{0}</b> already exists. Overwrite ?', game_dir)) | ||||
|             if res != QMessageBox.StandardButton.Yes: | ||||
|                 return | ||||
|         if self._installing: | ||||
|             os.rename(src_dir, dst_dir) | ||||
|         script = f""" | ||||
|             export INSTALLING_PORT=1 | ||||
|             export portwine_exe={exe_file} | ||||
|             cd {shlex.quote(g.scripts_dir)} | ||||
|             . {shlex.quote(g.scripts_dir + '/runlib')} | ||||
|             pw_init_db | ||||
|             [ -f {ppdb} ] && . {ppdb} | ||||
|             echo -e "export PW_VULKAN_USE=${{PW_VULKAN_USE:-1}}\nexport PW_GUI_DISABLED_CS=1" >> {ppdb} | ||||
|         """ | ||||
|         run(['bash', '-c', script]) | ||||
|         icon_path = g.games_dir + '/' + item.text() + '.ico' | ||||
|         if not Path(icon_path).exists(): | ||||
|             icon_path = g.pp_icon | ||||
|         Path(shortcut).write_text(f"""[Desktop Entry] | ||||
| Name={shortcut_name} | ||||
| Exec=env {shlex.quote(g.scripts_dir + '/start.sh')} {exe_file} | ||||
| Type=Application | ||||
| Categories=Game | ||||
| StartupNotify=true | ||||
| Path={shlex.quote(g.scripts_dir)} | ||||
| Icon={icon_path} | ||||
| """, encoding='utf-8') | ||||
|         os.chmod(shortcut, 0o755) | ||||
|         win.reload_list() | ||||
|         self.close() | ||||
|  | ||||
|     def closeEvent(self, event): | ||||
|         geometry = self.saveGeometry() | ||||
|         settings.setValue('geometry_install', geometry) | ||||
|         super().closeEvent(event) | ||||
|  | ||||
|  | ||||
| class GameList(QListWidget): | ||||
|     def __init__(self, parent): | ||||
|         super().__init__(parent) | ||||
|         self.itemActivated.connect(self.runGame) | ||||
|         self.currentItemChanged.connect(self.selectItem) | ||||
|         self.setViewMode(QListWidget.ViewMode.IconMode) | ||||
|         self.setResizeMode(QListWidget.ResizeMode.Adjust) | ||||
|         self.setIconSize(QSize(64, 64)) | ||||
|         self.setWordWrap(True) | ||||
|         self.setSpacing(3) | ||||
|         self.reload() | ||||
|  | ||||
|     def reload(self): | ||||
|         self.clear() | ||||
|         shortcuts = list(Path(g.shortcuts_dir).glob('*.desktop')) | ||||
|         shortcuts += list(Path(g.base_dir).glob('*.desktop')) | ||||
|         for shortcut in shortcuts: | ||||
|             try: | ||||
|                 item = GameItem(self, shortcut) | ||||
|                 self.addItem(item) | ||||
|             except ValueError: | ||||
|                 pass | ||||
|             except: | ||||
|                 logging.exception('Error while parse "%s"', shortcut) | ||||
|         self.sortItems() | ||||
|         self.setCurrentIndex(QModelIndex()) | ||||
|  | ||||
|     def runGame(self, item): | ||||
|         win.setDisabled(True) | ||||
|         app.processEvents() | ||||
|         run(['bash', '-c', item.get('Exec')]) | ||||
|         win.setDisabled(False) | ||||
|  | ||||
|     def selectItem(self, item): | ||||
|         win.set_status(item) | ||||
|  | ||||
|     def contextMenuEvent(self, event): | ||||
|         selected = self.selectedItems() | ||||
|         if len(selected) == 0: | ||||
|             return | ||||
|         selected = selected[0] | ||||
|         menu = QMenu(self) | ||||
|         desktop = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DesktopIcon), _tr('Add to desktop')) | ||||
|         restore_gui = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DialogResetButton), _tr('Restore PortProton GUI')) | ||||
|         default_wine = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DialogOkButton), _tr('Set default wine')) | ||||
|         remove = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_TrashIcon), _tr('Remove game entry')) | ||||
|         uninstall = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DialogCloseButton), _tr('Uninstall game')) | ||||
|         if not selected.pp_gui_disabled: | ||||
|             restore_gui.setVisible(False) | ||||
|         if not selected.wine_use: | ||||
|             default_wine.setVisible(False) | ||||
|         if not selected.game_dir.startswith(g.games_dir): | ||||
|             uninstall.setVisible(False) | ||||
|         action = menu.exec(self.mapToGlobal(event.pos())) | ||||
|         desktop_shortcut = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.DesktopLocation) + '/' + Path(selected.desktop_file).name | ||||
|         if action == desktop: | ||||
|             if Path(desktop_shortcut).exists(): | ||||
|                 res = QMessageBox.question(self, _tr('Shortcut already exists'), _tr('Shortcut <b>{0}</b> already exists. Overwrite ?', desktop_shortcut)) | ||||
|                 if res != QMessageBox.StandardButton.Yes: | ||||
|                     return | ||||
|             shutil.copy(selected.desktop_file, desktop_shortcut) | ||||
|         if action == restore_gui or action == default_wine: | ||||
|             ignore_line = 'PW_GUI_DISABLED_CS' if action == restore_gui else 'PW_WINE_USE' | ||||
|             ppdb = shlex.split(selected.get('Exec'))[-1] + '.ppdb' | ||||
|             if not Path(ppdb).exists(): | ||||
|                 return | ||||
|             with open(ppdb, 'r') as read: | ||||
|                 with open(ppdb + '.new', 'w') as write: | ||||
|                     while (line := read.readline()): | ||||
|                         if ignore_line not in line: | ||||
|                             write.write(line) | ||||
|             os.rename(ppdb + '.new', ppdb) | ||||
|             if action == restore_gui: | ||||
|                 selected.pp_gui_disabled = False | ||||
|             if action == default_wine: | ||||
|                 selected.wine_use = None | ||||
|                 self.selectItem(selected) | ||||
|         def remove_shortcut(): | ||||
|             Path(desktop_shortcut).unlink(True) | ||||
|             Path(selected.desktop_file).unlink(True) | ||||
|             def_icon_path = g.base_dir + '/data/img/' + Path(shlex.split(selected.get('Exec'))[-1]).stem + '.png' | ||||
|             Path(def_icon_path).unlink(True) | ||||
|         if action == remove: | ||||
|             remove_shortcut() | ||||
|             self.reload() | ||||
|         if action == uninstall: | ||||
|             res = QMessageBox.question(self, | ||||
|                 _tr('Are you sure ?'), | ||||
|                 _tr('Do you really want to uninstall <b>{0}</b><br/>located in "<b>{1}</b>" ?', selected.get('Name'), selected.game_dir) | ||||
|             ) | ||||
|             if res != QMessageBox.StandardButton.Yes: | ||||
|                 return | ||||
|             remove_shortcut() | ||||
|             if selected.game_dir.startswith(g.games_dir): | ||||
|                 shutil.rmtree(selected.game_dir, True) | ||||
|             self.reload() | ||||
|  | ||||
|  | ||||
| def human_size(num): | ||||
|     if not num: | ||||
|         return "-" | ||||
|     for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]: | ||||
|         if abs(num) < 1024.0: | ||||
|             return f"{num:.2f} {unit}B" | ||||
|         num /= 1024.0 | ||||
|     return f"{num:.2f} YiB" | ||||
|  | ||||
| class GameItem(QListWidgetItem): | ||||
|     def __init__(self, parent, desktop_file): | ||||
|         self.desktop_file = desktop_file | ||||
|         self.config = RawConfigParser() | ||||
|         self.config.read(desktop_file) | ||||
|         text = self.get('Name', Path(desktop_file).stem) | ||||
|         if not self.get('Exec') or text == 'PortProton': | ||||
|             raise ValueError('Validation fail') | ||||
|         exe_file = shlex.split(self.get('Exec'))[-1] | ||||
|         if exe_file.startswith(g.games_dir): | ||||
|             self.game_dir = g.games_dir + '/' + exe_file[len(g.games_dir)+1:].split('/')[0] | ||||
|         else: | ||||
|             self.game_dir = str(Path(exe_file).parent) | ||||
|         if self.game_dir == '.': | ||||
|             raise ValueError('Can not determine game dir') | ||||
|         self.pp_gui_disabled = False | ||||
|         self.wine_use = None | ||||
|         ppdb = exe_file + '.ppdb' | ||||
|         if Path(ppdb).exists(): | ||||
|             ppdb_conf = RawConfigParser(strict=False) | ||||
|             with open(ppdb) as f: | ||||
|                 ppdb_conf.read_string('[dummy]\n' + f.read()) | ||||
|             pp_gui_disabled = ppdb_conf.get('dummy', 'export PW_GUI_DISABLED_CS', fallback='').strip('"') | ||||
|             try: self.pp_gui_disabled = bool(int(pp_gui_disabled)) | ||||
|             except: self.pp_gui_disabled = bool(pp_gui_disabled) | ||||
|             self.wine_use = ppdb_conf.get('dummy', 'export PW_WINE_USE', fallback='').strip('"') | ||||
|  | ||||
|         super().__init__(parent) | ||||
|  | ||||
|         self.setToolTip(text) | ||||
|         self.setText(text) | ||||
|         icon_path = self.get('Icon') if Path(self.get('Icon')).exists() else g.pp_icon | ||||
|         qicon = QIcon(icon_path) | ||||
|         self.setIcon(qicon) | ||||
|         self.setTextAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop) | ||||
|         self.setSizeHint(QSize(100, 105)) | ||||
|  | ||||
|         self._set_dir_size(None) | ||||
|         dir_size_cache = self.game_dir + '/.size' | ||||
|         if Path(dir_size_cache).exists(): | ||||
|             self._set_dir_size(int(Path(dir_size_cache).read_text())) | ||||
|         else: | ||||
|             def calc_dir_size(): | ||||
|                 if not Path(self.game_dir).exists(): | ||||
|                     return | ||||
|                 dir_size = sum(p.stat(follow_symlinks=False).st_size for p in Path(self.game_dir).rglob('*')) | ||||
|                 self._set_dir_size(dir_size) | ||||
|                 Path(dir_size_cache).write_text(str(dir_size)) | ||||
|             thread = QThread(parent) | ||||
|             thread.run = calc_dir_size | ||||
|             thread.start() | ||||
|  | ||||
|     def get(self, name, fallback=None): | ||||
|         return self.config.get('Desktop Entry', name, fallback=fallback) | ||||
|  | ||||
|     def _set_dir_size(self, size): | ||||
|         self.dir_size = size | ||||
|         self.dir_size_human = human_size(size) | ||||
|  | ||||
| import signal | ||||
| signal.signal(signal.SIGINT, signal.SIG_DFL) | ||||
|  | ||||
| lang = { | ||||
|     'RUS': { | ||||
|         'Install new game': 'Установить игру', | ||||
|         'Add game entry': 'Добавить в список', | ||||
|         'Reload list': 'Обновить список', | ||||
|         'Drop install prefix': 'Удалить установочный префикс', | ||||
|         'Are you sure ?': 'Вы уверены ?', | ||||
|         'Do you really want to remove<br/><b>{0}</b> ?': 'Вы действительно хотите удалить<br/><b>{0}</b> ?', | ||||
|         'Run another setup': 'Запустить установку', | ||||
|         'Select game exe file': 'Выберите exe файл игры', | ||||
|         'Choose setup file': 'Выберите установочный файл', | ||||
|         'Please enter game entry name': 'Введите название игры', | ||||
|         'New game entry': 'Название игры', | ||||
|         'Shortcut already exists': 'Ярлык уже существует', | ||||
|         'Shortcut <b>{0}</b> already exists. Overwrite ?': 'Ярлык <b>{0}</b> уже существует. Перезаписать ?', | ||||
|         'Dir already exists': 'Директория уже существует', | ||||
|         'Dir <b>{0}</b> already exists. Overwrite ?': 'Директория <b>{0}</b> уже существует. Перезаписать ?', | ||||
|         'Add to desktop': 'Добавить на рабочий стол', | ||||
|         'Restore PortProton GUI': 'Восстановить PortProton GUI', | ||||
|         'Set default wine': 'Выбрать дефолтный wine', | ||||
|         'Remove game entry': 'Убрать из списка', | ||||
|         'Uninstall game': 'Удалить игру', | ||||
|         'Do you really want to uninstall <b>{0}</b><br/>located in "<b>{1}</b>" ?': 'Вы действительно хотите удалить <b>{0}</b><br/>расположеную в "<b>{1}</b>" ?' | ||||
|     } | ||||
| } | ||||
| def _tr(text, *fmt): | ||||
|     res = lang.get(g.locale, {}).get(text, text) | ||||
|     if fmt: | ||||
|         res = res.format(*fmt) | ||||
|     return res | ||||
|  | ||||
| app = QApplication([]) | ||||
| app.setDesktopFileName('PortProton') | ||||
| win = MainWindow() | ||||
| win.show() | ||||
| app.exec() | ||||
| @@ -5,7 +5,7 @@ if [ "${update_loc}" = "RUS" ] | ||||
| then | ||||
|     KEY_CREDITS=$RANDOM | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \ | ||||
| --image-path="$PW_GUI_ICON_PATH" --image="port_proton" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
| --text-align=center --scroll --text="PortProton v. ${install_ver} | ||||
| scripts v. ${scripts_install_ver} | ||||
| @@ -18,7 +18,7 @@ https://linux-gaming.ru | ||||
| Подробнее см. в Лицензия." 2>/dev/null & | ||||
|  | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=2 \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=2 \ | ||||
| --text-align=center --scroll --text="Автор:   Casro-Fidel (Михаил Тергоев) | ||||
|  | ||||
| Помощники разработчика и тестировщики: | ||||
| @@ -44,7 +44,7 @@ Boria138 | ||||
| Akai | ||||
| " 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "          Лицензия Массачусетского технологического института (MIT License) | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "          Лицензия Массачусетского технологического института (MIT License) | ||||
|  | ||||
|               Авторские права © $(date +'%Y') Castro-Fidel (linux-gaming.ru) | ||||
|  | ||||
| @@ -67,7 +67,7 @@ Akai | ||||
| ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ В | ||||
| ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ." 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=4 \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=4 \ | ||||
| --text-info --fontname="Serif bold italic 12" --show-uri --scroll \ | ||||
| <<< '                                            Проект поддержали: | ||||
|                                     https://boosty.to/portwine-linux.ru | ||||
| @@ -139,7 +139,7 @@ Akai | ||||
|     Haschwalth | ||||
|     haunteduser | ||||
|     Homyakin | ||||
|     horuno2020  | ||||
|     horuno2020 | ||||
|     Igor14936 | ||||
|     Ivan Vlasov | ||||
|     ivboss | ||||
| @@ -315,7 +315,7 @@ Akai | ||||
|     Роман Игнатьев | ||||
|     Роман Паженский | ||||
|     Ростислав Кузнецов | ||||
|     Саша  | ||||
|     Саша | ||||
|     Семён | ||||
|     Семён Клишин | ||||
|     Семён Сорокин | ||||
| @@ -337,7 +337,7 @@ Akai | ||||
|  | ||||
|                                     Список будет дополняться...' 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Хотите присоединится и помочь в развитии проекта:" \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Хотите присоединится и помочь в развитии проекта:" \ | ||||
| --title=JOIN --window-icon=group  --image=system-config-users --uri-color=red --show-uri \ | ||||
| --text-info --scroll <<< \ | ||||
| "Website:  https://linux-gaming.ru/ | ||||
| @@ -349,7 +349,7 @@ boosty: https://boosty.to/portwine-linux.ru | ||||
| Yandex кошелек:   410012267513818 | ||||
| -------------------------------------------" 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \ | ||||
| --fontname="Serif bold italic 10" --text-info <<< "                   Сторонние библиотеки, которые используются в PortProton | ||||
|  | ||||
|     PortProton собран на основе бесплатных библиотек программного обеспечения: | ||||
| @@ -358,20 +358,21 @@ WINE-PROTON: https://github.com/ValveSoftware/Proton | ||||
| WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ | ||||
| Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds | ||||
| YAD: https://github.com/v1cont/yad" 2>/dev/null & | ||||
|          | ||||
| "${pw_yad_v12_3}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|  --notebook --no-buttons  --tab-pos=bottom \ | ||||
|  | ||||
| "${pw_yad_v13_0}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|  --notebook --no-buttons  --tab-pos=bottom --expand \ | ||||
| --tab="О PORTPROTON" --tab="АВТОРЫ" --tab="ЛИЦЕНЗИЯ" --tab="СПОНСОРЫ" --tab="ПРИСОЕДИНИТЬСЯ" \ | ||||
| --tab="БИБЛИОТЕКИ" | ||||
|     echo "Exit from credits" | ||||
|     /usr/bin/env bash -c ${pw_full_command_line[*]}  | ||||
|     /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|     exit 0 | ||||
|  | ||||
| else | ||||
|  | ||||
|     KEY_CREDITS=$RANDOM | ||||
|  | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \ | ||||
| --image-path="$PW_GUI_ICON_PATH" --image="port_proton" \ | ||||
| --text-align=center --scroll --text="PortProton v. ${install_ver} | ||||
| scripts v. ${scripts_install_ver} | ||||
| @@ -385,7 +386,7 @@ This program comes with absolutely no warranty. | ||||
| See the License for details." 2>/dev/null & | ||||
|  | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=2 \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=2 \ | ||||
| --text-align=center --scroll --text="Author:   Casro-Fidel (Mikhail Tergoev) | ||||
|  | ||||
| Developer assistants and testers: | ||||
| @@ -411,7 +412,7 @@ Boria138 | ||||
| Akai | ||||
| " 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "MIT License | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "MIT License | ||||
|  | ||||
| Copyright (©) 2022 Castro-Fidel (linux-gaming.ru) | ||||
|  | ||||
| @@ -433,7 +434,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE." 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=4 \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=4 \ | ||||
| --text-info --fontname="Serif bold italic 12" --show-uri --scroll \ | ||||
| <<< '                                    The project was supported: | ||||
|                               https://boosty.to/portwine-linux.ru: | ||||
| @@ -505,7 +506,7 @@ SOFTWARE." 2>/dev/null & | ||||
|     Haschwalth | ||||
|     haunteduser | ||||
|     Homyakin | ||||
|     horuno2020  | ||||
|     horuno2020 | ||||
|     Igor14936 | ||||
|     Ivan Vlasov | ||||
|     ivboss | ||||
| @@ -681,7 +682,7 @@ SOFTWARE." 2>/dev/null & | ||||
|     Роман Игнатьев | ||||
|     Роман Паженский | ||||
|     Ростислав Кузнецов | ||||
|     Саша  | ||||
|     Саша | ||||
|     Семён | ||||
|     Семён Клишин | ||||
|     Семён Сорокин | ||||
| @@ -704,7 +705,7 @@ SOFTWARE." 2>/dev/null & | ||||
|  | ||||
|                                       The list will be updated...' 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Do you want to join and help in the development of the project:" \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Do you want to join and help in the development of the project:" \ | ||||
| --title=JOIN --window-icon=group  --image=system-config-users --uri-color=red --show-uri \ | ||||
| --text-info --scroll <<< \ | ||||
| "Website:  http://linux-gaming.ru | ||||
| @@ -716,7 +717,7 @@ boosty:  https://boosty.to/portwine-linux.ru | ||||
| Yandex wallet:   410012267513818 | ||||
| -------------------------------------------" 2>/dev/null & | ||||
|  | ||||
| "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \ | ||||
| "${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \ | ||||
| --fontname="Serif bold italic 10" --text-info <<< "                               Third-party libraries that are used in PortProton | ||||
|  | ||||
|               PortProton is built on the basis of the following free software libraries: | ||||
| @@ -727,11 +728,12 @@ Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds | ||||
| YAD: https://github.com/v1cont/yad" 2>/dev/null & | ||||
|  | ||||
|  | ||||
| "${pw_yad_v12_3}" --title "ABOUT US" --key="${KEY_CREDITS}" ---window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
| --notebook --no-buttons  --tab-pos=bottom \ | ||||
| "${pw_yad_v13_0}" --title "ABOUT US" --key="${KEY_CREDITS}" ---window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
| --notebook --no-buttons  --tab-pos=bottom --expand \ | ||||
| --tab="ABOUT PORTPROTON" --tab="AUTORS" --tab="LICENSE" --tab="SPONSORS" --tab="JOIN" \ | ||||
| --tab="THIRD PARTY LIBRARIES" | ||||
|  | ||||
|     echo "Exit from credits" | ||||
|     /usr/bin/env bash -c ${pw_full_command_line[*]}  | ||||
|     /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|     exit 0 | ||||
| fi | ||||
|   | ||||
| @@ -14,8 +14,8 @@ else | ||||
| 	if [[ "${update_loc}" == "RUS" || "${update_loc}" == "ENG" ]] && [[ -f "${PORT_WINE_TMP_PATH}/${portname}_loc" ]] ; then | ||||
| 		echo "" | ||||
| 	else | ||||
| 		[[ ! -f "${pw_yad_v12_3}" ]] && pw_yad_v12_3="yad" | ||||
| 		SET_LANG=$("$pw_yad_v12_3" --title  "LAUNGUAGE" --text "Select the language:" --list --radiolist \ | ||||
| 		[[ ! -f "${pw_yad_v13_0}" ]] && pw_yad_v13_0="yad" | ||||
| 		SET_LANG=$("${pw_yad_v13_0}" --title  "LAUNGUAGE" --text "Select the language:" --list --radiolist \ | ||||
| 		--column="Set:" --column "Choose language:" TRUE "RUS" FALSE "ENG" \ | ||||
| 		--window-icon "$PW_GUI_ICON_PATH/portproton.svg" --width=300 --height=150) | ||||
| 		SET_LANG="$(echo $SET_LANG | awk -F'|' '{print $2}')" | ||||
| @@ -122,9 +122,14 @@ if [[ "${update_loc}" == "RUS" ]] ; then | ||||
|     export loc_winetricks="Запустить префикс менеджер для установки доп. библиотек в выбранный префикс" | ||||
| 	export loc_edit_db="Изменить файл настроек для" | ||||
| 	export loc_download_other_wine="Открыть меню для скачивания других версий WINE-PROTON" | ||||
| 	export loc_downloading="Скачивание" | ||||
|  | ||||
| 	export loc_clear_pfx="Очистить префикс для исправления проблем" | ||||
|  | ||||
| 	export loc_gui_dll_new_pfx="Установить рекомендованные библиотеки в новый префикс:  " | ||||
|  | ||||
| 	export loc_gui_portproton_lock='Обнаружена запущенная сессия PortProton.\nХотите завершить предыдущую сессию?' | ||||
|  | ||||
| 	export ENABLE_VKBASALT_INFO='Включить vkBasalt по умолчанию для улучшение графики в играх работающих под Vulkan. (Горячая клавиша HOME отключает vkbasalt)' | ||||
| 	export PW_NO_ESYNC_INFO='Не использовать примитивы внутрипроцессной синхронизации на основе eventfd. (Рекомендуется не изменять значение)' | ||||
| 	export PW_NO_FSYNC_INFO='Не использовать примитивы внутрипроцессной синхронизации на основе фьютексов. (Автоматически отключается в системах без FUTEX_WAIT_MULTIPLE поддержки) (Рекомендуется не изменять значение)' | ||||
| @@ -153,6 +158,7 @@ if [[ "${update_loc}" == "RUS" ]] ; then | ||||
| 	export PW_USE_SHADER_CACHE_INFO='Использовать кеширование шейдеров средствами WINE (отключать только при наличии микрофризов в игре)' | ||||
| 	export PW_WINE_FULLSCREEN_FSR_INFO='Работает во время использования любой версии ProtonGE в полноэкранном режиме при разрешении ниже стандартного для экрана' | ||||
| 	export PW_USE_FAKE_DLSS_INFO='Включить транслятор DLSS в FSR 2 в играх DirectX 12 (проект CyberFSR2)' | ||||
| 	export PW_USE_FAKE_DLSS_3_INFO='Включить транслятор DLSS в FSR 3 в играх DirectX 12 (Эксперементальный проект dlssg-to-fsr3)' | ||||
|     export PW_USE_EAC_AND_BE_INFO='Включить Easy Anti-Cheat and BattlEye Anti-Cheat (требуется если игра использует какой-то из этих античитов)' | ||||
|     export PW_REDUCE_PULSE_LATENCY_INFO='Уменьшить задержку pulseaudio для исправления прерывистого звука' | ||||
|     export PW_USE_US_LAYOUT_INFO='Принудительное использование английской раскладки (полезно для игр в которых управление верно работает исключительно на английской раскладке)' | ||||
| @@ -160,6 +166,7 @@ if [[ "${update_loc}" == "RUS" ]] ; then | ||||
| 	export PW_USE_SYSTEM_VK_LAYERS_INFO='Использовать системные mangohud, vkBasalt, obs-vkcapture и прочие приложения использующие vulkan layers' | ||||
| 	export PW_USE_OBS_VKCAPTURE_INFO='Включить возможность записи в OBS Studio с помощью obs-vkcapture (ВНИМАНИЕ: будет включено принудительное использование системных mangohud, vkBasalt, obs-vkcapture и прочих приложений использующих vulkan layers)' | ||||
| 	export PW_USE_GALLIUM_ZINK_INFO='Использовать драйвер zink (OpenGL поверх Vulkan), позволяет использовать vkBasalt в играх на OpenGL (ВНИМАНИЕ: необходима поддержка vulkan, используется wined3d (opengl) вместо dxvk, подходит для игр на OpenGL и старых версий DirectX, на более новых версиях DirectX возможны артефакты)' | ||||
| 	export PW_DISABLE_COMPOSITING_INFO='Отключить композитинг (эффекты) рабочего стола. Зачастую улучшает производительность.' | ||||
|  | ||||
| 	export PW_3DFX_INFO='Имитация старого графического ускорителя 3dfx (добавляет горизонтальные полосы)' | ||||
| 	export PW_AdaptiveSharpen_INFO='Увеличение резкости, можно использовать совместно с CAS' | ||||
| @@ -275,8 +282,8 @@ if [[ "${update_loc}" == "RUS" ]] ; then | ||||
| 	export PW_MH_wine_INFO='Показать используемую версию Wine или Proton' | ||||
|  | ||||
| 	export PW_PFX_BACKUP_INFO="Внимание! Не передавайте резевную копию третьим лицам, есть риск потери аккаунтов" | ||||
| 	export PW_PFX_BACKUP_SUCCESS="Резервная копия префикса: \"${PW_PREFIX_NAME}\" успешно создана" | ||||
| 	export PW_PFX_BACKUP_ERROR="Во время создания резервной копии префикса: \"${PW_PREFIX_NAME}\" произошла ошибка" | ||||
| 	export PW_PFX_BACKUP_SUCCESS="Успешно создана резервная копия префикса:" | ||||
| 	export PW_PFX_BACKUP_ERROR="Произошла ошибка во время создания резервной копии префикса:" | ||||
|  | ||||
| 	export loc_find_d3dadapter9_error="не найден в системе.\nУстановите недостающий пакет: </Sb>d3dadapter9</b>" | ||||
|  | ||||
| @@ -376,7 +383,7 @@ if [[ "${update_loc}" == "RUS" ]] ; then | ||||
|  | ||||
| 	export loc_gui_disabled_mh="ВЫКЛЮЧИТЬ MANGOHUD" | ||||
| 	export loc_gui_disabled_mh_help="Выключить MangoHud и перейти в предыдущее меню." | ||||
| 	export loc_gui_mh_top="Настройки MangoHud  (Клавишы <b>R_SHIFT + F12</b> отключают MangoHud)\n<b>ПРИМЕЧАНИЕ:</b> Для вывода справки по каждому пункту, просто наведите курсор мыши на текст.\n" | ||||
| 	export loc_gui_mh_top="Настройки MangoHud  (Клавиши <b>R_SHIFT + F12</b> отключают MangoHud)\n<b>ПРИМЕЧАНИЕ:</b> Для вывода справки по каждому пункту, просто наведите курсор мыши на текст.\n" | ||||
|  | ||||
| 	export loc_gui_no="НЕТ" | ||||
| 	export loc_gui_yes="ДА" | ||||
| @@ -422,14 +429,18 @@ if [[ "${update_loc}" == "RUS" ]] ; then | ||||
| 	export loc_prefix_manager_font='Выберите шрифт для установки в префикс:' | ||||
| 	export loc_prefix_manager_conf='Изменить дополнительные настройки префикса:' | ||||
| 	export loc_prefix_manager_wine='используя wine:' | ||||
|  | ||||
| 	export loc_pm='МЕНЕДЖЕР ПРЕФИКСА' | ||||
| 	export loc_pm_dlls='БИБЛИОТЕКИ' | ||||
| 	export loc_pm_fonts='ШРИФТЫ' | ||||
| 	export loc_pm_settings='НАСТРОЙКИ' | ||||
| 	export loc_start_pfx_manager="Запускается менеджер префикса:" | ||||
|  | ||||
| 	export loc_warn_cyrillic_in_path="Путь до исполняемого файла содержит кириллические символы.\nИногда это может привести к неработоспособности приложения." | ||||
|  | ||||
| 	export loc_gui_terminal="ТЕРМИНАЛ" | ||||
| 	export loc_gui_logo="ЛОГО" | ||||
|  | ||||
|  | ||||
| elif [[ "${update_loc}" == "ENG" ]] ; then | ||||
|  | ||||
| 	export loc_gui_pw_reinstall_pp="REINSTALL ${portname}" | ||||
| @@ -526,9 +537,14 @@ elif [[ "${update_loc}" == "ENG" ]] ; then | ||||
|     export loc_winetricks="Run winetricks to install additional libraries to the selected prefix" | ||||
| 	export loc_edit_db="Edit database file for" | ||||
| 	export loc_download_other_wine="Open the menu to download other versions of WINE-PROTON " | ||||
| 	export loc_downloading="Downloading" | ||||
|  | ||||
| 	export loc_clear_pfx="Clear the prefix to fix problems" | ||||
|  | ||||
| 	export loc_gui_dll_new_pfx="Do you want to installing recommended libraries in the new prefix:  " | ||||
|  | ||||
| 	export loc_gui_portproton_lock='A running PortProton session was detected.\nDo you want to end the previous session?' | ||||
|  | ||||
| 	export ENABLE_VKBASALT_INFO='Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)' | ||||
| 	export PW_NO_ESYNC_INFO='Do not use in-process synchronization primitives based on eventfd. (It is recommended not to change the value.)' | ||||
| 	export PW_NO_FSYNC_INFO='Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems without FUTEX_WAIT_MULTIPLE support) (It is recommended not to change the value)' | ||||
| @@ -557,6 +573,7 @@ elif [[ "${update_loc}" == "ENG" ]] ; then | ||||
| 	export PW_USE_SHADER_CACHE_INFO='Use WINE shader caching (disable only if there are microfreezes in the game)' | ||||
| 	export PW_WINE_FULLSCREEN_FSR_INFO='Works while using any version of ProtonGE in full screen mode at a resolution below the standard screen' | ||||
| 	export PW_USE_FAKE_DLSS_INFO='Enable DLSS translator in FSR 2 in DirectX 12 games (CyberFSR2)' | ||||
| 	export PW_USE_FAKE_DLSS_3_INFO='Enable DLSS translator in FSR 3 in DirectX 12 games (Experimental project dlssg-to-fsr3)' | ||||
| 	export PW_USE_EAC_AND_BE_INFO='Enable Easy Anti-Cheat and BattlEye Anti-Cheat runtimes (required if game used this anti-cheats)' | ||||
| 	export PW_REDUCE_PULSE_LATENCY_INFO='Reduce pulseaudio latency to fix intermittent sound' | ||||
| 	export PW_USE_US_LAYOUT_INFO='Forced use of the us layout (useful for games in which the control works correctly only on the us layout)' | ||||
| @@ -564,6 +581,8 @@ elif [[ "${update_loc}" == "ENG" ]] ; then | ||||
| 	export PW_USE_SYSTEM_VK_LAYERS_INFO='Use system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers' | ||||
| 	export PW_USE_OBS_VKCAPTURE_INFO='Enable the ability to write to OBS Studio using obs-vkcapture (ATTENTION: the forced use of system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers will be enabled)' | ||||
| 	export PW_USE_GALLIUM_ZINK_INFO='Use the zink driver (OpenGL on top of Vulkan), allows you to use vkBasalt in OpenGL games (ATTENTION: vulkan support is required, wined3d (opengl) is used instead of dxvk, suitable for games on OpenGL and older versions of DirectX, artifacts are possible on newer versions of DirectX)' | ||||
| 	export PW_DISABLE_COMPOSITING_INFO='Disable desktop compositing (effects). It often improves performance.' | ||||
|  | ||||
|     export PW_3DFX_INFO='Simulation of an old 3dfx graphics accelerator (adds horizontal stripes)' | ||||
|    	export PW_AdaptiveSharpen_INFO='Sharpness increase, can be used with CAS' | ||||
|    	export PW_Bloom_INFO='Adds glow from bright light sources in the game' | ||||
| @@ -678,8 +697,8 @@ elif [[ "${update_loc}" == "ENG" ]] ; then | ||||
| 	export PW_MH_wine_INFO='Show current Wine or Proton version in use' | ||||
|  | ||||
| 	export PW_PFX_BACKUP_INFO="Attention! Do not pass the resev copy to third parties, there is a risk of losing accounts" | ||||
| 	export PW_PFX_BACKUP_SUCCESS="Prefix backup: \"${PW_PREFIX_NAME}\" has been successfully created" | ||||
| 	export PW_PFX_BACKUP_ERROR="An error occurred while backing up the prefix: \"${PW_PREFIX_NAME}\" error occurred" | ||||
| 	export PW_PFX_BACKUP_SUCCESS="Backup has been successfully created for prefix:" | ||||
| 	export PW_PFX_BACKUP_ERROR="An error occurred while backing up the prefix:" | ||||
|  | ||||
| 	export loc_find_d3dadapter9_error="Not found in the system.\nInstall the missing package: </Sb>d3dadapter9</b>" | ||||
|  | ||||
| @@ -830,7 +849,12 @@ A brief instruction: | ||||
| 	export loc_pm_dlls='DLLS' | ||||
| 	export loc_pm_fonts='FONTS' | ||||
| 	export loc_pm_settings='SETTINGS' | ||||
| 	export loc_start_pfx_manager="Starting prefix manager:" | ||||
|  | ||||
| 	export loc_warn_cyrillic_in_path="The path to the executable file contains Cyrillic characters.\nSometimes this can cause the application to malfunction." | ||||
|  | ||||
| 	export loc_gui_terminal="TERMINAL" | ||||
| 	export loc_gui_logo="LOGO" | ||||
|  | ||||
|  | ||||
| fi | ||||
|   | ||||
| @@ -12,6 +12,7 @@ export PW_DLL_INSTALL="vcrun2019 d3dx11_42 d3dx11_43" | ||||
| export PW_WINDOWS_VER=10 | ||||
| export PW_WINE_FULLSCREEN_FSR="0" | ||||
| export PW_USE_EAC_AND_BE="0" | ||||
| export PW_WINE_USE="PROTON_LG" | ||||
|  | ||||
| add_in_start_portwine () { | ||||
|     rm -fr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Agent/data" | ||||
|   | ||||
							
								
								
									
										11
									
								
								data_from_portwine/scripts/portwine_db/BlackDesertOnline
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,11 @@ | ||||
| #!/usr/bin/env bash | ||||
| #Author: fidel | ||||
| #BlackDesertLauncher.exe | ||||
| #Rating=1-5 | ||||
| #####################examples########################### | ||||
| export PW_WINDOWS_VER="10" | ||||
| export PW_VULKAN_USE="2" | ||||
| export PW_WINE_USE=PROTON_LG | ||||
| export PW_PREFIX_NAME="BLACK_DESERT_ONLINE" | ||||
| # export DISABLE_CP_DEFPFX=1 | ||||
| export PW_USE_EAC_AND_BE="1" | ||||
| @@ -4,6 +4,6 @@ | ||||
| #Rating=1-5 | ||||
| #####################examples########################### | ||||
| export PW_VULKAN_USE="2" | ||||
| export PW_WINE_USE="WINE_LG_9-0" | ||||
| export PW_WINE_USE="WINE_LG" | ||||
| export PW_PREFIX_NAME="CALIBER" | ||||
| export DISABLE_CP_DEFPFX=1 | ||||
|   | ||||
							
								
								
									
										10
									
								
								data_from_portwine/scripts/portwine_db/CatsLauncher
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,10 @@ | ||||
| #!/usr/bin/env bash | ||||
| #Author: fidel | ||||
| #CatsLauncher.exe | ||||
| #Rating=5 | ||||
| #####################examples########################### | ||||
| export PW_WINDOWS_VER="10" | ||||
| export PW_VULKAN_USE="2" | ||||
| export PW_WINE_USE="WINE_LG" | ||||
| export PW_PREFIX_NAME="DOTNET" | ||||
| # export WINEDLLOVERRIDES="libglesv2=" | ||||
| @@ -41,4 +41,4 @@ export PW_DLL_INSTALL="" | ||||
| export WINEDLLOVERRIDES="" | ||||
| export PW_WINE_CPU_TOPOLOGY="disabled" | ||||
| export GAMESCOPE_ARGS="-F fsr" | ||||
| add_in_start_portwine () { export LANG=C ;} | ||||
| add_in_start_portwine () { export LC_CTYPE=C ;} | ||||
|   | ||||
| @@ -17,8 +17,3 @@ Grub Customizer utility" | ||||
| fi | ||||
| export PW_VULKAN_USE="2" | ||||
|  | ||||
| add_in_start_portwine () { | ||||
|     if [ "${update_loc}" = "RUS" ] ; then | ||||
|         sed -i "s/Language=english/Language=russian/g" "${PATH_TO_GAME}/Engine/Binaries/ThirdParty/Steamworks/Steamv154/Win64/steam_api64.ini" | ||||
|     fi | ||||
| } | ||||
|   | ||||
							
								
								
									
										18
									
								
								data_from_portwine/scripts/portwine_db/HorizonForbiddenWest
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | ||||
| #!/usr/bin/env bash | ||||
| #Author: fidel | ||||
| #HorizonForbiddenWest.exe | ||||
| #Rating=5 | ||||
| #####################examples########################### | ||||
| export PW_WINE_USE="WINE-9.5-AMD64" | ||||
| export PW_WINDOWS_VER="10" | ||||
| export PW_DLL_INSTALL="" | ||||
| export WINEDLLOVERRIDES="" | ||||
| export PW_VULKAN_USE="2" | ||||
| export PW_USE_GSTREAMER="1" | ||||
| export PW_USE_D3D_EXTRAS="1" | ||||
| export PW_FIX_VIDEO_IN_GAME="1" | ||||
| export PW_USE_SHADER_CACHE="0" | ||||
| export PW_USE_EAC_AND_BE="0" | ||||
| export LAUNCH_PARAMETERS="-EpicPortal" | ||||
|  | ||||
| gui_proton_downloader silent "$PW_WINE_USE" | ||||
| @@ -3,4 +3,4 @@ | ||||
| #LOTF2.exe | ||||
| #Rating=5 | ||||
| #####################examples########################### | ||||
| export PW_WINE_USE="WINE_LG_8-18-1" | ||||
| export PW_WINE_USE="WINE_LG" | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| #Rating=1-5 | ||||
| #####################examples########################### | ||||
| export TEXT_OPSSL="" | ||||
| [[ -z `which openssl` ]] && export TEXT_OPSSL="Install openssl in your system!!!\n" | ||||
| [[ -z `which openssl` ]] && export TEXT_OPSSL="Install openssl in your system!\n" | ||||
| export PW_COMMENT_DB="${TEXT_OPSSL}Dwnload and start League of Legends can take a long time" | ||||
| # export WINEDLLOVERRIDES="mscoree,mshtml=" | ||||
| export LAUNCH_PARAMETERS="--launch-product=league_of_legends --launch-patchline=live" | ||||
|   | ||||
| @@ -0,0 +1,8 @@ | ||||
| #!/usr/bin/env bash | ||||
| #Author: fidel | ||||
| #PulseOnlineLauncher.exe | ||||
| #Rating=5 | ||||
| #####################examples########################### | ||||
| export PW_VULKAN_USE="2" | ||||
| export PW_WINE_USE="PROTON_LG" | ||||
| export PW_PREFIX_NAME="DOTNET" | ||||
| @@ -15,7 +15,8 @@ export PW_NO_ESYNC=1        # Do not use eventfd-based in-process synchronizatio | ||||
| export PW_USE_GAMEMODE=0             # Force disabele gamemod | ||||
| export PW_FORCE_LARGE_ADDRESS_AWARE=1          # Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. Enabled by default. | ||||
| export PW_DLL_INSTALL="" | ||||
| export WINEDLLOVERRIDES="mscoree,mshtml=" | ||||
| # export WINEDLLOVERRIDES="mscoree,mshtml=" | ||||
| export PW_WINE_USE=WINE_LG | ||||
|  | ||||
| add_in_stop_portwine () { | ||||
|     pw_find_exe news | ||||
|   | ||||
| @@ -3,14 +3,15 @@ | ||||
| ######################################################################## | ||||
| [ "${update_loc}" = "RUS" ] && export BN_LOC=ruRU || export BN_LOC=enUS | ||||
| export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Battle.net-Setup-${BN_LOC}.exe" | ||||
| export PW_WINE_USE="WINE_LG" | ||||
|  | ||||
| start_portwine | ||||
| if try_download_no_mirror "https://battle.net/download/getInstallerForGame?os=win&version=LIVE&gameProgram=BATTLENET_APP" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     # PW_START_PROGRESS_BAR "${loc_gui_installing_the} Battle Net. ${loc_gui_please_wait} " | ||||
|     try_remove_dir "$WINEPREFIX/drive_c/ProgramData/Battle.net" | ||||
|     pw_kill_autostart Battle.net.exe & | ||||
|     pw_run "${PW_AUTOINSTALL_EXE}" | ||||
|     pw_start_progress_bar_block "${loc_gui_installing_the} Battle Net. ${loc_gui_please_wait} " | ||||
|     portwine_exe=`find "$WINEPREFIX/drive_c/" -type f -name "Battle.net.exe" | grep "Battle.net/Battle.net.exe"` | ||||
|     pw_stop_progress_bar | ||||
|     portwine_create_shortcut | ||||
|   | ||||
							
								
								
									
										29
									
								
								data_from_portwine/scripts/pw_autoinstall/PW_BDO
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @@ -0,0 +1,29 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: Castro-Fidel (linux-gaming.ru) | ||||
| ######################################################################## | ||||
| export PW_PREFIX_NAME="BLACK_DESERT_ONLINE" | ||||
| export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/BlackDesert_Installer_RU.exe" | ||||
| export LAUNCH_PARAMETERS="/silent" | ||||
| export PW_MUST_HAVE_DLL="" | ||||
| export PW_VULKAN_USE=1 | ||||
| export PW_USE_D3D_EXTRAS=1 | ||||
| export PW_WINE_USE=PROTON_LG | ||||
| # export DISABLE_CP_DEFPFX=1 | ||||
|  | ||||
| pw_clear_pfx | ||||
| start_portwine | ||||
| wait_wineserver | ||||
|  | ||||
| if try_download_no_mirror "https://nez-o-dn.playblackdesert.com/UploadData/installer/BlackDesert_Installer_RU.exe" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     pw_start_progress_bar_block "${loc_gui_installing_the} Black Desert Online. ${loc_gui_please_wait} " | ||||
|     pw_run "${PW_AUTOINSTALL_EXE}"  | ||||
|     portwine_exe="$WINEPREFIX/drive_c/Pearlabyss/BlackDesert/BlackDesertLauncher.exe" | ||||
|     try_remove_file "${PW_AUTOINSTALL_EXE}" | ||||
|     try_remove_file "${portwine_exe}.ppdb" | ||||
|     kill_portwine | ||||
|     pw_stop_progress_bar | ||||
|     export PORTWINE_CREATE_SHORTCUT_NAME="Black Desert Online" | ||||
|     portwine_create_shortcut | ||||
| fi | ||||
| stop_portwine | ||||
| @@ -4,7 +4,7 @@ | ||||
| export PW_PREFIX_NAME="CALIBER" | ||||
| export LAUNCH_PARAMETERS=("/VERYSILENT") | ||||
| export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/CaliberSetup.exe" | ||||
| export PW_WINE_USE=WINE_LG_9-0 | ||||
| export PW_WINE_USE=WINE_LG | ||||
| export DISABLE_CP_DEFPFX=1 | ||||
| export PORTWINE_CREATE_SHORTCUT_NAME="CALIBER" | ||||
|  | ||||
|   | ||||
							
								
								
									
										22
									
								
								data_from_portwine/scripts/pw_autoinstall/PW_CATSLAUNCHER
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @@ -0,0 +1,22 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: Castro-Fidel (linux-gaming.ru) | ||||
| ######################################################################## | ||||
| export LAUNCH_PARAMETERS=("/q" ) | ||||
| export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/CatsLauncher.msi" | ||||
| export PW_PREFIX_NAME=DOTNET | ||||
| export PW_USE_D3D_EXTRAS=1 | ||||
| export PORTWINE_CREATE_SHORTCUT_NAME="CatsLauncher" | ||||
|  | ||||
| start_portwine | ||||
| if try_download_no_mirror "https://catswhoplay.com/downloads/CatsLauncher_0.1.10.msi" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     pw_start_progress_bar_block "${loc_gui_installing_the} CatsLauncher. ${loc_gui_please_wait} " | ||||
|     pw_run msiexec /i "${PW_AUTOINSTALL_EXE}" | ||||
|     portwine_exe="${WINEPREFIX}/drive_c/Program Files/CatsWhoPlay/Cats Launcher/CatsLauncher.exe" | ||||
|     try_remove_file "${PW_AUTOINSTALL_EXE}" | ||||
|     try_remove_file "${portwine_exe}.ppdb" | ||||
|     kill_portwine | ||||
|     pw_stop_progress_bar | ||||
|     portwine_create_shortcut | ||||
| fi | ||||
| stop_portwine | ||||
| @@ -1,18 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: chal55rus (Sergey P.) | ||||
| ######################################################################## | ||||
| export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/duckstation-windows-x64-release.zip" | ||||
| start_portwine | ||||
| if try_download_no_mirror "https://github.com/stenzek/duckstation/releases/download/preview/duckstation-windows-x64-release.zip" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     pw_start_progress_bar_block "${loc_gui_installing_the} VBA-M. ${loc_gui_please_wait} " | ||||
|     "$pw_7z" x -y "${PW_AUTOINSTALL_EXE}" -o"$WINEPREFIX/drive_c/Program Files (x86)/Duckstation" | ||||
|     portwine_exe="$WINEPREFIX/drive_c/Program Files (x86)/Duckstation/duckstation-qt-x64-ReleaseLTCG.exe" | ||||
|     try_remove_file "${PW_AUTOINSTALL_EXE}" | ||||
|     try_remove_file "${portwine_exe}.ppdb" | ||||
|     kill_portwine | ||||
|     pw_stop_progress_bar | ||||
|     export PORTWINE_CREATE_SHORTCUT_NAME="DuckStation" | ||||
|     portwine_create_shortcut | ||||
| fi | ||||
| stop_portwine | ||||
| @@ -11,7 +11,7 @@ try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" | ||||
| start_portwine | ||||
| if try_download_no_mirror "https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/installer/download/EpicGamesLauncherInstaller.msi" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     pw_start_progress_bar_block "Installing Epic Games Launcher. ${loc_gui_please_wait} " | ||||
|     pw_start_progress_bar_block "${loc_gui_installing_the} Epic Games Launcher. ${loc_gui_please_wait} " | ||||
|     # try_remove_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Epic Games/Epic Online Services/" | ||||
|     # try_remove_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Epic Games/Launcher/" | ||||
|     # try_remove_dir "${WINEPREFIX}/drive_c/ProgramData/Epic" | ||||
|   | ||||
							
								
								
									
										21
									
								
								data_from_portwine/scripts/pw_autoinstall/PW_PULSE_ONLINE
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @@ -0,0 +1,21 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: cefeiko | ||||
| ######################################################################## | ||||
| export PW_PREFIX_NAME=DOTNET | ||||
| export PORTWINE_CREATE_SHORTCUT_NAME="Pulse Online" | ||||
|  | ||||
| start_portwine | ||||
|  | ||||
| mkdir -p "${WINEPREFIX}/drive_c/games/PulseOnline/" | ||||
| export PW_AUTOINSTALL_EXE="${WINEPREFIX}/drive_c/games/PulseOnline/PulseOnlineLauncher.exe" | ||||
|  | ||||
| if try_download_no_mirror "https://pulseonline.ru/game_download/PulseOnlineLauncher.exe" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     export portwine_exe="$PW_AUTOINSTALL_EXE" | ||||
|     try_remove_file "${portwine_exe}.ppdb" | ||||
|     pw_stop_progress_bar | ||||
|     portwine_create_shortcut | ||||
|     kill_portwine | ||||
| fi | ||||
|  | ||||
| stop_portwine | ||||
| @@ -1,18 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: chal55rus (Sergey P.) | ||||
| ######################################################################## | ||||
| export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/rpcs3-v0.0.29-15676-9fce7080_win64.7z" | ||||
| start_portwine | ||||
| if try_download_no_mirror "https://github.com/RPCS3/rpcs3-binaries-win/releases/download/build-9fce70809ee06a7e61a3dbe5bb9b0179fc541d9f/rpcs3-v0.0.29-15676-9fce7080_win64.7z" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     pw_start_progress_bar_block "${loc_gui_installing_the} RPCS3. ${loc_gui_please_wait} " | ||||
|     "$pw_7z" x -y "${PW_AUTOINSTALL_EXE}" -o"$WINEPREFIX/drive_c/Program Files (x86)/RPCS3" | ||||
|     portwine_exe="$WINEPREFIX/drive_c/Program Files (x86)/RPCS3/rpcs3.exe" | ||||
|     try_remove_file "${PW_AUTOINSTALL_EXE}" | ||||
|     try_remove_file "${portwine_exe}.ppdb" | ||||
|     kill_portwine | ||||
|     pw_stop_progress_bar | ||||
|     export PORTWINE_CREATE_SHORTCUT_NAME="RPCS3" | ||||
|     portwine_create_shortcut | ||||
| fi | ||||
| stop_portwine | ||||
| @@ -1,20 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: chal55rus (Sergey P.) | ||||
| ##########################################################################  | ||||
| export LAUNCH_PARAMETERS=("/VERYSILENT") | ||||
| export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/scummvm-2.7.1-win32.exe" | ||||
| start_portwine | ||||
| if try_download_no_mirror "https://downloads.scummvm.org/frs/scummvm/2.7.1/scummvm-2.7.1-win32.exe" "${PW_AUTOINSTALL_EXE}" | ||||
| then | ||||
|     pw_start_progress_bar_block "${loc_gui_installing_the} ScummVM. ${loc_gui_please_wait} " | ||||
|     #pw_kill_autostart launcher101xp.exe & | ||||
|     pw_run "${PW_AUTOINSTALL_EXE}" | ||||
|     portwine_exe="$WINEPREFIX/drive_c/Program Files/ScummVM/scummvm.exe" | ||||
|     try_remove_file "${PW_AUTOINSTALL_EXE}" | ||||
|     try_remove_file "${portwine_exe}.ppdb" | ||||
|     kill_portwine | ||||
|     pw_stop_progress_bar | ||||
|     export PORTWINE_CREATE_SHORTCUT_NAME="ScummVM" | ||||
|     portwine_create_shortcut | ||||
| fi | ||||
| stop_portwine | ||||
| @@ -1,906 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: Castro-Fidel (linux-gaming.ru) | ||||
| # Development assistants: Cefeiko; Dezert1r; Taz_mania; Anton_Famillianov; gavr; RidBowt; chal55rus; UserDiscord; Boria138; Vano; Akai | ||||
| ######################################################################## | ||||
| echo ' | ||||
|             █░░ █ █▄░█ █░█ ▀▄▀ ▄▄ █▀▀ ▄▀█ █▀▄▀█ █ █▄░█ █▀▀ ░ █▀█ █░█ | ||||
|             █▄▄ █ █░▀█ █▄█ █░█ ░░ █▄█ █▀█ █░▀░█ █ █░▀█ █▄█ ▄ █▀▄ █▄█ | ||||
|  | ||||
| ██████╗░░█████╗░██████╗░████████╗██████╗░██████╗░░█████╗░████████╗░█████╗░███╗░░██╗ | ||||
| ██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗████╗░██║ | ||||
| ██████╔╝██║░░██║██████╔╝░░░██║░░░██████╔╝██████╔╝██║░░██║░░░██║░░░██║░░██║██╔██╗██║ | ||||
| ██╔═══╝░██║░░██║██╔══██╗░░░██║░░░██╔═══╝░██╔══██╗██║░░██║░░░██║░░░██║░░██║██║╚████║ | ||||
| ██║░░░░░╚█████╔╝██║░░██║░░░██║░░░██║░░░░░██║░░██║╚█████╔╝░░░██║░░░╚█████╔╝██║░╚███║ | ||||
| ╚═╝░░░░░░╚════╝░╚═╝░░╚═╝░░░╚═╝░░░╚═╝░░░░░╚═╝░░╚═╝░╚════╝░░░░╚═╝░░░░╚════╝░╚═╝░░╚══╝ | ||||
|  | ||||
| ' | ||||
| if [[ $(id -u) = 0 ]] ; then | ||||
|     echo "Do not run this script as root!" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| . "$(dirname $(readlink -f "$0"))/functions_helper" | ||||
|  | ||||
| start_portwine () { | ||||
|     var_winedlloverride_update "${PW_MUST_WINEDLLOVERRIDES}" | ||||
|     export WINEPREFIX="$(readlink -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}")" | ||||
|     if [[ "$WINEPREFIX" != "${PORT_WINE_PATH}/data/prefixes/"* ]] && [[ ! -d "$WINEPREFIX" ]] ; then | ||||
|         yad_error "Path to PREFIX not found:\n$WINEPREFIX" | ||||
|         exit 1 | ||||
|     fi | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|     try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${WINEPREFIX}/drive_c/" | ||||
|     export WINEARCH="win64" | ||||
|     if [[ "${PW_VULKAN_USE}" == 3 ]] ; then  | ||||
|         export PW_WINE_USE="${PW_PROTON_LG_VER}" | ||||
|         echo "Force to use $PW_WINE_USE" | ||||
|         if [ ! -d "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" ] ; then | ||||
|             if try_download "github.com/Castro-Fidel/wine_builds/releases/download/${PW_WINE_USE}/${PW_WINE_USE}.tar.xz" \ | ||||
|                 "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" ; then | ||||
|                 if unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" "${PORT_WINE_PATH}/data/dist/" ; then | ||||
|                     try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" | ||||
|                     UNPACK_STATUS=0 | ||||
|                 else | ||||
|                     try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" | ||||
|                     try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" | ||||
|                 fi | ||||
|             fi | ||||
|             [[ "${UNPACK_STATUS}" != 0 ]] && exit 1 | ||||
|         fi | ||||
|         edit_db_from_gui PW_WINE_USE | ||||
|     else | ||||
|         pw_check_and_download_wine "${PW_WINE_USE}" | ||||
|     fi | ||||
|     pw_install_dll_in_prefix  | ||||
|     init_wine_ver | ||||
|  | ||||
|     if [[ -f "$portwine_exe" ]] && [[ "${WARN_CYRILLIC_IN_PATH}" == 1 ]] ; then | ||||
|         edit_db_from_gui WARN_CYRILLIC_IN_PATH | ||||
|         unset WARN_CYRILLIC_IN_PATH | ||||
|     fi | ||||
|  | ||||
|     if [[ "$PW_USE_OBS_VKCAPTURE" == "1" ]] ; then | ||||
|         export OBS_VKCAPTURE="1" | ||||
|         export PW_USE_SYSTEM_VK_LAYERS="1" | ||||
|         print_warning "System mangohud, vkBasalt, obs-vk capture and other applications using vulkan layers are forcibly used." | ||||
|     fi | ||||
|  | ||||
|     pw_init_runtime | ||||
|      | ||||
|     check_variables VKD3D_DEBUG none | ||||
|     check_variables DXVK_LOG_LEVEL none | ||||
|     check_variables VK_LOADER_DEBUG none | ||||
|     check_variables VKBASALT_LOG_LEVEL none | ||||
|     check_variables DXVK_NVAPI_LOG_LEVEL none | ||||
|     if [[ "${PW_LOG}" == 1 ]] ; then | ||||
|         export WINEDEBUG="fixme-all,err+loaddll,err+dll,err+file,err+reg" | ||||
|         export WINE_MONO_TRACE="E:System.NotImplementedException" | ||||
|         export VKBASALT_LOG_LEVEL="error" | ||||
|     else | ||||
|         export WINEDEBUG="-all" | ||||
|         unset WINE_MONO_TRACE | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_NO_ESYNC}" == 1 ]] | ||||
|     then export WINEESYNC="0" | ||||
|     else export WINEESYNC="1" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_NO_FSYNC}" == 1 ]] ; then | ||||
|         export WINEFSYNC="0" | ||||
|         export WINEFSYNC_FUTEX2="0" | ||||
|     else | ||||
|         export WINEFSYNC="1" | ||||
|         export WINEFSYNC_FUTEX2="1" | ||||
|         export WINEFSYNC_SPINCOUNT=100 | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_FORCE_LARGE_ADDRESS_AWARE}" == 1 ]] | ||||
|     then export WINE_LARGE_ADDRESS_AWARE="1" | ||||
|     else export WINE_LARGE_ADDRESS_AWARE="0" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_OLD_GL_STRING}" == 1 ]] ; then | ||||
|         export MESA_EXTENSION_MAX_YEAR="2003" #mesa override | ||||
|         export __GL_ExtensionStringVersion="17700" #nvidia override | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_NO_WRITE_WATCH}" == 1 ]] ; then | ||||
|         export WINE_DISABLE_WRITE_WATCH="1" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_VULKAN_NO_ASYNC}" == 1 ]] ; then | ||||
|         export RADV_DEBUG="llvm" | ||||
|         var_vkd3d_config_update single_queue | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_USE_GAMESCOPE}" == 1 ]] && command -v gamescope &>/dev/null && ! check_gamescope_session ; then | ||||
|         # Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/issues/6029 | ||||
|         if [[ -d "/sys/module/i915" ]] ; then | ||||
|             export INTEL_DEBUG="norbc" | ||||
|         fi | ||||
|         if [[ "${PW_GPU_USE}" != "disabled" ]] ; then | ||||
|             PW_vendorID="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -B3 "${PW_GPU_USE}" | grep vendorID | sort -u | awk -F'0x' '{print $2}')" | ||||
|             PW_deviceID="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -B3 "${PW_GPU_USE}" | grep deviceID | sort -u | awk -F'0x' '{print $2}')" | ||||
|             PW_ID_VIDEO="--prefer-vk-device ${PW_vendorID}:${PW_deviceID}" | ||||
|         else | ||||
|             unset PW_ID_VIDEO | ||||
|         fi | ||||
|         export PW_RUN_GAMESCOPE="gamescope -o 30 ${PW_ID_VIDEO} ${GAMESCOPE_ARGS} --" | ||||
|         export PW_WINE_FULLSCREEN_FSR="0" | ||||
|         export vk_xwayland_wait_ready="false" | ||||
|     else | ||||
|         export PW_USE_GAMESCOPE="0" | ||||
|         export PW_RUN_GAMESCOPE="" | ||||
|     fi | ||||
|      | ||||
|     enabled_fake_nvidia_videocard ()  | ||||
|     { | ||||
|         if [[ "${1}" == old ]] ; then | ||||
|             sed -i /'dxgi.customDeviceDesc =/c # dxgi.customDeviceDesc =' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 222F' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.customVendorId =/c dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.hideAmdGpu =/c # dxgi.hideAmdGpu =' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.hideNvidiaGpu =/c # dxgi.hideNvidiaGpu =' "${DXVK_CONFIG_FILE}" | ||||
|             unset WINE_HIDE_NVIDIA_GPU WINE_HIDE_AMD_GPU  | ||||
|             unset DXVK_NVAPI_DRIVER_VERSION DXVK_NVAPI_ALLOW_OTHER_DRIVERS | ||||
|         elif [[ "${1}" == new ]] ; then | ||||
|             sed -i /'dxgi.customDeviceDesc =/c dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 2684' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.customVendorId =/c dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.hideAmdGpu =/c dxgi.hideAmdGpu = True' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.hideNvidiaGpu =/c dxgi.hideNvidiaGpu = False' "${DXVK_CONFIG_FILE}" | ||||
|             export WINE_HIDE_NVIDIA_GPU=0 | ||||
|             export WINE_HIDE_AMD_GPU=1 | ||||
|             export DXVK_NVAPI_DRIVER_VERSION=53713 | ||||
|             export DXVK_NVAPI_ALLOW_OTHER_DRIVERS=1 | ||||
|         elif [[ "${1}" == 0 ]] ; then | ||||
|             sed -i /'dxgi.customDeviceDesc =/c # dxgi.customDeviceDesc =' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.customDeviceId =/c # dxgi.customDeviceId =' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.customVendorId =/c # dxgi.customVendorId =' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.hideAmdGpu =/c # dxgi.hideAmdGpu =' "${DXVK_CONFIG_FILE}" | ||||
|             sed -i /'dxgi.hideNvidiaGpu =/c # dxgi.hideNvidiaGpu =' "${DXVK_CONFIG_FILE}" | ||||
|             unset WINE_HIDE_NVIDIA_GPU WINE_HIDE_AMD_GPU  | ||||
|             unset DXVK_NVAPI_DRIVER_VERSION DXVK_NVAPI_ALLOW_OTHER_DRIVERS | ||||
|         fi | ||||
|     } | ||||
|  | ||||
|     for rm_dll in "nvml.dll" "nvngx.ini" "nvngx.dll" "_nvngx.dll" ; do | ||||
|         try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/$rm_dll" | ||||
|         try_remove_file "${WINEPREFIX}/drive_c/windows/system32/$rm_dll" | ||||
|     done | ||||
|  | ||||
|     # TODO: LFX (wait new LFX v2) | ||||
|     # if [[ "${PW_USE_LFX}" == 1 ]] ; then | ||||
|     #     try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.so" "${WINEDIR}/lib64/wine/x86_64-unix/" | ||||
|     #     try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|     #     try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_wine.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|     #     enabled_fake_nvidia_videocard 1 | ||||
|     #     export LFX2=1 | ||||
|     # fi | ||||
|  | ||||
|     export DXVK_ENABLE_NVAPI=1 | ||||
|     if [[ "${PW_USE_FAKE_DLSS_3}" == 1 ]] ; then | ||||
|         try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss_3/${PW_FAKE_DLSS_3_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"  | ||||
|         try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_3_VER}/dlssg_to_fsr3_amd_is_better.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         var_winedlloverride_update "nvapi,nvapi64,nvngx,_nvngx,dlssg_to_fsr3_amd_is_better=n;nvcuda=b" | ||||
|         enabled_fake_nvidia_videocard new | ||||
|         export WINEHAGS=1 | ||||
|     elif [[ "${PW_USE_FAKE_DLSS}" == 1 ]] && [[ -d "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/" ]] ; then | ||||
|         try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"  | ||||
|         try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.ini" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         enabled_fake_nvidia_videocard old | ||||
|         var_winedlloverride_update "nvapi,nvapi64,nvngx=n;_nvngx=;nvcuda=b" | ||||
|     elif [[ "${PW_USE_NVAPI_AND_DLSS}" == 1 ]] ; then | ||||
|         FIND_NVNGX="$(dirname $(find /usr/* -type f -name "nvngx.dll" 2>/dev/null | head -n 1 | awk '{print $1}'))" | ||||
|         if [[ ! -z "$FIND_NVNGX" ]] ; then | ||||
|             try_copy_file "${FIND_NVNGX}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|             try_copy_file "${FIND_NVNGX}/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         else | ||||
|             try_force_link_file "${PW_PLUGINS_PATH}/nvngx/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|             try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         fi  | ||||
|         enabled_fake_nvidia_videocard 0 | ||||
|         var_winedlloverride_update "nvngx,_nvngx,nvapi,nvapi64=n;nvcuda=b" | ||||
|     else | ||||
|         enabled_fake_nvidia_videocard 0 | ||||
|         export DXVK_ENABLE_NVAPI=0 | ||||
|         var_winedlloverride_update "nvngx,_nvngx=" | ||||
|     fi | ||||
|      | ||||
|     if [[ "${PW_USE_GALLIUM_ZINK}" == 1 ]] ; then | ||||
|         export PW_VULKAN_USE=5 | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_HEAP_DELAY_FREE}" == 1 ]] | ||||
|     then export WINE_HEAP_DELAY_FREE="1" | ||||
|     else export WINE_HEAP_DELAY_FREE="0" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_WINE_ALLOW_XIM}" == 1 ]] | ||||
|     then export WINE_ALLOW_XIM="1" | ||||
|     else export WINE_ALLOW_XIM="0" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_FIX_VIDEO_IN_GAME}" == 1 ]] | ||||
|     then export WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER="1" | ||||
|     else export WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER="0" | ||||
|     fi | ||||
|      | ||||
|     [[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG | ||||
|     [[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS | ||||
|  | ||||
|     if [[ "${PW_USE_DXR11}" == 1 ]] \ | ||||
|     || [[ "${PW_USE_DXR10}" == 1 ]] \ | ||||
|     || [[ "${PW_USE_RAY_TRACING}" == 1 ]] | ||||
|     then | ||||
|         export VKD3D_FEATURE_LEVEL="12_1" | ||||
|         var_vkd3d_config_update dxr | ||||
|         var_radv_perftest_config_update rt | ||||
|     else | ||||
|         var_vkd3d_config_update nodxr | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_GPU_USE}" != "disabled" ]] ; then | ||||
|         export DXVK_FILTER_DEVICE_NAME="${PW_GPU_USE}" | ||||
|         export VKD3D_FILTER_DEVICE_NAME="${PW_GPU_USE}" | ||||
|         if echo "${PW_GPU_USE}" | grep -i nvidia &>/dev/null ; then | ||||
|             if [[ -f "/usr/share/vulkan/icd.d/nvidia_icd.json" ]] ; then | ||||
|                 export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json" | ||||
|             fi | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     # if [[ "${PW_AMD_VULKAN_USE}" == "amdvlk" ]] ; then | ||||
|     #     export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 | ||||
|     #     if grep -i -q -E '(rosa|redos|nobara|linuxmint|ubuntu|centos|rhel|fedora)' "/etc/os-release" ; then | ||||
|     #         export VK_ICD_FILENAMES="/opt/amdgpu/etc/vulkan/icd.d/amd_icd32.json:/opt/amdgpu/etc/vulkan/icd.d/amd_icd64.json" | ||||
|     #     elif grep -i -q "altlinux" '/etc/os-release' ; then | ||||
|     #         export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_icd.json" | ||||
|     #     else | ||||
|     #         export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_icd32.json:/usr/share/vulkan/icd.d/amd_icd64.json" | ||||
|     #     fi | ||||
|     # elif [[ "${PW_AMD_VULKAN_USE}" == "amdgpupro" ]] ; then | ||||
|     #     export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 | ||||
|     #     if grep -i -q -E '(rosa|redos|nobara|linuxmint|ubuntu|centos|rhel|fedora)' "/etc/os-release" ; then | ||||
|     #         export VK_ICD_FILENAMES="/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd32.json:/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd64.json" | ||||
|     #         var_ld_library_path_update "/opt/amdgpu/libdrm/lib64:/opt/amdgpu/libdrm/lib32" | ||||
|     #     else | ||||
|     #         export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_pro_icd32.json:/usr/share/vulkan/icd.d/amd_pro_icd64.json" | ||||
|     #     fi | ||||
|     # elif [[ "${PW_AMD_VULKAN_USE}" == "radv" ]] ; then | ||||
|     #     export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 | ||||
|     #     export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json" | ||||
|     # elif [[ "${PW_AMD_VULKAN_USE}" == "radv_aco" ]] ; then | ||||
|     #     export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 | ||||
|     #     var_radv_perftest_config_update aco | ||||
|     #     export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json" | ||||
|     # elif [[ "${PW_AMD_VULKAN_USE}" == "radv_gpl" ]] ; then | ||||
|     #     export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 | ||||
|     #     var_radv_perftest_config_update gpl | ||||
|     #     export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json" | ||||
|     # fi | ||||
|  | ||||
|     case "$PW_FORCE_USE_VSYNC" in  # 0-FORCE_OFF, 1-FORCE_ON, 2-BY_DEFAULT | ||||
|         0) | ||||
|             export  vblank_mode=0 | ||||
|             export __GL_SYNC_TO_VBLANK=0 | ||||
|             ;; | ||||
|         1) | ||||
|             export vblank_mode=1 | ||||
|             export __GL_SYNC_TO_VBLANK=1 | ||||
|             ;; | ||||
|         *) | ||||
|             unset vblank_mode __GL_SYNC_TO_VBLANK | ||||
|             ;; | ||||
|     esac | ||||
|     export int_xneur=0 | ||||
|     if [[ ! -z "`pgrep xneur`" ]]; then | ||||
|         killall xneur | ||||
|         export int_xneur=1 | ||||
|     fi | ||||
|     if [[ "$PW_USE_GAMEMODE" = "1" ]] ; then | ||||
|  | ||||
|         if command -v gamemoded ; then | ||||
|             export GAMEMODERUN=1 | ||||
|             PW_GAMEMODERUN_SLR="gamemoderun" | ||||
|             systemctl enable --now --user gamemoded &>/dev/null | ||||
|             print_info "Gamemod will be launched." | ||||
|         else | ||||
|             export GAMEMODERUN=1 | ||||
|             if ! pidof gamemoded &>/dev/null ; then | ||||
|                 GAMEMODEAUTO_NAME="libgamemodeauto.so.0" | ||||
|                 if [[ ! -z "${PW_LD_PRELOAD}" ]] | ||||
|                 then export PW_LD_PRELOAD="${PW_LD_PRELOAD}:${GAMEMODEAUTO_NAME}" | ||||
|                 else export PW_LD_PRELOAD="${GAMEMODEAUTO_NAME}" | ||||
|                 fi | ||||
|  | ||||
|                 env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32" \ | ||||
|                 "${PW_PLUGINS_PATH}/portable/bin/gamemoded" &>/dev/null & | ||||
|  | ||||
|                 print_info "Gamemod will be launched." | ||||
|                 sleep 0.1 | ||||
|             fi | ||||
|         fi | ||||
|     else | ||||
|         export GAMEMODERUN=0 | ||||
|         export PW_GAMEMODERUN_SLR="" | ||||
|         print_info "Gamemod is not installed or disabled in vars script or db file: PW_USE_GAMEMODE=$PW_USE_GAMEMODE" | ||||
|     fi | ||||
|     pw_other_fixes | ||||
|  | ||||
|     check_dirs_and_files_in_pfx () { | ||||
|         create_new_dir "${WINEPREFIX}" | ||||
|         create_new_dir "${WINEPREFIX}/drive_c" | ||||
|         create_new_dir "${WINEPREFIX}/dosdevices" | ||||
|         create_new_dir "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|         create_new_dir "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         create_new_dir "${WINEPREFIX}/drive_c/tmp/.private/$USER/" | ||||
|         create_new_dir "${WINEPREFIX}/drive_c/tmp/.private/steamuser/" | ||||
|  | ||||
|         [ ! -d "${WINEPREFIX}/dosdevices/c:" ] && try_force_link_dir "${WINEPREFIX}/drive_c/" "${WINEPREFIX}/dosdevices/c:" | ||||
|         [ ! -d "${WINEPREFIX}/dosdevices/z:" ] && try_force_link_dir "/" "${WINEPREFIX}/dosdevices/z:" | ||||
|         [ ! -d "${WINEPREFIX}/dosdevices/h:" ] && try_force_link_dir "$HOME" "${WINEPREFIX}/dosdevices/h:" | ||||
|          | ||||
|         create_new_dir "${WINEPREFIX}/drive_c/windows/Fonts/" | ||||
|         LN_FONTS="arialbd.ttf courbd.ttf georgia.ttf micross.ttf msyh.ttf simsun.ttc arial.ttf cour.ttf malgun.ttf msgothic.ttc nirmala.ttf times.ttf" | ||||
|         for link_font in $LN_FONTS ; do | ||||
|             if [[ ! -f "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}" ]] ; then | ||||
|                 try_force_link_file "${WINEDIR}/share/fonts/${link_font}" "${WINEPREFIX}/drive_c/windows/Fonts/" | ||||
|             fi | ||||
|         done | ||||
|  | ||||
|         find "${WINEPREFIX}/dosdevices" -xtype l -maxdepth 1 2>/dev/null -exec rm {} \; | ||||
|         rm -f "${WINEPREFIX}/dosdevices/"*:: | ||||
|         DRIVES=(d e f g i j k l m n o p q r s t u v w x y) | ||||
|         DEF_MOUNT_DIRS=('/media' "/media/$USER" '/mnt' '/run/media' "/run/media/$USER") | ||||
|         MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -type d 2>/dev/null | sort -u)) | ||||
|  | ||||
|         for drive_dir in "${MOUNT_DIRS[@]}" ; do | ||||
|             if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \ | ||||
|             && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep "$drive_dir" &>/dev/null ; then | ||||
|                 drive_num=0 | ||||
|                 while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do | ||||
|                     drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:" | ||||
|                     if [ ! -d "$drive_path" ] ; then | ||||
|                         ln -sf "$drive_dir" "$drive_path" | ||||
|                         break | ||||
|                     else | ||||
|                         ((drive_num++)) | ||||
|                     fi | ||||
|                 done | ||||
|             fi | ||||
|         done | ||||
|     } | ||||
|  | ||||
|     PROGPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/progpfx${PROGPFX_VER}/progpfx${PROGPFX_VER}.tar.xz" | ||||
|     if [[ "${PW_PREFIX_NAME}" == "PROGRAMS" && ! -f "${WINEPREFIX}"/.progpfx ]] ; then | ||||
|         print_info "Download and install PROGRAMS pfx..." | ||||
|         if try_download "${PROGPFX_URL}" "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" ; then | ||||
|             unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/" | ||||
|             try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" | ||||
|         else | ||||
|             try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" | ||||
|             yad_error_download && exit 1 | ||||
|         fi | ||||
|     fi | ||||
|          | ||||
|     DOTPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/dotpfx${DOTPFX_VER}/dotpfx${DOTPFX_VER}.tar.xz" | ||||
|     if [[ "${PW_PREFIX_NAME}" == "DOTNET" ]] && [[ ! -f "${WINEPREFIX}"/.dotnet${DOTPFX_VER} ]] ; then | ||||
|         print_info "Download and install DOTNET pfx..." | ||||
|         if try_download "${DOTPFX_URL}" "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" ; then | ||||
|             unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/" | ||||
|             try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" | ||||
|         else | ||||
|             try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" | ||||
|             yad_error_download && exit 1 | ||||
|         fi | ||||
|     fi | ||||
|      | ||||
|     pw_update_pfx_cover_gui | ||||
|  | ||||
|     if [[ ! -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" \ | ||||
|     || ! -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/windows \ | ||||
|     || ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/userdef.reg \ | ||||
|     || ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/system.reg \ | ||||
|     || ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/user.reg ]] | ||||
|     then | ||||
|         pw_clear_pfx | ||||
|         check_dirs_and_files_in_pfx | ||||
|         if [[ -f "${PW_WINELIB}/default_pfx.tar.xz" ]] && [[ "${DISABLE_CP_DEFPFX}" != 1 ]] ; then | ||||
|             unpack_tar_xz "${PW_WINELIB}/default_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent | ||||
|         fi       | ||||
|     fi | ||||
|     echo "${PW_WINE_USE}" > "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" | ||||
|     check_dirs_and_files_in_pfx | ||||
|  | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/users/steamuser" | ||||
|     if [ ! -d "${WINEPREFIX}/drive_c/users/${USER}" ]; then | ||||
| 	    try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser" "${WINEPREFIX}/drive_c/users/${USER}" | ||||
|     fi | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/users/Public/Documents/Steam" | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents/Steam" | ||||
|     if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/My Documents" ] | ||||
|     then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents" "${WINEPREFIX}/drive_c/users/steamuser/My Documents" | ||||
|     fi | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming" | ||||
|     if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/Application Data" ] | ||||
|     then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming" "${WINEPREFIX}/drive_c/users/steamuser/Application Data" | ||||
|     fi | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" | ||||
|     create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/Local Settings" | ||||
|     if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data" ] | ||||
|     then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data" | ||||
|     fi | ||||
|     #enabled BattleEye_Runtime and EasyAntiCheat_Runtime | ||||
|     if [[ "${PW_USE_EAC_AND_BE}" == 1 ]] ; then | ||||
|         export PROTON_BATTLEYE_RUNTIME="${PW_PLUGINS_PATH}/BattlEye_Runtime" | ||||
|         export PROTON_EAC_RUNTIME="${PW_PLUGINS_PATH}/EasyAntiCheat_Runtime" | ||||
|         var_winedlloverride_update "beclient,beclient_x64=b,n" | ||||
|     else | ||||
|         unset PROTON_BATTLEYE_RUNTIME PROTON_EAC_RUNTIME | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_REDUCE_PULSE_LATENCY}" == 1 ]] ; then | ||||
|         export PULSE_LATENCY_MSEC=60 | ||||
|         # export PIPEWIRE_LATENCY=128/48000 | ||||
|     else | ||||
|         unset PULSE_LATENCY_MSEC | ||||
|     fi | ||||
|  | ||||
|     if [[ "$PW_USE_US_LAYOUT" == "1" ]] && [[ "${XDG_SESSION_TYPE}" != "wayland" ]] && command -v setxkbmap &>/dev/null ; then | ||||
|         setxkbmap -model pc101 us -print | xkbcomp - $DISPLAY &>/dev/null | ||||
|     else | ||||
|         export PW_USE_US_LAYOUT="0" | ||||
|     fi | ||||
|  | ||||
|     D3D_EXTRAS_LIBS="d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 d3dcompiler_36 d3dcompiler_37 | ||||
|     d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 | ||||
|     d3dcompiler_47 d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41 | ||||
|     d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30 | ||||
|     d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43" | ||||
|     if [[ "${PW_USE_D3D_EXTRAS}" == 1 ]] ; then | ||||
|         if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" ]] \ | ||||
|         || [[ -z "`grep d3dx9 "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"`" ]] | ||||
|         then | ||||
|             echo "d3dx9" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" | ||||
|         fi | ||||
|         #try link d3d extras libs | ||||
|         PATH_TO_D3DEXTRAS="${PW_WINELIB}/d3d_extras" | ||||
|         for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do | ||||
|             try_force_link_file "${PATH_TO_D3DEXTRAS}/x64/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|             try_force_link_file "${PATH_TO_D3DEXTRAS}/x32/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|             var_winedlloverride_update "${d3d_extras_from_plugins}=n" | ||||
|             if [[ -z "`grep "${d3d_extras_from_plugins}" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"`" ]] ; then | ||||
|                 echo "${d3d_extras_from_plugins}" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" | ||||
|             fi | ||||
|         done | ||||
|     else | ||||
|         for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do | ||||
|             try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|             try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         done | ||||
|     fi | ||||
|     print_info "Try link wine d3d files by default..." | ||||
|     for rm_vulkan_dll in libvkd3d-1 libvkd3d-shader-1 dxvk_config nvapi nvapi64 d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do | ||||
|         try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${rm_vulkan_dll}.dll" | ||||
|         try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${rm_vulkan_dll}.dll" | ||||
|     done | ||||
|     for wine_build_dll in d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do | ||||
|         try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|         try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|     done | ||||
|  | ||||
|     create_new_dir "${PW_VULKAN_DIR}/opengl" | ||||
|     PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/opengl" | ||||
|     PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/opengl" | ||||
|  | ||||
|     if [[ "${PW_VULKAN_USE}" == "0" ]] ; then | ||||
|         print_info "Use OpenGL" | ||||
|         export GL_YIELD="NOTHING" | ||||
|         export mesa_glthread=true | ||||
|         export WINE_D3D_CONFIG='renderer=gl' | ||||
|     elif [[ "${PW_VULKAN_USE}" == "5" ]] ; then | ||||
|         print_info "Use OpenGL Zink" | ||||
|         export GL_YIELD="NOTHING" | ||||
|         export mesa_glthread=true | ||||
|         export WINE_D3D_CONFIG='renderer=gl' | ||||
|         export  __GLX_VENDOR_LIBRARY_NAME=mesa | ||||
|         export MESA_LOADER_DRIVER_OVERRIDE=zink | ||||
|         export GALLIUM_DRIVER=zink | ||||
|         if [[ "${XDG_SESSION_TYPE}" != "wayland" ]] || [[ "${PW_USE_GAMESCOPE}" != 1 ]] ; then | ||||
|             export LIBGL_KOPPER_DRI2=1 | ||||
|         fi | ||||
|     elif [[ "${PW_VULKAN_USE}" == "3" ]] ; then | ||||
|         print_info "Use GALLIUM-NINE (Native DX9 on MESA drivers)" | ||||
|         export PW_GALLIUM_NINE_PATH="${PW_PLUGINS_PATH}/gallium_nine_v.${PW_GALLIUM_NINE_VER}" | ||||
|         try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib32/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/syswow64/d3d9.dll" | ||||
|         try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib64/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/system32/d3d9.dll" | ||||
|         var_winedlloverride_update "d3d9=n;wined3d=b;dxvk_config,vulkan-1,winevulkan=" | ||||
|         unset FIND_D3D_MODULE D3D_MODULE_PATH | ||||
|         FIND_D3D_MODULE=`dirname $(find /usr/ -maxdepth 4 -type f -name "d3dadapter9.so.*") 2>/dev/null`  | ||||
|         if [[ ! -z "$FIND_D3D_MODULE" ]] ; then | ||||
|             old_IFS=$IFS | ||||
|             IFS=$'\n' | ||||
|             for D3D_MP in $FIND_D3D_MODULE ; do | ||||
|                 if [[ ! -z "$D3D_MODULE_PATH" ]]  | ||||
|                 then export D3D_MODULE_PATH="$D3D_MODULE_PATH:/run/host${D3D_MP}" | ||||
|                 else export D3D_MODULE_PATH="/run/host${D3D_MP}" | ||||
|                 fi | ||||
|             done | ||||
|             IFS=$old_IFS | ||||
|             print_info "D3D_MODULE_PATH=${D3D_MODULE_PATH}" | ||||
|         else  | ||||
|             pw_stop_progress_bar | ||||
|             yad_error "d3dadapter9.so.1.0.0 - ${loc_find_d3dadapter9_error}" | ||||
|             stop_portwine | ||||
|         fi | ||||
|         export mesa_glthread=true | ||||
|         export ENABLE_VKBASALT=0 | ||||
|         export PW_MANGOHUD=0 | ||||
|         export WINE_FULLSCREEN_FSR=0 | ||||
|     elif [[ "${PW_VULKAN_USE}" == "4" ]] ; then | ||||
|         print_info "Use DAMAVAND (DirectX to wined3d vulkan)" | ||||
|         export WINE_D3D_CONFIG='renderer=vulkan' | ||||
|     else | ||||
|         print_info "Use VKD3D-PROTON, DXVK and D8VK (DirectX 8-12 to vulkan)" | ||||
|         if [[ "${PW_USE_WINE_DXGI}" == 1 ]] ; then  | ||||
|             export CP_DXVK_FILES="d3d11 d3d10core d3d9 dxvk_config" # openvr_api_dxvk | ||||
|             var_winedlloverride_update dxgi=b | ||||
|         elif [[ "${USE_ALL_DXVK_DLLS}" == 1 ]] ; then  | ||||
|             export CP_DXVK_FILES="d3d11 d3d10core d3d10_1 d3d10 d3d9 dxgi dxvk_config" # openvr_api_dxvk | ||||
|         else | ||||
|             export CP_DXVK_FILES="d3d11 d3d10core d3d9 dxgi dxvk_config" # openvr_api_dxvk | ||||
|         fi | ||||
|         check_variables VKD3D_FEATURE_LEVEL "12_0" | ||||
|         if [[ "${PW_VULKAN_USE}" == "1" ]] ; then | ||||
|             PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/dxvk-${DXVK_STABLE_VER}" | ||||
|             PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_STABLE_VER}" | ||||
|             print_info "DXVK v.${DXVK_STABLE_VER} in use" | ||||
|             print_info "VKD3D-PROTON v.${VKD3D_STABLE_VER} in use" | ||||
|         elif [[ "${PW_VULKAN_USE}" == "2" ]] ; then | ||||
|             PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/dxvk-${DXVK_GIT_VER}" | ||||
|             PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_GIT_VER}" | ||||
|             print_info "DXVK v.${DXVK_GIT_VER} in use" | ||||
|             print_info "VKD3D-PROTON v.${VKD3D_GIT_VER} in use" | ||||
|         fi | ||||
|         PATH_TO_D8VK_FILES="${PW_VULKAN_DIR}/d8vk-${D8VK_VER}" | ||||
|         print_info "D8VK v.${D8VK_VER} in use" | ||||
|  | ||||
|         print_info "Try link native DXVK files..." | ||||
|         for wine_dxvk_dll in ${CP_DXVK_FILES} ; do | ||||
|             if [[ -f "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll"  ]] ; then | ||||
|                 try_force_link_file "${PATH_TO_DXVK_FILES}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|                 try_force_link_file "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|                 var_winedlloverride_update "${wine_dxvk_dll}=n" | ||||
|             fi | ||||
|         done | ||||
|  | ||||
|         try_force_link_file "${WINEDIR}/lib/wine/nvapi/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \ | ||||
|         try_force_link_file "${PATH_TO_DXVK_FILES}/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \ | ||||
|         try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|  | ||||
|         try_force_link_file "${WINEDIR}/lib64/wine/nvapi/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \ | ||||
|         try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \ | ||||
|         try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/"  | ||||
|  | ||||
|         print_info "Try link native VKD3D files..." | ||||
|         for wine_vkd3d_dll in d3d12 d3d12core libvkd3d-1 libvkd3d-shader-1; do  | ||||
|             if [[ -f "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" ]] ; then | ||||
|                 try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|                 try_force_link_file "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|                 var_winedlloverride_update "${wine_vkd3d_dll}=n" | ||||
|             fi | ||||
|         done | ||||
|  | ||||
|         print_info "Try link native D8VK file..." | ||||
|         try_force_link_file "${PATH_TO_D8VK_FILES}/x32/d3d8.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" | ||||
|         try_force_link_file "${PATH_TO_D8VK_FILES}/x64/d3d8.dll" "${WINEPREFIX}/drive_c/windows/system32/" | ||||
|         var_winedlloverride_update d3d8=n | ||||
|     fi | ||||
|  | ||||
|     if [[ ! -d "${WINEPREFIX}/drive_c/vrclient/bin" ]] ; then | ||||
|         create_new_dir "${WINEPREFIX}/drive_c/vrclient/bin" | ||||
|         try_force_link_file "${WINEDIR}"/lib/wine/i386-windows/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/" | ||||
|         try_force_link_file "${WINEDIR}"/lib64/wine/x86_64-windows/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/" | ||||
|     fi | ||||
|   | ||||
|     if [[ "${PW_USE_SHADER_CACHE}" == 1 ]] ; then | ||||
|         create_new_dir "${PATH_TO_DXVK_FILES}/gl_shader_cache" | ||||
|         export __GL_SHADER_DISK_CACHE=1 | ||||
|         export __GL_SHADER_DISK_CACHE_PATH="${PATH_TO_DXVK_FILES}/gl_shader_cache" | ||||
|         export __GL_SHADER_DISK_CACHE_SIZE=50000000000 | ||||
|         export __GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1 | ||||
|         create_new_dir "${PATH_TO_DXVK_FILES}/dxvk_cache" | ||||
|         export DXVK_STATE_CACHE_PATH="${PATH_TO_DXVK_FILES}"/dxvk_cache | ||||
|         export DXVK_STATE_CACHE=1 | ||||
|         create_new_dir "${PATH_TO_VKD3D_FILES}/vkd3d_cache" | ||||
|         export VKD3D_SHADER_CACHE_PATH="${PATH_TO_VKD3D_FILES}/vkd3d_cache" | ||||
|     else | ||||
|         export __GL_SHADER_DISK_CACHE=0 | ||||
|         export DXVK_STATE_CACHE=0 | ||||
|         export VKD3D_SHADER_CACHE_PATH=0 | ||||
|         export RADV_DEBUG=nocache | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_WINE_FULLSCREEN_FSR}" == 1 ]] || [[ "${WINE_FULLSCREEN_FSR}" == 1 ]] ; then | ||||
|         export WINE_FULLSCREEN_FSR=1 | ||||
|         export WINE_FULLSCREEN_FSR_STRENGTH=2 | ||||
|         export WINE_FULLSCREEN_INTEGER_SCALING=0 | ||||
|     else | ||||
|         export WINE_FULLSCREEN_FSR=0 | ||||
|         unset WINE_FULLSCREEN_FAKE_CURRENT_RES WINE_FULLSCREEN_FSR_STRENGTH WINE_FULLSCREEN_INTEGER_SCALING | ||||
|     fi | ||||
|  | ||||
|     if [[ "${PW_WINE_CPU_TOPOLOGY}" != "disabled" ]] ; then | ||||
|         export WINE_CPU_TOPOLOGY="${PW_WINE_CPU_TOPOLOGY}" | ||||
|     else | ||||
|         unset WINE_CPU_TOPOLOGY | ||||
|     fi | ||||
|  | ||||
|     for try_cp_dll_from_wine in "ntdll.dll" "vulkan-1.dll" "winevulkan.dll" "amd_ags_x64.dll" "ir50_32.dll" ; do | ||||
|         try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}" | ||||
|         if try_copy_file "${WINEDIR}/lib/wine/i386-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"  | ||||
|         then print_info "Try copy $try_cp_dll_from_wine to syswow64... OK." | ||||
|         fi | ||||
|         try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}" | ||||
|         if try_copy_file "${WINEDIR}/lib64/wine/x86_64-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}" | ||||
|         then print_info "Try copy $try_cp_dll_from_wine to system32... OK." | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     #run_winetricks_from_db | ||||
|     if [[ ! -z "${PW_MUST_HAVE_DLL}" ]] | ||||
|     then export PW_DLL_INSTALL="`echo "${PW_MUST_HAVE_DLL} ${PW_DLL_INSTALL}" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' `" | ||||
|     fi | ||||
|  | ||||
|     if [[ ! -z "${PW_DLL_INSTALL}" ]] ; then | ||||
|         export PW_DLL_NEED_INSTALL="" | ||||
|         export USE_WT_FROM_DB=0 | ||||
|         if [ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" ] ; then | ||||
|             touch "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" | ||||
|         fi | ||||
|         for need_install_dll_to_pfx in ${PW_DLL_INSTALL} ; do | ||||
|             if [[ "${need_install_dll_to_pfx}" == vcrun201[5-9] ]] \ | ||||
|             || [[ "${need_install_dll_to_pfx}" == vcrun2022 ]] ; then | ||||
|                 need_install_dll_to_pfx="vcrun2022" | ||||
|                 sed -i '/vcrun2015/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" | ||||
|                 sed -i '/vcrun2017/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" | ||||
|                 sed -i '/vcrun2019/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" | ||||
|             fi | ||||
|             grep "${need_install_dll_to_pfx}" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" &>/dev/null | ||||
|             if [[ "$?" == "1" ]] ; then | ||||
|                 if [[ -z "${PW_DLL_NEED_INSTALL}" ]] | ||||
|                 then export PW_DLL_NEED_INSTALL="${need_install_dll_to_pfx}" | ||||
|                 else export PW_DLL_NEED_INSTALL="${need_install_dll_to_pfx} ${PW_DLL_NEED_INSTALL}"  | ||||
|                 fi | ||||
|                 export USE_WT_FROM_DB=1 | ||||
|             fi | ||||
|         done | ||||
|         if [[ "${USE_WT_FROM_DB}" == "1" ]] ; then | ||||
|             update_winetricks | ||||
|             echo "START WINETRICKS..." >> "${PORT_WINE_TMP_PATH}/update_pfx_log" | ||||
|             echo "Try to install DLL in prefix: ${PW_DLL_NEED_INSTALL}" >> "${PORT_WINE_TMP_PATH}/update_pfx_log" | ||||
|             print_info "Try to install DLL in prefix: ${PW_DLL_NEED_INSTALL}" | ||||
|             ${pw_runtime} env PATH="${PATH}" LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" GST_PLUGIN_SYSTEM_PATH_1_0="" \ | ||||
|             "${PORT_WINE_TMP_PATH}/winetricks" -q -r -f ${PW_DLL_NEED_INSTALL} &>>"${PORT_WINE_TMP_PATH}/update_pfx_log" | ||||
|             wait_wineserver | ||||
|             kill_portwine | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     if [[ -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/system.reg" ]] && [[ -z `grep "Windows $PW_WINDOWS_VER" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/system.reg"` ]] ; then | ||||
|         if [[ ! -z "${PW_WINDOWS_VER}" && `echo "$PW_WINDOWS_VER" | sed 's/.*/\L&/'` == "xp" ]] ; then | ||||
|             export PW_WINDOWS_VER="xp64" | ||||
|         fi | ||||
|         ${pw_runtime} env PATH="${PATH}" LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" GST_PLUGIN_SYSTEM_PATH_1_0="" \ | ||||
|         "${WINELOADER}" winecfg -v `echo "win${PW_WINDOWS_VER}" | sed 's/.*/\L&/'` | ||||
|         wait_wineserver | ||||
|         kill_portwine | ||||
|         echo "Set to win${PW_WINDOWS_VER}" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${portwine_exe}" == *-Shipping.exe ]] ; then  | ||||
|         echo "Disable EAC" | ||||
|         [[ -z "${LAUNCH_PARAMETERS}" ]] && export LAUNCH_PARAMETERS+=" -eac-nop-loaded " | ||||
|     fi | ||||
|     pw_stop_progress_bar && | ||||
|     if ! check_start_from_steam ; then | ||||
|         pw_tray_icon | ||||
|         sleep 0.5 | ||||
|         if [[ "${PW_CHECK_AUTOINSTAL}" != "1" ]] ; then | ||||
|             pw_start_progress_bar_cover "${PW_GUI_ICON_PATH}/covers/loading_${update_loc}.gif"  | ||||
|         fi | ||||
|     fi | ||||
|     add_in_start_portwine | ||||
|  | ||||
|     if [[ -f "${PATH_TO_GAME}/dxvk.conf" ]] ; then | ||||
|         export DXVK_CONFIG_FILE="${PATH_TO_GAME}/dxvk.conf" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pw_run () { | ||||
|     unset GDK_BACKEND | ||||
|     if [[ ! -z "${PATH_TO_GAME}" ]] && [[ -d "${PATH_TO_GAME}" ]] ; then | ||||
|         cd "${PATH_TO_GAME}" | ||||
|     elif [[ -f "$portwine_exe" ]] ; then | ||||
|         export PATH_TO_GAME="$( cd "$( dirname "${portwine_exe}" )" >/dev/null 2>&1 && pwd )"  | ||||
|         cd "${PATH_TO_GAME}" | ||||
|     else | ||||
|         cd "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c" | ||||
|     fi | ||||
|     pw_mangohud_check | ||||
|     pw_vkbasalt_check | ||||
|     PW_LOG_TO_FILE="${PORT_WINE_PATH}/${portname}.log" | ||||
|     print_var "WINEDIR" "WINEPREFIX" "WINEDLLOVERRIDES" "PATH_TO_GAME" "PW_WINE_USE" "PW_VULKAN_USE" "VULKAN_DRIVER_NAME" | ||||
|     print_var "VULKAN_API_DRIVER_VERSION" "VKD3D_CONFIG" "PW_LD_LIBRARY_PATH" "PATH" "WINEESYNC" "WINEFSYNC" "WINEFSYNC_FUTEX2" | ||||
|     print_var "WINEDLLPATH" "WINE_CPU_TOPOLOGY" "PW_RUN_GAMESCOPE" "LD_LIBRARY_PATH" | ||||
|     kill -s SIGUSR1 "$PW_YAD_PID_PFX_COVER_UI" &>/dev/null | ||||
|     if [[ "${PW_LOG}" == 1 ]] ; then | ||||
|         if check_start_from_steam ; then | ||||
|             for VAR_LOGGER in PW_WINE_USE WINEDIR WINEDLLPATH WINEPREFIX PATH_TO_GAME PW_VULKAN_USE PW_LD_LIBRARY_PATH LD_LIBRARY_PATH PATH \ | ||||
|                               VKD3D_CONFIG WINEESYNC WINEFSYNC WINEFSYNC_FUTEX2 WINE_CPU_TOPOLOGY DESKTOP_SESSION | ||||
|             do | ||||
|                 echo "${VAR_LOGGER}=${!VAR_LOGGER}" >> "${PW_LOG_TO_FILE}" | ||||
|             done | ||||
|         fi | ||||
|         echo "WINEDLLOVERRIDES=${WINEDLLOVERRIDES}" >> "${PW_LOG_TO_FILE}" | ||||
|         echo "------------------------------------" >> "${PW_LOG_TO_FILE}" | ||||
|         echo "Log WINE:" >> "${PW_LOG_TO_FILE}" | ||||
|         echo "" | ||||
|         print_info "Log from RUNTIME and WINE:" | ||||
|         ${PW_RUN_GAMESCOPE} \ | ||||
|         ${pw_runtime} \ | ||||
|         env PATH="${PATH}" \ | ||||
|         LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" \ | ||||
|         LD_PRELOAD="${PW_LD_PRELOAD}" \ | ||||
|         VK_LAYER_PATH="${PW_VK_LAYER_PATH}" \ | ||||
|         VK_INSTANCE_LAYERS=${PW_VK_INSTANCE_LAYERS} \ | ||||
|         ${PW_GAMEMODERUN_SLR} \ | ||||
|         ${PW_MANGOHUD_SLR} \ | ||||
|         "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} &>>"${PW_LOG_TO_FILE}" | ||||
|     else | ||||
|         if [[ "${PW_USE_TERMINAL}" == "1" ]] ; then | ||||
|             export PW_ADD_TO_ARGS_IN_RUNTIME="--xterm" | ||||
|             pw_init_runtime | ||||
|         fi | ||||
|         echo "" | ||||
|         echo "Log WINE:" > "${PW_LOG_TO_FILE}" | ||||
|         print_info "Log from RUNTIME and WINE:" | ||||
|         ${PW_RUN_GAMESCOPE} \ | ||||
|         ${pw_runtime} \ | ||||
|         env PATH="${PATH}" \ | ||||
|         LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" \ | ||||
|         LD_PRELOAD="${PW_LD_PRELOAD}" \ | ||||
|         VK_LAYER_PATH="${PW_VK_LAYER_PATH}" \ | ||||
|         VK_INSTANCE_LAYERS="${PW_VK_INSTANCE_LAYERS}" \ | ||||
|         ${PW_GAMEMODERUN_SLR} \ | ||||
|         ${PW_MANGOHUD_SLR} \ | ||||
|         "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} &>>"${PW_LOG_TO_FILE}" | ||||
|         cat "${PW_LOG_TO_FILE}" | ||||
|     fi | ||||
| } | ||||
| export -f pw_run | ||||
|  | ||||
| ###MAIN### | ||||
| if [[ $(id -u) -eq 0 ]] ; then | ||||
|     yad_error "Do not run the script from the superuser!" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| if [[ -z "${LANG}" ]] ; then | ||||
|     export LANG=C | ||||
|     export FORCE_ENG_LANG=1 | ||||
| elif [[ "${START_FROM_STEAM}" == 1 ]] ; then | ||||
|     export FORCE_ENG_LANG=1 | ||||
| else  | ||||
|     unset FORCE_ENG_LANG | ||||
| fi | ||||
|  | ||||
| create_new_dir "${HOME}/.local/share/applications" | ||||
| if [[ "${PW_SILENT_RESTART}" == 1 ]] || [[ "${START_FROM_STEAM}" == 1 ]] ; then | ||||
|     export PW_GUI_DISABLED_CS=1 | ||||
|     unset PW_SILENT_RESTART | ||||
| else | ||||
|     unset PW_GUI_DISABLED_CS | ||||
| fi | ||||
| unset MANGOHUD MANGOHUD_DLSYM PW_NO_ESYNC PW_NO_FSYNC PW_VULKAN_USE WINEDLLOVERRIDES PW_NO_WRITE_WATCH PW_YAD_SET PW_ICON_FOR_YAD | ||||
| unset PW_CHECK_AUTOINSTAL PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PORTWINE_DB PORTWINE_DB_FILE PW_DISABLED_CREATE_DB RADV_PERFTEST | ||||
| unset CHK_SYMLINK_FILE MESA_GL_VERSION_OVERRIDE PATH_TO_GAME PW_START_DEBUG PORTPROTON_NAME PORTWINE_CREATE_SHORTCUT_NAME | ||||
| unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR AMD_VULKAN_ICD PW_WINE_CPU_TOPOLOGY | ||||
| unset PW_NAME_D_NAME PW_NAME_D_ICON PW_NAME_D_EXEC PW_EXEC_FROM_DESKTOP PW_ALL_DF PW_GENERATE_BUTTONS PW_NAME_D_ICON PW_NAME_D_ICON_48 | ||||
|  | ||||
| export portname=PortProton | ||||
|  | ||||
| cd "$(dirname "`readlink -f "$0"`")" && export PORT_SCRIPTS_PATH="$(pwd)" | ||||
| cd "${PORT_SCRIPTS_PATH}/../../" && export PORT_WINE_PATH="$(pwd)" | ||||
| export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" | ||||
|  | ||||
| rm -f $PORT_WINE_TMP_PATH/*{exe,msi,tar}* | ||||
|  | ||||
| echo "" > "${PORT_WINE_TMP_PATH}/tmp_yad_form" | ||||
|  | ||||
| if [[ -d "${PORT_WINE_PATH}/data/dist" ]] ; then | ||||
|     try_remove_file "${PORT_WINE_PATH}/data/dist/VERSION" | ||||
|     orig_IFS="$IFS" | ||||
|     IFS=$'\n' | ||||
|     for dist_dir in $(ls -1 "${PORT_WINE_PATH}/data/dist/") ; do | ||||
|         dist_dir_new=`echo "${dist_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g` | ||||
|         if [[ ! -d "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" ]] ; then | ||||
|             mv -- "${PORT_WINE_PATH}/data/dist/$dist_dir" "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" | ||||
|         fi | ||||
|     done | ||||
|     IFS="$orig_IFS" | ||||
| else | ||||
|     create_new_dir "${PORT_WINE_PATH}/data/dist" | ||||
| fi | ||||
| create_new_dir "${PORT_WINE_PATH}/data/prefixes/DEFAULT" | ||||
| create_new_dir "${PORT_WINE_PATH}/data/prefixes/DOTNET" | ||||
| create_new_dir "${PORT_WINE_PATH}/data/prefixes/PROGRAMS" | ||||
| try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${PORT_WINE_PATH}" | ||||
|  | ||||
| orig_IFS="$IFS" | ||||
| IFS=$'\n' | ||||
| for pfx_dir in $(ls -1 "${PORT_WINE_PATH}/data/prefixes/") ; do | ||||
|     pfx_dir_new=`echo "${pfx_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g` | ||||
|     if [[ ! -d "${PORT_WINE_PATH}/data/prefixes/${pfx_dir_new^^}" ]] ; then | ||||
|         mv -- "${PORT_WINE_PATH}/data/prefixes/$pfx_dir" "${PORT_WINE_PATH}/data/prefixes/${pfx_dir_new^^}" | ||||
|     fi | ||||
| done | ||||
| IFS="$orig_IFS" | ||||
|  | ||||
| create_new_dir "${PORT_WINE_TMP_PATH}"/gecko | ||||
| create_new_dir "${PORT_WINE_TMP_PATH}"/mono | ||||
|  | ||||
| export PW_VULKAN_DIR="${PORT_WINE_TMP_PATH}/VULKAN" | ||||
| create_new_dir "${PW_VULKAN_DIR}" | ||||
|  | ||||
|  | ||||
| export LSPCI_VGA="$(lspci -k | grep -E 'VGA|3D' | tr -d '\n')" | ||||
|  | ||||
| if command -v xrandr &>/dev/null ; then | ||||
|     try_remove_file "${PORT_WINE_TMP_PATH}/tmp_screen_configuration" | ||||
|     export PW_SCREEN_RESOLUTION="$(xrandr | sed -rn 's/^.*primary.* ([0-9]+x[0-9]+).*$/\1/p')" | ||||
|     export PW_SCREEN_PRIMARY="$(xrandr | grep "primary" | awk '{print $1}')" | ||||
|     print_var PW_SCREEN_RESOLUTION PW_SCREEN_PRIMARY | ||||
| else | ||||
|     print_error "xrandr - not found!" | ||||
| fi | ||||
|  | ||||
| cd "${PORT_SCRIPTS_PATH}" | ||||
| . "${PORT_SCRIPTS_PATH}/var" | ||||
|              | ||||
| export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts" | ||||
| export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}" | ||||
| export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui" | ||||
|  | ||||
| . "${PORT_SCRIPTS_PATH}"/lang | ||||
| . "${PORT_SCRIPTS_PATH}"/yad_gui | ||||
|  | ||||
| export urlg="https://linux-gaming.ru/portproton/" | ||||
| export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}" | ||||
| try_remove_dir "${PW_WINELIB}/var" | ||||
| export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1` | ||||
| export WINETRICKS_DOWNLOADER="curl" | ||||
| export USER_CONF="${PORT_WINE_PATH}/data/user.conf" | ||||
| check_user_conf  | ||||
| check_variables PW_LOG "0" | ||||
|  | ||||
| if [[ -z "${INSTALLING_PORT}" ]] ; then | ||||
|     . "${USER_CONF}" | ||||
|     if ! check_start_from_steam && [[ "${SKIP_CHECK_UPDATES}" != 1 ]]; then | ||||
|         pw_port_update | ||||
|     fi | ||||
|     unset SKIP_CHECK_UPDATES | ||||
|     pw_check_and_download_plugins | ||||
|     pw_download_libs | ||||
|     export PW_VULKANINFO_PORTABLE="$PW_WINELIB/pressure-vessel/libexec/steam-runtime-tools-0/x86_64-linux-gnu-vulkaninfo" | ||||
|     export VULKAN_API_DRIVER_VERSION="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep "api" | head -n 1 | awk '{print $3}')" | ||||
|     export VULKAN_DRIVER_NAME="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep driverName | awk '{print$3}' | head -1)" | ||||
|     pw_init_db | ||||
|     . "${PORT_SCRIPTS_PATH}"/lang | ||||
|     pw_check_and_download_dxvk_and_vkd3d | ||||
|     . "${USER_CONF}" | ||||
| fi | ||||
| @@ -1,13 +1,13 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: linux-gaming.ru | ||||
| . "$(dirname $(readlink -f "$0"))/runlib" | ||||
| . "$(dirname $(readlink -f "$0"))/start.sh" | ||||
|  | ||||
| if  grep -i "flatpak" /etc/os-release &>/dev/null ; then | ||||
| 	name_desktop="PortProton" | ||||
| name_desktop="PortProton" | ||||
| if check_flatpak ; then | ||||
| 	echo "[Desktop Entry]"	 					  		 > "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Name=${name_desktop}" 				 		 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Version=${install_ver}"						 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Exec=flatpak run com.castrofidel.portproton"	 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Exec=flatpak run ru.linux_gaming.PortProton"	 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Type=Application" 						 	 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Terminal=False" 						 		 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Categories=Game"	    				 		 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| @@ -17,7 +17,6 @@ if  grep -i "flatpak" /etc/os-release &>/dev/null ; then | ||||
| 	echo "Icon="${PORT_WINE_PATH}/data/img/w.png""   	 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| else | ||||
| 	name_desktop="PortProton" | ||||
| 	echo "[Desktop Entry]"	 					  		 > "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Name=${name_desktop}" 				 		 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| 	echo "Version=${install_ver}"						 >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| @@ -32,7 +31,7 @@ else | ||||
| 	chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| fi | ||||
|  | ||||
| if [[ ! -f /usr/bin/portproton ]] ; then | ||||
| if [[ ! -f /usr/bin/portproton ]] && ! check_flatpak ; then | ||||
| 	cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" ${HOME}/.local/share/applications/ | ||||
| fi | ||||
|  | ||||
| @@ -42,7 +41,7 @@ fi | ||||
|  | ||||
| update-desktop-database -q "${HOME}/.local/share/applications" | ||||
|  | ||||
| if ! grep -i "flatpak" /etc/os-release &>/dev/null ; then | ||||
| if ! check_flatpak ; then | ||||
| 	xdg-mime default PortProton.desktop "application/x-ms-dos-executable;application/x-wine-extension-msp;application/x-msi;application/x-msdos-program" | ||||
| fi | ||||
|  | ||||
| @@ -55,18 +54,16 @@ echo "Icon="${PORT_WINE_PATH}/data/img/readme.png""		>> "${PORT_WINE_PATH}/${nam | ||||
| echo "URL=${urlg}" 										>> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
| chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|  | ||||
| if [ "${PW_SILENT_INSTALL}" = "1" ] ; then | ||||
| 	if [ "${PW_AUTOPLAY}" = "1" ] ; then | ||||
| 		unset INSTALLING_PORT | ||||
| unset INSTALLING_PORT | ||||
| if [[ "${PW_SILENT_INSTALL}" == 1 ]] ; then | ||||
| 	if [[ "${PW_AUTOPLAY}" == 1 ]] ; then | ||||
| 		if [[ -f "${HOME}/.local/share/applications/PortProton.desktop" ]] && [[ -f /usr/bin/portproton ]] ; then | ||||
| 			try_remove_file "${HOME}/.local/share/applications/PortProton.desktop" | ||||
| 		fi | ||||
| 		echo "Restarting PP after installing..." | ||||
| 		export SKIP_CHECK_UPDATES=1 | ||||
| 		/usr/bin/env bash -c "${PORT_WINE_PATH}/data/scripts/start.sh" $@ &  | ||||
| 		/usr/bin/env bash -c "${PORT_WINE_PATH}/data/scripts/start.sh" $@ & | ||||
| 		exit 0 | ||||
| 	else | ||||
| 		echo "Installation completed successfully." | ||||
| 	fi | ||||
| fi | ||||
| unset INSTALLING_PORT | ||||
|   | ||||
| @@ -1,13 +1,14 @@ | ||||
| #!/usr/bin/env bash | ||||
| #Author: Castro-Fidel (linux-gaming.ru) | ||||
| #SCRIPTS_NEXT_VERSION=2256 | ||||
| #SCRIPTS_NEXT_VERSION=2274 | ||||
| ######################################################################## | ||||
| export PW_MANGOHUD="0" | ||||
| export DEFAULT_MANGOHUD_CONFIG="cpu_stats,cpu_temp,cpu_mhz,gpu_stats,gpu_temp,gpu_core_clock,gpu_mem_clock,vulkan_driver,gpu_name,vram,ram,frame_timing=1,time,arch,wine,toggle_hud=Shift_R+F12,resolution,vkbasalt,gamemode" | ||||
| export DEFAULT_MANGOHUD_CONFIG="arch,cpu_mhz,cpu_temp,engine_version,gamemode,gpu_core_clock,gpu_mem_clock,gpu_name,gpu_temp,ram,resolution,vkbasalt,vram,vulkan_driver,wine" | ||||
| export PW_VKBASALT_EFFECTS="Curves:cas" | ||||
| export PW_VKBASALT_FFX_CAS="0.66" | ||||
| export ENABLE_VKBASALT=1 | ||||
| export GAMESCOPE_ARGS="-F fsr" | ||||
| export PW_USE_RUNTIME="1" | ||||
| export PW_RT_MOUNT_RO=("") | ||||
| export PW_RT_MOUNT_RW=("/media" "/mnt" "/run/media/${USER}" "${PORT_WINE_PATH}") | ||||
| #export PW_SANDBOX_HOME_PATH="${PORT_WINE_PATH}" | ||||
| @@ -17,7 +18,7 @@ export PW_FORCE_USE_VSYNC="2" | ||||
| export PW_USE_TERMINAL="0" | ||||
| export PW_WINDOWS_VER="10" | ||||
| export WINEARCH="win64" | ||||
| export PW_LIBS_VER="_v46" | ||||
| export PW_LIBS_VER="_v47" | ||||
| export GDK_BACKEND="x11" | ||||
| export PW_USE_GSTREAMER="1" | ||||
| export PW_USE_D3D_EXTRAS="1" | ||||
| @@ -37,36 +38,37 @@ export PW_USE_GAMESCOPE="0" | ||||
| # export GTK_THEME="Adwaita:dark" | ||||
| ###DEFAULT_WINE### | ||||
| export PW_WINE_USE="PROTON_LG" | ||||
| export PW_PLUGINS_VER="_v13" | ||||
| export PW_PLUGINS_VER="_v15" | ||||
| export PW_FAKE_DLSS_VER="230506" | ||||
| export PW_FAKE_DLSS_3_VER="090" | ||||
| export PW_GALLIUM_NINE_VER="0.9" | ||||
| ###WINE_AND_PROTON_LG### | ||||
| export PW_PROTON_LG_VER="PROTON_LG_8-25-2" | ||||
| export PW_PROTON_LG_VER="PROTON_LG_9-2" | ||||
| export PW_WINE_LG_VER="WINE_LG_9-2" | ||||
| export PW_WINE_FULLSCREEN_FSR="1" | ||||
| ###DXVK_AND_VKD3D### | ||||
| export VKD3D_LIMIT_TESS_FACTORS="64" | ||||
| export D8VK_VER="1.7.1-2367" | ||||
| export DXVK_STABLE_VER="1.10.3-28" | ||||
| export DXVK_GIT_VER="2.3-57" | ||||
| export DXVK_GIT_VER="2.3.1" | ||||
| export VKD3D_STABLE_VER="1.1-2602" | ||||
| export VKD3D_GIT_VER="1.1-3908" | ||||
| export VKD3D_GIT_VER="1.1-3973" | ||||
| ###PREFIX_VERSION### | ||||
| export DOTPFX_VER="48v2" | ||||
| export DOTPFX_VER="48v4" | ||||
| export DEFPFX_VER="v1" | ||||
| export PROGPFX_VER="v1" | ||||
| export PW_MUST_WINEDLLOVERRIDES="steam_api,steam_api64,steamclient,steamclient64=n;dotnetfx35.exe,dotnetfx35setup.exe=b;winemenubuilder.exe=" | ||||
| ################################################################# | ||||
| export DXVK_CONFIG_FILE="${PORT_WINE_PATH}/data/dxvk.conf" | ||||
| ################################################################# | ||||
| pw_install_dll_in_prefix () | ||||
| pw_list_install_dll_in_prefix () | ||||
| { | ||||
|     STANDART_DLL="d3dx9 d3dcompiler_43 d3dcompiler_47 physx mfc42 vcrun2022 sandbox corefonts tahoma lucida calibri faudio" | ||||
|     case $PW_PREFIX_NAME in | ||||
|         DEFAULT)    export PW_MUST_HAVE_DLL="d3dx9 d3dcompiler_43 physx mfc42 vcrun2022 sandbox" ;; | ||||
|         DOTNET)     export PW_MUST_HAVE_DLL="physx mfc42 vcrun2019 faudio dotnet48" ;; | ||||
|         PROGRAMS)   export PW_MUST_HAVE_DLL="d3dx9 d3dcompiler_43 physx mfc42 vcrun2019 riched20 corefonts msxml3 msxml4 msxml6" ;; | ||||
|         *)          export PW_MUST_HAVE_DLL="" ;; | ||||
|         DEFAULT)    export PW_MUST_HAVE_DLL="$STANDART_DLL" ;; | ||||
|         DOTNET)     export PW_MUST_HAVE_DLL="dotnet48" ;; | ||||
|         PROGRAMS)   export PW_MUST_HAVE_DLL="riched20 msxml3 msxml4 msxml6" ;; | ||||
|         *)          export PW_MUST_HAVE_DLL="sandbox" ;; | ||||
|     esac | ||||
| } | ||||
| ######################################################################## | ||||
|   | ||||
| @@ -1,811 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Author: Castro-Fidel (linux-gaming.ru) | ||||
| ######################################################################## | ||||
| yad_info () { | ||||
|     print_info "$@" | ||||
|     if [[ ! -f "${pw_yad_v12_3}" ]] ; then | ||||
|         local pw_yad_v12_3="yad"  | ||||
|         command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found" | ||||
|     fi | ||||
|     "${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --height=50 --borders=15 --title "INFO" \ | ||||
|     --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/info.png" \ | ||||
|     --center --text-align=center --button=OK 2>/dev/null | ||||
| } | ||||
| export -f yad_info | ||||
|  | ||||
| yad_error () { | ||||
|     print_error "$@" | ||||
|     if [[ ! -f "${pw_yad_v12_3}" ]] ; then | ||||
|         local pw_yad_v12_3="yad"  | ||||
|         command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found" | ||||
|     fi | ||||
|     "${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --borders=15 --title "ERROR" \ | ||||
|     --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/error.png" \ | ||||
|     --center --text-align=center --button=EXIT 2>/dev/null | ||||
| } | ||||
| export -f yad_error | ||||
|  | ||||
| yad_error_download () { | ||||
|     if [[ ! -f "${pw_yad_v12_3}" ]] ; then | ||||
|         local pw_yad_v12_3="yad"  | ||||
|         command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found" | ||||
|     fi | ||||
|     "${pw_yad_v12_3}" --text "$loc_gui_error_download" --width=400 --borders=15 --title "$loc_gui_error" \ | ||||
|     --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/download.png" \ | ||||
|     --no-wrap --center --text-align=center --button=SKIP:1 --button=REPEAT:0 2>/dev/null | ||||
|     [[ "$?" != 0 ]] && return 1 || return 0 | ||||
| } | ||||
|  | ||||
| gui_question () { | ||||
|     if [[ ! -f "${pw_yad_v12_3}" ]] ; then | ||||
|         local pw_yad_v12_3="yad"  | ||||
|         command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found" | ||||
|     fi | ||||
|     "${pw_yad_v12_3}" --text "${1}" --width=400 --borders=15 --title "${inst_set}." \ | ||||
|     --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/question.png" \ | ||||
|     --no-wrap --center --text-align=center --button=NO:1 --button=YES:0 2>/dev/null | ||||
|     [[ "$?" != 0 ]] && return 1 || return 0 | ||||
| } | ||||
|  | ||||
| pw_start_progress_bar_cover () { | ||||
|     if ! check_start_from_steam ; then | ||||
|         PW_GIF_FILE="$1" | ||||
|         PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'` | ||||
|         PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'` | ||||
|         "${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \ | ||||
|         --skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 & | ||||
|         export PW_YAD_PID_PROGRESS_BAR_COVER="$!" | ||||
|         return 0 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pw_start_progress_bar_cover_block () { | ||||
|     if ! check_start_from_steam ; then | ||||
|         [[ ! -f "${pw_yad}" ]] && local pw_yad="yad" | ||||
|         PW_GIF_FILE="$1" | ||||
|         PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'` | ||||
|         PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'` | ||||
|         "${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \ | ||||
|         --skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 & | ||||
|         export PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK="$!" | ||||
|         return 0 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pw_update_pfx_cover_gui () { | ||||
|     if ! check_start_from_steam ; then | ||||
|         PW_KEY_PROGRESS_BAR=$RANDOM | ||||
|         PW_GIF_FILE="${PW_GUI_ICON_PATH}/covers/update_prefix_${update_loc}.gif"  | ||||
|         PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 40}'` | ||||
|         PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 80}'` | ||||
|         echo "UPDATE PREFIX..." > "${PORT_WINE_TMP_PATH}/update_pfx_log" | ||||
|         export PW_TIMER=0 | ||||
|         while read -r line || [[ ! -z `pgrep -a yad | grep "yad_v12_3 --notebook --key="$PW_KEY_PROGRESS_BAR"" | awk '{print $1}'` ]] ; do | ||||
|                 sleep 0.005 | ||||
|                 if [[ ! -z "${line}" ]] && [[ -z "`echo "${line}" | grep -i "gstreamer"`" ]] \ | ||||
|                                         && [[ -z "`echo "${line}" | grep -i "kerberos"`" ]] \ | ||||
|                                         && [[ -z "`echo "${line}" | grep -i "ntlm"`" ]] | ||||
|                 then | ||||
|                     echo "# ${line}" | ||||
|                 fi | ||||
|                 if [[ "${PW_TIMER}" != 1 ]] ; then | ||||
|                     sleep 3 | ||||
|                     PW_TIMER=1 | ||||
|                 fi | ||||
|         done < "${PORT_WINE_TMP_PATH}/update_pfx_log" | "${pw_yad_v12_3}" --plug=$PW_KEY_PROGRESS_BAR --tabnum="2" --text-info --tail  2>/dev/null & | ||||
|         "${pw_yad_v12_3}" --plug=$PW_KEY_PROGRESS_BAR --tabnum="1" --picture --filename="${PW_GIF_FILE}" --image-on-top 2>/dev/null & | ||||
|  | ||||
|         "${pw_yad_v12_3}" --notebook --key="$PW_KEY_PROGRESS_BAR" --tab=LOGO --tab=TERMINAL --no-buttons --undecorated \ | ||||
|         --center --auto-close --skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --tab-pos=bottom 2>/dev/null & | ||||
|         export PW_YAD_PID_PFX_COVER_UI="$!" | ||||
|         return 0 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pw_start_progress_bar_cs () { | ||||
|     if ! check_start_from_steam ; then | ||||
|         "${pw_yad}" --progress --progress-text="$@" --pulsate --close-on-unfocus \ | ||||
|         --no-buttons --undecorated --center --skip-taskbar --width=500 --wrap-width=500 &>/dev/null & | ||||
|         export PW_YAD_PID_PROGRESS_BAR_CS="$!" | ||||
|         return 0 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pw_start_progress_bar_block () { | ||||
|     if ! check_start_from_steam ; then | ||||
|         "${pw_yad}" --progress --progress-text="$@" --pulsate \ | ||||
|         --no-buttons --undecorated --center --skip-taskbar --width=500 --wrap-width=500 &>/dev/null & | ||||
|         export PW_YAD_PID_PROGRESS_BAR_BLOCK="$!" | ||||
|         return 0 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pw_stop_progress_bar () { | ||||
|     for PW_KILL_YAD_PID in "$PW_YAD_PID_PROGRESS_BAR_BLOCK" "$PW_YAD_PID_PROGRESS_BAR_CS" \ | ||||
|                            "$PW_YAD_PID_PFX_COVER_UI" "$PW_YAD_PID_PROGRESS_BAR_COVER" | ||||
|     do | ||||
|         kill -s SIGUSR1 "$PW_KILL_YAD_PID" &>/dev/null | ||||
|     done | ||||
|     return 0 | ||||
| } | ||||
| export -f pw_stop_progress_bar | ||||
|  | ||||
| pw_stop_progress_bar_cover () { | ||||
|     kill -s KILL "$PW_YAD_PID_PROGRESS_BAR_COVER" &>/dev/null | ||||
|     return 0 | ||||
| } | ||||
| export -f pw_stop_progress_bar_cover | ||||
|  | ||||
| pw_stop_progress_bar_cover_block () { | ||||
|     kill -s KILL "$PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK" &>/dev/null | ||||
|     return 0 | ||||
| } | ||||
| export -f pw_stop_progress_bar_cover_block | ||||
|  | ||||
| open_changelog () { | ||||
|     "${pw_yad}" --title="$loc_gui_changelog" --borders=${YAD_BORDERS} --no-buttons --text-align=center \ | ||||
|     --text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \ | ||||
|     --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}" &>/dev/null | ||||
| } | ||||
| export -f open_changelog | ||||
|  | ||||
| pw_tray_icon () { | ||||
|     if [ ! -z "`pgrep -a yad_v12_3 | grep "\--notification" | awk '{print $1}'`" ] ; then | ||||
|         kill -s SIGUSR1 "`pgrep -a yad_v12_3 | grep "\--notification" | awk '{print $1}'`" | ||||
|     fi | ||||
|  | ||||
|     tray_icon_click () { | ||||
|         echo "" | ||||
|     } | ||||
|     export -f tray_icon_click | ||||
|  | ||||
|     pw_tray_winefile () { | ||||
|         pw_run winefile "C:\\users\\${USER}\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\" | ||||
|     } | ||||
|     export -f pw_tray_winefile | ||||
|  | ||||
|     pw_tray_taskmgr () { | ||||
|         pw_run taskmgr | ||||
|     } | ||||
|     export -f pw_tray_taskmgr | ||||
|  | ||||
|     tray_icon_click_exit () { | ||||
|         pw_stop_progress_bar | ||||
|         stop_portwine | ||||
|     } | ||||
|     export -f tray_icon_click_exit | ||||
|  | ||||
|     # --window-icon="$PW_GUI_ICON_PATH/portproton_tray.png" \ | ||||
|     "${pw_yad_v12_3}" --notification --no-middle \ | ||||
|     --image="$PW_GUI_ICON_PATH/portproton_tray.png" \ | ||||
|     --command="bash -c tray_icon_click" \ | ||||
|     --tooltip="PortProton" \ | ||||
|     --menu="| \ | ||||
|   ${loc_tray_winefile}!bash -c pw_tray_winefile!"$PW_GUI_ICON_PATH/port_winefile.png"|| \ | ||||
|   ${loc_tray_tascmng}!bash -c pw_tray_taskmgr!"$PW_GUI_ICON_PATH/port_winefile.png"|| \ | ||||
|   ${loc_tray_cangelog}!bash -c open_changelog!"$PW_GUI_ICON_PATH/port_changelog.png"|| \ | ||||
|   ${loc_tray_force_exit}    !bash -c tray_icon_click_exit!"$PW_GUI_ICON_PATH/port_exit.png"||" 2>/dev/null & | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| pw_gui_for_edit_db () { | ||||
|     KEY_EDIT_DB_GUI=$RANDOM | ||||
|     if [[ "${PW_WINE_CPU_TOPOLOGY}" == *[0-9]:* ]] && [[ "${PW_WINE_CPU_TOPOLOGY}" != "disabled" ]] ; then | ||||
|         CPU_LIMIT_VAR="`echo ${PW_WINE_CPU_TOPOLOGY%%:*}`" | ||||
|     else | ||||
|         CPU_LIMIT_VAR="disabled" | ||||
|     fi | ||||
|     # if [[ ! -z "${PW_AMD_VULKAN_USE}" ]] && [[ "${PW_AMD_VULKAN_USE}" != "disabled" ]] ; then | ||||
|     #     AMD_VULKAN_VAR="${PW_AMD_VULKAN_USE}" | ||||
|     # else | ||||
|     #     AMD_VULKAN_VAR="disabled" | ||||
|     # fi | ||||
|  | ||||
|     if [[ ! -z "${PW_GPU_USE}" ]] && [[ "${PW_GPU_USE}" != "disabled" ]] ; then | ||||
|         GPU_VAR="${PW_GPU_USE}" | ||||
|     else | ||||
|         GPU_VAR="disabled" | ||||
|     fi | ||||
|  | ||||
|     GET_GPU_NAMES=$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | awk -F '=' '/deviceName/{print $2}' | sed '/llvm/d'| sort -u | sed 's/^ //' | paste -sd '!') | ||||
|  | ||||
|     logical_cores=$(grep -c "^processor" /proc/cpuinfo) | ||||
|     if [[ "${logical_cores}" -le "4" ]] ; then | ||||
|         GET_LOGICAL_CORE="1!$(seq -s! 1 $((${logical_cores} - 1)))" | ||||
|     else | ||||
|         GET_LOGICAL_CORE="1!2!$(seq -s! 4 4 $((${logical_cores} - 1)))" | ||||
|     fi | ||||
|  | ||||
|     unset ADD_CHK_BOX_EDIT_DB | ||||
|     edit_db_field_add () { | ||||
|         for int_to_boole in $@ ; do | ||||
|             if [ "${!int_to_boole}" == "1" ] | ||||
|             then export ${int_to_boole}="TRUE" | ||||
|             else export ${int_to_boole}="FALSE" | ||||
|             fi | ||||
|             TMP_HELP_FOR_GUI="${int_to_boole}_INFO" | ||||
|             int_to_boole_non_pw="`echo ${int_to_boole} | sed 's/^PW_//' `" | ||||
|             ADD_CHK_BOX_EDIT_DB+="--field=  ${int_to_boole_non_pw}    !${!TMP_HELP_FOR_GUI}:CHK%${!int_to_boole}%" | ||||
|         done | ||||
|     } | ||||
|     edit_db_field_add $@ | ||||
|     old_IFS=$IFS | ||||
|     IFS="%" | ||||
|     "${pw_yad_v12_3}" --plug=$KEY_EDIT_DB_GUI --tabnum="1" --form --separator=" " --columns=4 ${ADD_CHK_BOX_EDIT_DB} \ | ||||
|     1> "${PORT_WINE_TMP_PATH}/tmp_output_yad_edit_db" 2>/dev/null & | ||||
|     IFS=$old_IFS | ||||
|  | ||||
|     case ${PW_WINDOWS_VER} in | ||||
|          "7") ADD_WINVER_EDIT_DB="7!10!XP" ;; | ||||
|         "XP") ADD_WINVER_EDIT_DB="XP!7!10" ;; | ||||
|            *) ADD_WINVER_EDIT_DB="10!7!XP" ;; | ||||
|     esac | ||||
|  | ||||
|     # --field="${loc_gui_amd_vulkan_select}!${loc_gui_amd_vulkan_select_help} :CB" "${AMD_VULKAN_VAR}!disabled!amdvlk!amdgpupro!radv!radv_gpl!radv_aco" | ||||
|  | ||||
|     "${pw_yad_v12_3}" --plug=$KEY_EDIT_DB_GUI --tabnum="2" --form --separator="%" --columns=1 \ | ||||
|     --field="${loc_gui_ver_windows}!${loc_gui_ver_windows_help} :CB" "${ADD_WINVER_EDIT_DB}" \ | ||||
|     --field="${loc_gui_aut_winetricks}!${loc_gui_aut_winetricks_help} :CBE" "${PW_DLL_INSTALL}!vcrun2019 corefonts lucida" \ | ||||
|     --field="${loc_gui_winedllover}!${loc_gui_winedllover_help} :CBE" "${WINEDLLOVERRIDES}!libglesv2=!d3dx9_36,d3dx9_42=n,b;mfc120=b,n" \ | ||||
|     --field=":LBL" "" \ | ||||
|     --field="${loc_gui_arg_exe}!${loc_gui_arg_exe_help} :CBE" "\\${LAUNCH_PARAMETERS[@]}!-dx11 -skipintro 1" \ | ||||
|     --field=":LBL" "" \ | ||||
|     --field="${loc_gui_cpu_limit}!${loc_gui_cpu_limit_help} :CB" "${CPU_LIMIT_VAR}!disabled!${GET_LOGICAL_CORE}" \ | ||||
|     --field="${loc_gui_gpu_select}!${loc_gui_gpu_select_help} :CB" "${GPU_VAR}!disabled!${GET_GPU_NAMES}" \ | ||||
|     --field="${loc_gui_arg_gamescope}!${loc_gui_arg_gamescope_help} :CBE" "\\${GAMESCOPE_ARGS}!-r 60 -F fsr!" 2>/dev/null 1> "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" 2>/dev/null & | ||||
|      | ||||
|     "${pw_yad_v12_3}" --paned --key="$KEY_EDIT_DB_GUI" --title "EDIT_DB" --text-align=center --height="800" \ | ||||
|     --text "${loc_gui_edit_db} <b>${PORTWINE_DB}</b>\n ${loc_gui_edit_db_help}" --separator=" " --borders=${YAD_BORDERS} \ | ||||
|     --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|     --button="${loc_gui_cancel}"!!"${loc_gui_cancel_help}":1 \ | ||||
|     --button="${loc_gui_reset_db}"!!"${loc_gui_reset_db_help}":2 \ | ||||
|     --button="${loc_gui_open_db}"!!"${loc_gui_open_db_help}":150 \ | ||||
|     --button="${loc_gui_save_changes}"!!"${loc_gui_save_changes_help}":0 2>/dev/null | ||||
|     YAD_STATUS="$?" | ||||
|     export SKIP_CHECK_UPDATES=1 | ||||
|     case "$YAD_STATUS" in | ||||
|           1) /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; | ||||
|           2) try_remove_file "$portwine_exe".ppdb              | ||||
|              /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; | ||||
|         150) xdg-open "${PORTWINE_DB_FILE}" & exit 0 ;; | ||||
|         252) exit 0 ;; | ||||
|     esac | ||||
|     output_yad_edit_db=(`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_edit_db"`) | ||||
|     bool_from_yad=0 | ||||
|     edit_db_field_read () { | ||||
|         for boole_to_int in $@ ; do | ||||
|             export ${boole_to_int}=${output_yad_edit_db[$bool_from_yad]} | ||||
|             if [ "${!boole_to_int}" == "TRUE" ] | ||||
|             then export ${boole_to_int}="1" | ||||
|             else export ${boole_to_int}="0" | ||||
|             fi | ||||
|             export bool_from_yad=$(( ${bool_from_yad} + 1 )) | ||||
|         done | ||||
|     } | ||||
|     edit_db_field_read $@ | ||||
|     PW_WINDOWS_VER="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $1}'`" | ||||
|     PW_DLL_INSTALL=`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $2}'` | ||||
|     WINEDLLOVERRIDES=`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $3}'` | ||||
|     LAUNCH_PARAMETERS=`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $5}'` | ||||
|     CPU_LIMIT="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $7}'`" | ||||
|     PW_GPU_USE="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $8}'`" | ||||
|     GAMESCOPE_ARGS="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $9}'`" | ||||
|     # PW_AMD_VULKAN_USE="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $10}'`" | ||||
|  | ||||
|     if [[ "${CPU_LIMIT}" != "disabled" ]] ; then | ||||
|         export PW_WINE_CPU_TOPOLOGY="${CPU_LIMIT}:$(seq -s, 0 $((${CPU_LIMIT} - 1)))" | ||||
|     else | ||||
|         export PW_WINE_CPU_TOPOLOGY="disabled" | ||||
|     fi | ||||
|     echo "pw_gui_for_edit_db PORTWINE_DB_FILE=$PORTWINE_DB_FILE" | ||||
|     edit_db_from_gui $@ LAUNCH_PARAMETERS PW_WINDOWS_VER PW_DLL_INSTALL WINEDLLOVERRIDES PW_WINE_CPU_TOPOLOGY GAMESCOPE_ARGS | ||||
|     edit_user_conf_from_gui PW_GPU_USE | ||||
|     # PW_AMD_VULKAN_USE | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
|  | ||||
| gui_proton_downloader () { | ||||
|     if [[ "$PW_WINE_USE" == PROTON_LG ]]  | ||||
|     then export PW_WINE_USE="${PW_PROTON_LG_VER}" | ||||
|     elif [[ "$PW_WINE_USE" == WINE_*_LG ]] || [[ "$PW_WINE_USE" == WINE_LG ]] | ||||
|     then export PW_WINE_USE="${PW_WINE_LG_VER}" | ||||
|     fi | ||||
|     if [[ "$1" == "silent" ]] && [[ -d "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" ]] ; then | ||||
|         return 0 | ||||
|     fi | ||||
|     pw_start_progress_bar_block "$loc_gui_check_new_wine" | ||||
|     #PROTON_GE | ||||
|     export PROTON_GE_GIT=($(curl -s "https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases" | grep "browser_download_url.*\.tar\.gz" | cut -d \" -f 4)) | ||||
|     try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" | ||||
|     if [[ ! -z "${PROTON_GE_GIT}" ]] ; then | ||||
|         for PGEGIT in ${PROTON_GE_GIT[@]} ; do | ||||
|             echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.gz//' >> "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" | ||||
|         done | ||||
|         sed -i '/Proton-6.5-GE-2/,$d' "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" | ||||
|         sed -i '/github-action/d' "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" | ||||
|     fi | ||||
|  | ||||
|     #WINE_KRON4EK | ||||
|     export WINE_KRON4EK=($(curl -s "https://api.github.com/repos/Kron4ek/Wine-Builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4)) | ||||
|     try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" | ||||
|     if [[ ! -z "${WINE_KRON4EK}" ]] ; then | ||||
|         for PGEGIT in ${WINE_KRON4EK[@]} ; do | ||||
|             echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" | ||||
|         done | ||||
|         sed -i '/6.3/,$d' "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" | ||||
|         sed -i '/-x86/d' "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" | ||||
|     fi | ||||
|  | ||||
|     #WINE_GE_CUSTOM | ||||
|     export WINE_GE_CUSTOM=($(curl -s "https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4)) | ||||
|     try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git" | ||||
|     if [[ ! -z "${WINE_GE_CUSTOM}" ]] ; then | ||||
|         for PGEGIT in ${WINE_GE_CUSTOM[@]} ; do | ||||
|             echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git" | ||||
|         done | ||||
|         sed -i '/6.23/,$d' "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git" | ||||
|     fi | ||||
|  | ||||
|     #PROTON_LG | ||||
|     export PROTON_PW_GIT=($(curl -s "https://api.github.com/repos/Castro-Fidel/wine_builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4)) | ||||
|     try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" | ||||
|     if [[ ! -z "${PROTON_PW_GIT}" ]] ; then | ||||
|         for PPWGIT in ${PROTON_PW_GIT[@]} ; do | ||||
|             echo ${PPWGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" | ||||
|         done | ||||
|         sed -i /${PW_WINE_LG_VER}/d "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" | ||||
|         sed -i '/plugins/d' "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" | ||||
|     fi | ||||
|     pw_stop_progress_bar | ||||
|     if [[ -z "${PROTON_GE_GIT}" ]] || [[ -z "${PROTON_PW_GIT}" ]] ; then | ||||
|         yad_error "$loc_gui_check_new_wine_error" | ||||
|         export SKIP_CHECK_UPDATES=1 | ||||
|         /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|         exit 0 | ||||
|     fi | ||||
|     for INSTALLING_VERSION_IN_DIST in `ls "${PORT_WINE_PATH}/data/dist/"` ; do | ||||
|         sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" | ||||
|         sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" | ||||
|         sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" | ||||
|         sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git" | ||||
|     done | ||||
| 	#Installed wine | ||||
| 	ls -l ${PORT_WINE_PATH}/data/dist | awk '{print $9}' | sed '/^$/d' > ${PORT_WINE_TMP_PATH}/tmp_installed_wine | ||||
|     if [[ "$1" != "silent" ]] ; then | ||||
|         #GUI | ||||
|         export KEY_WINE=$RANDOM | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_set" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" | ||||
|  | ||||
|         `"${pw_yad}" --plug=$KEY_WINE --tabnum=1 --list --separator="" --listen \ | ||||
|         --column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" 1> "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set" 2>/dev/null` & | ||||
|         `"${pw_yad}" --plug=$KEY_WINE --tabnum=2 --list --separator="" --listen \ | ||||
|         --column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" 1> "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set" 2>/dev/null` & | ||||
|         `"${pw_yad}" --plug=$KEY_WINE --tabnum=3 --list --separator="" --listen \ | ||||
|         --column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" 1> "${PORT_WINE_TMP_PATH}/tmp_proton_set" 2>/dev/null` & | ||||
|         `"${pw_yad}" --plug=$KEY_WINE --tabnum=4 --list --separator="" --listen \ | ||||
|         --column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git" 1> "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set" 2>/dev/null` & | ||||
|         `"${pw_yad}" --plug=$KEY_WINE --tabnum=5 --list --separator="" --listen \ | ||||
|         --column "$loc_gui_del_wine" < "${PORT_WINE_TMP_PATH}/tmp_installed_wine" 1> "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" 2>/dev/null` & | ||||
|         `"${pw_yad}" --key=$KEY_WINE --notebook --width=500 --height=600 --text-align=center \ | ||||
|         --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "WINE MANAGER" --separator="" \ | ||||
|         --tab-pos=top --tab="PROTON-LG" --tab="WINE-KRON4EK"  --tab="PROTON-GE" --tab="WINE-GE-CUSTOM" --tab="$loc_gui_installed_wine" 2>/dev/null` | ||||
|         YAD_WINE_STATUS="$?" | ||||
|         if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then | ||||
|             export SKIP_CHECK_UPDATES=1 | ||||
|             /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|             exit 0 | ||||
|         fi | ||||
|  | ||||
|         if [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_proton_set" | awk '{print $1}'` ] ; then | ||||
|             export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_proton_set"`" | ||||
|         elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set" | awk '{print $1}'` ] ; then | ||||
|             export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set"`" | ||||
|         elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set" | awk '{print $1}'` ] ; then | ||||
|             export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set"`" | ||||
|         elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set" | awk '{print $1}'` ] ; then | ||||
|             export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set"`" | ||||
|         elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" | awk '{print $1}'` ] ; then | ||||
|             export VERSION_INSTALLED_WINE="`cat "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set"`" | ||||
|         else | ||||
|             print_info "Nothing to do." | ||||
|             export SKIP_CHECK_UPDATES=1 | ||||
|             /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|             exit 0 | ||||
|         fi | ||||
|  | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git" | ||||
|         try_remove_file "${PORT_WINE_TMP_PATH}/tmp_installed_wine" | ||||
|  | ||||
|     elif [[ "$1" == "silent" ]] && [[ ! -z "$2" ]] ; then | ||||
|         VERSION_WINE_GIT="$2" | ||||
|     fi | ||||
|  | ||||
|     for GIVE_WINE_URL in ${PROTON_GE_GIT[@]} ${PROTON_PW_GIT[@]} ${WINE_KRON4EK[@]} ${WINE_GE_CUSTOM[@]} ; do | ||||
|         if [ ! -z `echo ${GIVE_WINE_URL} | grep -i "${VERSION_WINE_GIT}"` ] ; then | ||||
|             export URL_VERSION_PROTON_GIT="${GIVE_WINE_URL}" | ||||
|             break | ||||
|         fi | ||||
|     done | ||||
|  | ||||
| 	if [[ ! -z "${VERSION_INSTALLED_WINE}" ]]; then | ||||
| 		try_remove_dir "${PORT_WINE_PATH}/data/dist/${VERSION_INSTALLED_WINE}" | ||||
| 		unset VERSION_INSTALLED_WINE | ||||
|         export SKIP_CHECK_UPDATES=1 | ||||
|         /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|         exit 0 | ||||
| 	fi | ||||
|  | ||||
|     print_info "Download and install ${VERSION_WINE_GIT}..." | ||||
|     PW_WINE_ARCHIVE="$(echo ${URL_VERSION_PROTON_GIT} | awk -F'/' '{print $NF}' | awk -F'.tar' '{print $1}')" | ||||
|     if try_download_to_path "${URL_VERSION_PROTON_GIT}" "${PORT_WINE_PATH}/data/tmp/" ; then | ||||
|         for archive_type in "gz" "xz" ; do | ||||
|             if [ -f "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}" ] ; then | ||||
|                 if unpack_tar_${archive_type} "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}" "${PORT_WINE_PATH}/data/dist/" ; then | ||||
|                     try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}" | ||||
|                     if [ ! -z "${portwine_exe}" ]; then | ||||
|                         PW_WINE_USE=${VERSION_WINE_GIT} | ||||
|                         edit_db_from_gui PW_WINE_USE | ||||
|                     fi | ||||
|                 else | ||||
|                     try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}" | ||||
|                     try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_ARCHIVE}" | ||||
|                     yad_error_download && gui_proton_downloader || exit 1 | ||||
|                 fi | ||||
|             fi | ||||
|         done | ||||
|     else | ||||
|         yad_error_download && gui_proton_downloader || exit 1 | ||||
|     fi | ||||
|  | ||||
|     if [[ "$1" != "silent" ]] ; then | ||||
|         export SKIP_CHECK_UPDATES=1 | ||||
|         /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|         exit 0 | ||||
|     else | ||||
|         init_wine_ver | ||||
|     fi | ||||
| } | ||||
| export -f gui_proton_downloader | ||||
|  | ||||
| gui_vkBasalt () { | ||||
|     KEY_FX_GUI=$RANDOM | ||||
|     FILE_VKBASALT_CONF="${PORT_WINE_PATH}/data/vkBasalt.conf" | ||||
|     LIST_FX=(`grep -E '.fx$|.fxh$' "${FILE_VKBASALT_CONF}" | awk '{print $1}'`) | ||||
|     GET_FX_IN_FILE=(`echo ${PW_VKBASALT_EFFECTS} | sed s/"cas:"// | sed s/":"/" "/g`) | ||||
|     unset ADD_GUI_FX GUI_FX_RESULT | ||||
|     for add_list_fx in ${LIST_FX[@]} ; do | ||||
|         PW_VKBASALT_GUI_HELP="PW_${add_list_fx}_INFO" | ||||
|         if [[ ! -z `echo " ${GET_FX_IN_FILE[@]} " | grep " ${add_list_fx} "` ]] ; then | ||||
|             ADD_GUI_FX+="--field=$add_list_fx!${!PW_VKBASALT_GUI_HELP}:CHK%TRUE%" | ||||
|         else | ||||
|             ADD_GUI_FX+="--field=$add_list_fx!${!PW_VKBASALT_GUI_HELP}:CHK%FALSE%" | ||||
|         fi | ||||
|     done | ||||
|     if [[ ! -z "${PW_VKBASALT_FFX_CAS}" ]] ; then | ||||
|         if [[ "$PW_VKBASALT_FFX_CAS" == "0" ]] | ||||
|         then export VKBASALT_FFX_CAS_GUI="0" | ||||
|         elif [[ "$PW_VKBASALT_FFX_CAS" == "1" ]] | ||||
|         then export VKBASALT_FFX_CAS_GUI="100" | ||||
|         elif [[ "$PW_VKBASALT_FFX_CAS" == 0.0* ]] | ||||
|         then export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.0' '{print $2}')" | ||||
|         else export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.' '{print $2}')" | ||||
|         fi | ||||
|     else | ||||
|         VKBASALT_FFX_CAS_GUI=66 | ||||
|     fi | ||||
|     export old_IFS=$IFS | ||||
|     export IFS="%" | ||||
|     "${pw_yad_v12_3}" --plug=$KEY_FX_GUI --tabnum="1" --form --columns=5 --separator=" " \ | ||||
|     --text-align=center --text="$loc_gui_vkbasalt_top" \ | ||||
|     ${ADD_GUI_FX} 1> "${PORT_WINE_TMP_PATH}/tmp_yad_basalt_set" 2>/dev/null & | ||||
|     export IFS="${old_IFS}" | ||||
|  | ||||
|     "${pw_yad_v12_3}" --plug=$KEY_FX_GUI --tabnum="2" --separator=" " --form \ | ||||
|     --field="AMD FidelityFX - Contrast Adaptive Sharpening"!"$loc_gui_ffx_cas":SCL "${VKBASALT_FFX_CAS_GUI}" \ | ||||
|     1> "${PORT_WINE_TMP_PATH}/tmp_yad_cas_set" 2>/dev/null & | ||||
|  | ||||
|     "${pw_yad_v12_3}" --paned --key="$KEY_FX_GUI" --height="650" --title="vkBasalt" --center --borders=${YAD_BORDERS} \ | ||||
|     --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|     --button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \ | ||||
|     --button="$loc_gui_disabled_vkbas"!!"$loc_gui_disabled_vkbas_help":180 \ | ||||
|     --button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":182 2>/dev/null | ||||
|     YAD_VKBASALT_STATUS="$?" | ||||
|     case "${YAD_VKBASALT_STATUS}" in | ||||
|         1|252) | ||||
|             export SKIP_CHECK_UPDATES=1 | ||||
|             /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|             exit 0 ;; | ||||
|         180) | ||||
|             export ENABLE_VKBASALT=0 ;; | ||||
|         182) | ||||
|             export ENABLE_VKBASALT=1 ;; | ||||
|     esac | ||||
|     YAD_BASALT_SET=`cat "${PORT_WINE_TMP_PATH}/tmp_yad_basalt_set"` | ||||
|     YAD_CAS_SET=`cat "${PORT_WINE_TMP_PATH}/tmp_yad_cas_set" | sed s/" "//g` | ||||
|  | ||||
|     INT_COUNT_FX=0 | ||||
|     for read_list_fx in ${YAD_BASALT_SET} ; do | ||||
|         if [[ "$read_list_fx" == "TRUE" ]] ; then | ||||
|             export GUI_FX_RESULT+="${LIST_FX[$INT_COUNT_FX]}:" | ||||
|         fi | ||||
|         ((INT_COUNT_FX++)) | ||||
|     done | ||||
|     GUI_FX_RESULT="${GUI_FX_RESULT}cas" | ||||
|     export PW_VKBASALT_EFFECTS="${GUI_FX_RESULT}" | ||||
|  | ||||
|     if [[ "$YAD_CAS_SET" == "0" ]] | ||||
|     then export PW_VKBASALT_FFX_CAS="0" | ||||
|     elif [[ "$YAD_CAS_SET" == "100" ]] | ||||
|     then export PW_VKBASALT_FFX_CAS="1" | ||||
|     elif [[ "$YAD_CAS_SET" -lt 10 ]] | ||||
|     then export PW_VKBASALT_FFX_CAS="0.0$YAD_CAS_SET" | ||||
|     else export PW_VKBASALT_FFX_CAS="0.$YAD_CAS_SET" | ||||
|     fi | ||||
|     edit_db_from_gui PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS ENABLE_VKBASALT | ||||
|     export SKIP_CHECK_UPDATES=1 | ||||
|     /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|     exit 0 | ||||
| } | ||||
|  | ||||
| gui_MangoHud () { | ||||
|     KEY_MH_GUI=$RANDOM | ||||
|     LIST_MH=( | ||||
|         arch battery battery_icon battery_time battery_watt core_bars core_load | ||||
|         cpu_mhz cpu_power cpu_temp device_battery_icon engine_short_names | ||||
|         engine_version exec_name fcat fps_metrics frame_count frametime full | ||||
|         gamemode gpu_core_clock gpu_fan gpu_junction_temp gpu_mem_clock | ||||
|         gpu_mem_temp gpu_name gpu_power gpu_temp gpu_voltage histogram horizontal | ||||
|         horizontal_stretch hud_compact hud_no_margin io_read io_write no_display | ||||
|         no_small_font procmem procmem_shared procmem_virt ram resolution | ||||
|         show_fps_limit swap temp_fahrenheit throttling_status throttling_status_graph | ||||
|         time version vkbasalt vram vulkan_driver wine | ||||
|     ) | ||||
|     # fps_only | ||||
|      | ||||
|     unset ADD_GUI_MH GUI_MH_RESULT | ||||
|  | ||||
|     GET_REFRESH_RATE="30!45!60!75!120!144!165!240" | ||||
|  | ||||
|     if [[ -z "$FPS_LIMIT" ]]; then | ||||
|         FPS_LIMIT_VAR="disabled" | ||||
|     else | ||||
|         FPS_LIMIT_VAR="${FPS_LIMIT}" | ||||
|     fi | ||||
|  | ||||
|     if [ -n "$MANGOHUD_CONFIG" ]; then | ||||
|         PW_MANGOHUD_CONFIG=($(echo "$MANGOHUD_CONFIG" | tr ',' '\n' | grep -v '=')) | ||||
|     else | ||||
|         PW_MANGOHUD_CONFIG=($(echo "$DEFAULT_MANGOHUD_CONFIG" | tr ',' '\n' | grep -v '=')) | ||||
|     fi | ||||
|  | ||||
|     for add_list_mh in "${LIST_MH[@]}"; do | ||||
|         PW_MH_GUI_HELP="PW_MH_${add_list_mh}_INFO" | ||||
|         if [[ -n "$(grep -wo "$add_list_mh" <<<"${PW_MANGOHUD_CONFIG[@]}")" ]]; then | ||||
|             ADD_GUI_MH+="--field=  $add_list_mh  !${!PW_MH_GUI_HELP}:CHK%TRUE%" | ||||
|         else | ||||
|             ADD_GUI_MH+="--field=  $add_list_mh  !${!PW_MH_GUI_HELP}:CHK%FALSE%" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     export old_IFS=$IFS | ||||
|     export IFS="%" | ||||
|     "${pw_yad_v12_3}" --plug=$KEY_MH_GUI --tabnum="1" --form --columns=5 --separator=" " \ | ||||
|         --text-align=center --text="$loc_gui_mh_top" \ | ||||
|         ${ADD_GUI_MH} 1> "${PORT_WINE_TMP_PATH}/tmp_yad_mh_set" 2>/dev/null & | ||||
|     export IFS="${old_IFS}" | ||||
|  | ||||
|     "${pw_yad_v12_3}" --plug=$KEY_MH_GUI --tabnum="2" --separator=" " --form \ | ||||
|         --field="${loc_gui_mango_fps}!${loc_gui_mango_fps_help} :CB" "${FPS_LIMIT_VAR}!disabled!${GET_REFRESH_RATE}" \ | ||||
|         1> "${PORT_WINE_TMP_PATH}/tmp_yad_mh_fps_limit" 2>/dev/null & | ||||
|  | ||||
|     "${pw_yad_v12_3}" --paned --key="$KEY_MH_GUI" --height="650" --title="MangoHud" --center --borders=${YAD_BORDERS} \ | ||||
|         --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|         --button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \ | ||||
|         --button="$loc_gui_disabled_mh"!!"$loc_gui_disabled_mh_help":182 \ | ||||
|         --button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":184 2>/dev/null | ||||
|     YAD_MANGOHUD_STATUS="$?" | ||||
|  | ||||
|     case "${YAD_MANGOHUD_STATUS}" in | ||||
|         1 | 252) | ||||
|             export SKIP_CHECK_UPDATES=1 | ||||
|             /usr/bin/env bash -c "${pw_full_command_line[*]}" & | ||||
|             exit 0 | ||||
|             ;; | ||||
|         182) | ||||
|             export PW_MANGOHUD=0 | ||||
|             export FPS_LIMIT="disabled" | ||||
|             edit_db_from_gui PW_MANGOHUD FPS_LIMIT | ||||
|             export SKIP_CHECK_UPDATES=1 | ||||
|             /usr/bin/env bash -c "${pw_full_command_line[*]}" & | ||||
|             exit 0 | ||||
|             ;; | ||||
|         184) | ||||
|             export PW_MANGOHUD=1 | ||||
|             ;; | ||||
|     esac | ||||
|  | ||||
|     YAD_MH_SET=$(<"${PORT_WINE_TMP_PATH}/tmp_yad_mh_set") | ||||
|     FPS_LIMIT=$(cat "${PORT_WINE_TMP_PATH}/tmp_yad_mh_fps_limit" | awk '{print $1}') | ||||
|  | ||||
|     MONITOR_HEIGHT="$(echo $PW_SCREEN_RESOLUTION | awk -F'x' '{print $2}')" | ||||
|     MH_FONT_SIZE="font_size=$(( MONITOR_HEIGHT / 45 ))" | ||||
|  | ||||
|  | ||||
|     export INT_COUNT_MH=0 | ||||
|     for read_list_mh in ${YAD_MH_SET} ; do | ||||
|         if [[ "$read_list_mh" == "TRUE" ]] | ||||
|         then export GUI_MH_RESULT+="${LIST_MH[$INT_COUNT_MH]}," | ||||
|         fi | ||||
|         ((INT_COUNT_MH++)) | ||||
|     done | ||||
|  | ||||
|     if [[ -n "$MH_FONT_SIZE" ]] | ||||
|     then GUI_MH_RESULT="${GUI_MH_RESULT}${MH_FONT_SIZE}" | ||||
|     else GUI_MH_RESULT="${GUI_MH_RESULT%,}" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${FPS_LIMIT}" != "disabled" ]] ; then | ||||
|         export GUI_MH_RESULT=${GUI_MH_RESULT},fps_limit=${FPS_LIMIT} | ||||
|         export PW_MANGOHUD=1 | ||||
|     elif [[ "${FPS_LIMIT}" == "disabled" ]] | ||||
|     then export GUI_MH_RESULT="$(echo ${GUI_MH_RESULT} | sed "s/,fps_limit=${FPS_LIMIT_VAR}//" | sed "s/,fps_limit=disabled//")" | ||||
|     fi | ||||
|  | ||||
|     if [[ "${GUI_MH_RESULT}" =~ "fps_only" ]]; then | ||||
|         export GUI_MH_RESULT="fps_only" | ||||
|         print_info "In the MangoHud config fps_only is detected all settings are reseted" | ||||
|     fi | ||||
|      | ||||
|     export MANGOHUD_CONFIG="${GUI_MH_RESULT}" | ||||
|  | ||||
|     edit_db_from_gui MANGOHUD_CONFIG PW_MANGOHUD FPS_LIMIT | ||||
|     export SKIP_CHECK_UPDATES=1 | ||||
|     /usr/bin/env bash -c "${pw_full_command_line[*]}" & | ||||
|     exit 0 | ||||
| } | ||||
|  | ||||
|  | ||||
| portwine_create_shortcut () { | ||||
|     pw_create_gui_png | ||||
|     pw_stop_progress_bar | ||||
|  | ||||
|     if [[ "$1" == "block_name" ]] ; then | ||||
|         export name_desktop="${PORTPROTON_NAME}" | ||||
|         OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \ | ||||
|         --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|         --image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \ | ||||
|         --field="${sc_info}":LBL "" \ | ||||
|         --field="  ${name_desktop}":LBL "" \ | ||||
|         --field="  ${sc_menu_desktop}":CHK "TRUE" \ | ||||
|         --field="  ${sc_desktop_desktop}":CHK "TRUE" \ | ||||
|         --field="  ${sc_add_in_steam}":CHK "FALSE" \ | ||||
|         --button="$loc_gui_create_shortcut":0) | ||||
|         PW_YAD_OUT=$? | ||||
|     else | ||||
|         export name_desktop="${PORTPROTON_NAME}" | ||||
|         OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \ | ||||
|         --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|         --image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \ | ||||
|         --field="${sc_info}":LBL "" \ | ||||
|         --field="${sc_name}:" "${name_desktop}" \ | ||||
|         --field="  ${sc_menu_desktop}":CHK "TRUE" \ | ||||
|         --field="  ${sc_desktop_desktop}":CHK "TRUE" \ | ||||
|         --field="  ${sc_add_in_steam}":CHK "FALSE" \ | ||||
|         --button="$loc_gui_create_shortcut":0) | ||||
|         PW_YAD_OUT=$? | ||||
|     fi | ||||
|  | ||||
|     if [[ "$PW_YAD_OUT" == "0" ]] ; then | ||||
|         if [[ "$1" == "block_name" ]] | ||||
|         then name_desktop="$PORTWINE_CREATE_SHORTCUT_NAME" | ||||
|         else name_desktop=$(echo "$OUTPUT" | awk -F'|' '{print $2}') | ||||
|         fi | ||||
|         create_menu_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $3}') | ||||
|         create_desktop_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $4}') | ||||
|         create_menu_steam_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $5}') | ||||
|  | ||||
|         try_remove_file "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|  | ||||
|         if [[ "${PORTPROTON_NAME}" != "${name_desktop}" ]] | ||||
|         then mv -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" "${PORT_WINE_PATH}/data/img/${name_desktop}.png" | ||||
|         fi | ||||
|  | ||||
|         echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         if  grep -i "flatpak" /etc/os-release &>/dev/null | ||||
|         then echo "Exec=flatpak run com.castrofidel.portproton \"${portwine_exe}\" " >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         else echo "Exec=env "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${portwine_exe}\" "" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         fi | ||||
|         echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         echo "StartupNotify=true" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         echo "Path="${PORT_SCRIPTS_PATH}/"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         echo "Icon="${PORT_WINE_PATH}/data/img/${name_desktop}.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|         chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" | ||||
|  | ||||
|         if [[ "${create_menu_desktop_shortcut}" == "TRUE" ]] ; then | ||||
|             try_remove_file "${HOME}/.local/share/applications/${name_desktop}.desktop" | ||||
|             cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/.local/share/applications/" | ||||
|         fi | ||||
|  | ||||
|         if [[ "${create_desktop_desktop_shortcut}" == "TRUE" ]] ; then | ||||
|             if [[ -d "${HOME}/Desktop" ]] ; then | ||||
|                 cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/Desktop/" | ||||
|             elif [[ -d "${HOME}/Рабочий стол" ]] ; then | ||||
|                 cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/Рабочий стол/" | ||||
|             elif [[ $(xdg-user-dir DESKTOP) ]] ; then | ||||
|                 cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "$(xdg-user-dir DESKTOP)" | ||||
|             fi | ||||
|         fi | ||||
|  | ||||
|         if [[ "${create_menu_steam_shortcut}" == "TRUE" ]] ; then | ||||
|             export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts" | ||||
|             create_new_dir "${STEAM_SCRIPTS}" | ||||
|             echo "#!/usr/bin/env bash" > "${STEAM_SCRIPTS}/${name_desktop}.sh" | ||||
|             echo "export START_FROM_STEAM=1" >> "${STEAM_SCRIPTS}/${name_desktop}.sh" | ||||
|             echo "export LD_PRELOAD=" >> "${STEAM_SCRIPTS}/${name_desktop}.sh" | ||||
|             if grep -i "flatpak" /etc/os-release &>/dev/null | ||||
|             then echo "flatpak run com.castrofidel.portproton \"${portwine_exe}\" " >> "${STEAM_SCRIPTS}/${name_desktop}.sh" | ||||
|             else echo "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${portwine_exe}\" " >> "${STEAM_SCRIPTS}/${name_desktop}.sh" | ||||
|             fi | ||||
|             chmod u+x "${STEAM_SCRIPTS}/${name_desktop}.sh" | ||||
|             export SCVDF="shortcuts.vdf" | ||||
|             for STUIDPATH in "${HOME}"/.local/share/Steam/userdata/*/ ; do | ||||
|                 create_new_dir "${STUIDPATH}/config/" | ||||
|                 export SCPATH="${STUIDPATH}/config/$SCVDF" | ||||
|                 "${PORT_SCRIPTS_PATH}/add_in_steam.sh" | ||||
|             done | ||||
|             if [[ "${PW_SKIP_RESTART_STEAM}" != 1 ]] && pgrep -i steam &>/dev/null ; then | ||||
|                 if gui_question "$sc_restert_steam" ; then | ||||
|                     pw_start_progress_bar_block "Restarting STEAM... Please wait." | ||||
|                     kill -s SIGTERM $(pgrep -a steam) &>/dev/null | ||||
|                     while pgrep -i steam &>/dev/null ; do | ||||
|                         sleep 0.5 | ||||
|                     done | ||||
|                     steam & | ||||
|                     sleep 5 | ||||
|                     pw_stop_progress_bar | ||||
|                     exit 0 | ||||
|                 fi | ||||
|             fi | ||||
|             unset PW_SKIP_RESTART_STEAM | ||||
|         fi | ||||
|          | ||||
|         [[ "$1" != silent ]] && [[ "${PW_SKIP_RESTART_STEAM}" != 1 ]] && "${PORT_WINE_PATH}" 2>1 >/dev/null & | ||||
|     fi | ||||
| } | ||||
|  | ||||
| portwine_delete_shortcut () { | ||||
|     rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" &>/dev/null | ||||
|     rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" &>/dev/null | ||||
|     # rm -f "$(grep -il "${portwine_exe}" "${STEAM_SCRIPTS}"/*.sh)" &>/dev/null | ||||
|     if [[ -d "${HOME}/Desktop" ]] ; then | ||||
|         rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null | ||||
|     elif [[ -d "${HOME}/Рабочий стол" ]] ; then | ||||
|         rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" &>/dev/null | ||||
|     elif [[ $(xdg-user-dir DESKTOP) ]] ; then | ||||
|         rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null | ||||
|     fi | ||||
| } | ||||
|  | ||||
| portwine_missing_shortcut () { | ||||
|     "${pw_yad}" --title="${loc_gui_error}." --form --borders=${YAD_BORDERS} \ | ||||
|     --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|     --image "$PW_GUI_ICON_PATH/error_file.png" \ | ||||
|     --text "$loc_gui_missing_shortcut" \ | ||||
|     --button="$loc_gui_delete_shortcut":0 \ | ||||
|     --button="$loc_cancel":1 | ||||
|     if [ $? -eq "0" ] ; then | ||||
|         portwine_delete_shortcut | ||||
|     fi | ||||
|     exit 0 | ||||
| } | ||||
							
								
								
									
										22
									
								
								data_from_portwine/themes/classic.pptheme
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @@ -0,0 +1,22 @@ | ||||
| export THEME_NAME="$(basename .pptheme)" | ||||
| export THEME_PATH="$PW_GUI_THEMES_PATH/$THEME_NAME" | ||||
| export YAD_OPTIONS="--css=$THEME_PATH/style.css \ | ||||
| --borders=5 \ | ||||
| --tab-borders=3 \ | ||||
| --keep-icon-size \ | ||||
| " | ||||
|  | ||||
| export THEME_CHKBOX=CHK | ||||
| export CHKBOX_SPACE="  " | ||||
|  | ||||
| export BUTTON_SIZE_MM=32 | ||||
| export BUTTON_SIZE=24 | ||||
| export TAB_SIZE=28 | ||||
|  | ||||
| export PW_MAIN_SIZE_W=1100 | ||||
| export PW_MAIN_SIZE_H=350 | ||||
|  | ||||
| export MAIN_GUI_COLUMNS=3 | ||||
|  | ||||
| export PROGRESS_BAR_BORDERS_SIZE=20 | ||||
| export PROGRESS_BAR_WIDTH_SIZE=500 | ||||
							
								
								
									
										0
									
								
								data_from_portwine/themes/classic/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										34
									
								
								data_from_portwine/themes/default.pptheme
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @@ -0,0 +1,34 @@ | ||||
| # определение названия и пути темы | ||||
| export THEME_NAME="$(basename .pptheme)" | ||||
| export THEME_PATH="$PW_GUI_THEMES_PATH/$THEME_NAME" | ||||
|  | ||||
| # глобальные настройки YAD | ||||
| export YAD_OPTIONS="--css=$THEME_PATH/style.css \ | ||||
| --borders=3 \ | ||||
| --tab-borders=0 \ | ||||
| --keep-icon-size \ | ||||
| " | ||||
|  | ||||
| # настройка переключателей | ||||
| export THEME_CHKBOX=SW           # CHK - галки, SW - слайдер | ||||
| export CHKBOX_SPACE="          " # растояние перед текстом | ||||
|  | ||||
| # размер кнопок в главном меню | ||||
| export BUTTON_SIZE_MM=36 # 24, 28, 32, 36, 40 | ||||
|  | ||||
| # размер остальных кнопок | ||||
| export BUTTON_SIZE=28 # 24, 28, 32, 36, 40 | ||||
|  | ||||
| # размер вкладок | ||||
| export TAB_SIZE=32 # 24, 28, 32, 36, 40 | ||||
|  | ||||
| # размер главного меню | ||||
| export PW_MAIN_SIZE_W=1100 | ||||
| export PW_MAIN_SIZE_H=350 | ||||
|  | ||||
| # количество столбцов в главном меню | ||||
| export MAIN_GUI_COLUMNS=4 | ||||
|  | ||||
| # настройки индикатора прогресса | ||||
| export PROGRESS_BAR_BORDERS_SIZE=20 | ||||
| export PROGRESS_BAR_WIDTH_SIZE=500 | ||||
							
								
								
									
										0
									
								
								data_from_portwine/themes/default/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -4,7 +4,7 @@ | ||||
| ######################################################################## | ||||
| unset PW_AUTOPLAY PW_SET_LANG PW_SILENT_INSTALL | ||||
| export portname="PortProton" | ||||
| export port_ver=1.4 | ||||
| export port_ver=1.5 | ||||
| ######################################################################## | ||||
| cd "$(dirname "$(readlink -f "$0")")" | ||||
| script_path="$(pwd)" | ||||
| @@ -14,27 +14,12 @@ fatal () { | ||||
| 	echo -e "\n${1}\n" | ||||
| 	exit 1 | ||||
| } | ||||
|  | ||||
| pw_notify_send () { | ||||
| 	if command -v notify-send &>/dev/null ; then | ||||
| 		if [[ -f "/usr/share/icons/hicolor/scalable/apps/portproton.svg" ]] | ||||
| 		then notify-send -u normal -a PortProton -i "/usr/share/icons/hicolor/scalable/apps/portproton.svg" $@ "${PW_NOTIFY_TEXT}" | ||||
| 		else notify-send -u normal -a PortProton $@ "${PW_NOTIFY_TEXT}" | ||||
| 		fi | ||||
| 	fi | ||||
| } | ||||
| ######################################################################## | ||||
| if [ "$(id -u)" == "0" ] ; then | ||||
| 	$yad_gui --error --text "\nDo not run ${portname} from the superuser!" 2>/dev/null | ||||
| 	fatal "Do not run the script from the superuser!" | ||||
| fi | ||||
| ######################################################################## | ||||
| unset PW_USE_NS | ||||
| if command -v yad &>/dev/null | ||||
| then yad_gui="yad --window-icon=portproton.svg --borders=10 --center --text-align=center" | ||||
| else PW_USE_NS=1 | ||||
| fi | ||||
|  | ||||
| [ -z "${XDG_DATA_HOME}" ] && export XDG_DATA_HOME="$HOME/.local/share" | ||||
| PP_CONFIG_FILE="${HOME}/.config/${portname}.conf" | ||||
| if [ -f "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then | ||||
| @@ -53,11 +38,39 @@ if [ "$script_path" == "/usr/bin" ] && [ -f "${PP_CONFIG_FILE}" ] ; then | ||||
| 		rm -f "${PP_CONFIG_FILE}" | ||||
| 	fi | ||||
| fi | ||||
| if locale | grep "LANG=ru_RU.UTF-8" 2>/dev/null | ||||
| if [[ "${LANG}" == "ru_RU.UTF-8" ]] | ||||
| then PW_SET_LANG="Russian" | ||||
| else PW_SET_LANG="English" | ||||
| fi | ||||
| ######################################################################## | ||||
| pw_notify_send () { | ||||
| 	if command -v notify-send &>/dev/null ; then | ||||
| 		if [[ -f "/usr/share/icons/hicolor/scalable/apps/portproton.svg" ]] | ||||
| 		then notify-send -u normal -a PortProton -i "/usr/share/icons/hicolor/scalable/apps/portproton.svg" $@ "${PW_NOTIFY_TEXT}" | ||||
| 		else notify-send -u normal -a PortProton $@ "${PW_NOTIFY_TEXT}" | ||||
| 		fi | ||||
| 	fi | ||||
| } | ||||
| ######################################################################## | ||||
| unset PW_USE_NS | ||||
| YAD_PORTABLE_VER="12_3" | ||||
| if command -v yad &>/dev/null ; then | ||||
| 	yad_gui="yad --window-icon=portproton.svg --borders=10 --center --text-align=center" | ||||
| elif curl -f -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" \ | ||||
| 	-H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \ | ||||
| 	-L "https://github.com/Castro-Fidel/PortWINE/releases/download/yad_portable_v${YAD_PORTABLE_VER}/yad_portable_v${YAD_PORTABLE_VER}.tar.xz" \ | ||||
| 	-o "${HOME}/yad_portable_v${YAD_PORTABLE_VER}.tar.xz" | ||||
| then | ||||
| 	mkdir -p "${HOME}/.local/bin/" &>/dev/null | ||||
| 	tar -Jxhvf "${HOME}/yad_portable_v${YAD_PORTABLE_VER}.tar.xz" -C "${HOME}/.local/bin/" | ||||
| 	if [[ -f "${HOME}/.local/bin/yad_portable_v${YAD_PORTABLE_VER}" ]] | ||||
| 	then yad_gui="${HOME}/.local/bin/yad_portable_v${YAD_PORTABLE_VER} --borders=10 --center --text-align=center" | ||||
| 	else PW_USE_NS=1 | ||||
| 	fi | ||||
| else | ||||
| 	PW_USE_NS=1 | ||||
| fi | ||||
| ######################################################################## | ||||
| export PW_SILENT_INSTALL=1 | ||||
| export PW_AUTOPLAY=1 | ||||
| export INSTALLING_PORT=1 | ||||
| @@ -75,7 +88,6 @@ if [[ "${PW_USE_NS}" != "1" ]] ; then | ||||
| 				"${def_path}") | ||||
| 					D_PATH="${def_path}" ;; | ||||
| 				"Другой путь...") | ||||
| 					echo 111 | ||||
| 					D_PATH="$($yad_gui --file --directory --title="Выберите путь..." --width=800 --height=800)" ;; | ||||
| 			esac ;; | ||||
| 		"English") | ||||
| @@ -134,12 +146,12 @@ fi | ||||
| export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" | ||||
| cd "${PORT_WINE_PATH}" | ||||
| echo -e "\nTry download scripts from gitlab.eterfund.ru..." | ||||
| if ! curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \ | ||||
| if ! curl -f -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \ | ||||
| 	-L "https://gitlab.eterfund.ru/Castro-Fidel/PortWINE/-/archive/master/PortWINE-master.tar.gz" \ | ||||
| 	-o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" | ||||
| then | ||||
| 	echo -e "\nError.\nTry download scripts from github.com..." | ||||
| 	curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \ | ||||
| 	curl -f -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \ | ||||
| 	-L "https://github.com/Castro-Fidel/PortWINE/archive/refs/heads/master.tar.gz" \ | ||||
| 	-o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" | ||||
| 	[ "$?" != "0" ] && fatal "Critical error during file download!" | ||||
|   | ||||