From e6bf4e1d3b61b131ce62a9f8558b816dff164c5f Mon Sep 17 00:00:00 2001 From: Kazevic Date: Thu, 18 Jul 2024 01:46:39 -0300 Subject: [PATCH 01/37] Reformat code, fix typos, and use apt instead of apt-get --- README-RU.md | 35 +- README.md | 55 +- data_from_portwine/img/gui/close.svg | 1154 ++++++----- data_from_portwine/img/gui/download.svg | 120 +- data_from_portwine/img/gui/error.svg | 102 +- data_from_portwine/img/gui/find_48.svg | 1153 ++++++----- data_from_portwine/img/gui/history.svg | 1158 +++++------ data_from_portwine/img/gui/info.svg | 120 +- data_from_portwine/img/gui/portproton.svg | 15 +- .../img/gui/portproton_tray_dark.svg | 158 +- .../img/gui/portproton_tray_flatpak.svg | 160 +- .../img/gui/portproton_tray_light.svg | 160 +- data_from_portwine/img/gui/question.svg | 106 +- data_from_portwine/img/gui/wine_file.svg | 1153 ++++++----- data_from_portwine/img/gui/wine_system.svg | 1686 +++++++++-------- data_from_portwine/themes/compact/style.css | 75 +- data_from_portwine/themes/default/style.css | 57 +- 17 files changed, 4076 insertions(+), 3391 deletions(-) diff --git a/README-RU.md b/README-RU.md index ffa53302..a01e9348 100755 --- a/README-RU.md +++ b/README-RU.md @@ -1,6 +1,6 @@ -
+
-

PortProton

+

PortProton

GitHub License @@ -10,22 +10,24 @@ YouTube Channel Subscribers
-

+

Проект, призванный сделать запуск Windows-игр в Linux простым и удобным как для начинающих, так и для опытных пользователей.
Проект стремится сделать запуск игр (и другого программного обеспечения) максимально простым, но в то же время предоставляет гибкие настройки для опытных пользователей.

# **Язык README** + **Русский** - [English](README.md) ## Внимание + **Официальный сайт проекта** с сентября 2022 года: https://linux-gaming.ru. **Любой другой сайт - фальшивка!** ## Особенности - Основан на версии WINE от Valve (Proton) и ее модификациях (Proton GE). -Включает набор скриптов, объединенных с самим wine-proton, контейнер Steam Runtime Sniper с добавлением портированных версий MANGOHUD (вывод полезной информации в окно игры: FPS, FrameTime, CPU, GPU и т.д.) и vkBasalt (улучшение графики в играх, очень хорош в связке с FSR, DLSS) + множество уже настроенных оптимизаций для максимальной производительности. + Включает набор скриптов, объединенных с самим wine-proton, контейнер Steam Runtime Sniper с добавлением портированных версий MANGOHUD (вывод полезной информации в окно игры: FPS, FrameTime, CPU, GPU и т.д.) и vkBasalt (улучшение графики в играх, очень хорош в связке с FSR, DLSS) + множество уже настроенных оптимизаций для максимальной производительности. - Реализована автоматическая установка одним щелчком мыши (на вкладке АВТОУСТАНОВКА) популярных лаунчеров, таких как: WGC, Epic Games, Battle.net, Origin, EVE Online, RockStar, Ubisoft connect , League of Legends и многие другие. @@ -37,24 +39,26 @@ * WINE-PROTON: https://github.com/ValveSoftware/Proton -* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ +* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom ## Установка с помощью пакетов * **Alt Linux** -`apt-get` : +`apt` : + ```sh su - -apt-get update && apt-get dist-upgrade -y +apt update && apt dist-upgrade -y -apt-get install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} +apt install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} exit ``` `Вариант установки с помощью eepm`: + ```sh su - @@ -66,13 +70,13 @@ exit ``` * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** : -[portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) + [portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) * **Arch Linux** и производные (Manjaro, Garuda, и т.д.) : -[AUR](https://aur.archlinux.org/packages/portproton) + [AUR](https://aur.archlinux.org/packages/portproton) -* **OpenSuse**: -[OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) +* **openSUSE**: + [OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) * **ROSA Linux** устанавливается с помощью этой команды: @@ -164,11 +168,11 @@ sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i6 * **Alt Linux** ```sh -sudo apt-get update +sudo apt update -sudo apt-get dist-upgrade -y +sudo apt dist-upgrade -y -sudo apt-get install bubblewrap cabextract curl icoutils i586-libvulkan1 libvulkan1 vulkan-tools zstd +sudo apt install bubblewrap cabextract curl icoutils i586-libvulkan1 libvulkan1 vulkan-tools zstd ``` * **ROSA DESKTOP FRESH R12** @@ -194,6 +198,7 @@ sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils ``` * **Void** + ```sh sudo xbps-install -Su void-repo-multilib diff --git a/README.md b/README.md index f5034628..7ae4dd2a 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -
+
-

PortProton

+

PortProton

GitHub License @@ -10,51 +10,57 @@ YouTube Channel Subscribers
-

+

A project designed to make running Windows games on Linux easy and convenient for both beginners and advanced users.
The project aims to simplify the process of launching games (and other software) while also providing flexible settings for experienced users.

# **Readme Language** + **English** - [Русский](README-RU.md) ## Attention -The **official website of the project** since September 2022: https://linux-gaming.ru. **Any other site is fake!** + +The **official website of the project** since September 2022 is: https://linux-gaming.ru. **Any other site is fake!** ## Features - Based on the version of WINE from Valve (Proton) and its modifications (Proton GE). -Includes a set of scripts combined with wine-proton itself, a Steam Runtime Sniper container with the addition of ported versions of MANGOHUD (output useful information over the game window: FPS, FrameTime, CPU, GPU, etc) and vkBasalt (improvement of graphics in games, very good in in conjunction with FSR, DLSS) + many already configured optimizations for maximum performance. + Includes a set of scripts combined with wine-proton itself, a Steam Runtime Sniper container with the addition of + ported mangoHud (output useful information over the game window: FPS, frametime, CPU, GPU, etc.), + vkBasalt (improvement of graphics in games, great alongside FSR or DLSS) versions, + and many already configured optimizations for maximum performance. +- Implemented one-click auto-installation (in the AUTOINSTALL tab) of popular launchers such as WGC, Epic Games, Battle.net, Origin, EVE Online, Rockstar, Ubisoft Connect, League of Legends, and many others. -- Implemented one-click auto-installation (in the AUTOINSTALL tab ) of popular launchers such as: WGC, Epic Games, Battle.net, Origin, EVE Online, RockStar, Ubisoft connect , League of Legends and many others. +- For fans of console games, there are many console emulators to choose from (in the EMULATORS tab): PPSSPP, Citra, Cemu, ePSXe, MAME, and many others. -- For fans of console games, there are many console emulators to choose from (in the EMULATORS tab ): PPSSPP, Citra, Cemu, ePSXe, MAME and many others. - -**PLEASE DO NOT REPORT BUGS ENCOUNTERED WITH THIS AT WINEHQ OR VALVE SOFTWARE!** +**PLEASE DON'T REPORT BUGS ENCOUNTERED WITH THIS AT WINEHQ OR VALVE SOFTWARE!** ## **Wine sources used in PortWINE:** * WINE-PROTON: https://github.com/ValveSoftware/Proton -* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ +* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom ## Installation using packages * **Alt Linux** (package in the official repository) is installed with the command: -`apt-get`: +`apt`: + ```sh su - -apt-get update && apt-get dist-upgrade -y +apt update && apt dist-upgrade -y -apt-get install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} +apt install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} exit ``` `epm`: + ```sh su - @@ -71,14 +77,14 @@ exit sudo urpmi portproton ``` -* **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** : -[portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) +* **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x**, and **Deepin**: + [portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) -* **Arch Linux** and derivatives (Manjaro, Garuda, etc.) : -[AUR](https://aur.archlinux.org/packages/portproton) +* **Arch Linux** and derivatives (Manjaro, Garuda, etc.): + [AUR](https://aur.archlinux.org/packages/portproton) -* **OpenSuse**: -[OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) +* **openSUSE**: + [OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) * **Fedora 38+** and **Nobara**: @@ -88,7 +94,7 @@ sudo dnf copr enable boria138/portproton sudo dnf install portproton ``` -* **FlatHub** +* **Flathub** ```sh flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo @@ -97,7 +103,7 @@ flatpak install flathub ru.linux_gaming.PortProton ## Universal (manual) installation -**ATTENTION** : with the universal method of installing PortProton, dependencies must be installed manually! +**ATTENTION**: with the universal method of installing PortProton, dependencies must be installed manually! ```sh wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && sh portproton @@ -107,7 +113,7 @@ wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && * **NVIDIA graphics card users** -If you have a video card from NVIDIA and a proprietary driver is installed, then you need to check if lib32-nvidia-utils is installed (no 32-bit game will work without it) +If you have a video card from NVIDIA and a proprietary driver is installed, then you need to check if lib32-nvidia-utils is installed (32-bit games don't work without it) * **Ubuntu / Linux Mint / Pop!_OS** @@ -166,9 +172,9 @@ sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i6 ```sh su - -apt-get update && apt-get dist-upgrade -y +apt update && apt dist-upgrade -y -apt-get install bubblewrap cabextract zstd gawk tar xz pciutils coreutils file curl icoutils wmctrl xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} +apt install bubblewrap cabextract zstd gawk tar xz pciutils coreutils file curl icoutils wmctrl xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} exit ``` @@ -196,6 +202,7 @@ sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils o ``` * **Void** + ```sh sudo xbps-install -Su void-repo-multilib diff --git a/data_from_portwine/img/gui/close.svg b/data_from_portwine/img/gui/close.svg index a923cc48..66088c84 100644 --- a/data_from_portwine/img/gui/close.svg +++ b/data_from_portwine/img/gui/close.svg @@ -2,19 +2,19 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="stop4863-4" /> + + + + + diff --git a/data_from_portwine/img/gui/download.svg b/data_from_portwine/img/gui/download.svg index bd3428d9..61c40df1 100644 --- a/data_from_portwine/img/gui/download.svg +++ b/data_from_portwine/img/gui/download.svg @@ -2,66 +2,66 @@ - - - - + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="download.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns="http://www.w3.org/2000/svg" +> + + - - + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="matrix(0.13454107,0,0,0.13454107,-2.8135283,-2.3188431)"> + + + + + - diff --git a/data_from_portwine/img/gui/error.svg b/data_from_portwine/img/gui/error.svg index 45b98c8a..01a8cffe 100644 --- a/data_from_portwine/img/gui/error.svg +++ b/data_from_portwine/img/gui/error.svg @@ -2,55 +2,55 @@ - - - - - - + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="error.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns="http://www.w3.org/2000/svg" +> + + + + + + diff --git a/data_from_portwine/img/gui/find_48.svg b/data_from_portwine/img/gui/find_48.svg index 18757877..2d54e49c 100644 --- a/data_from_portwine/img/gui/find_48.svg +++ b/data_from_portwine/img/gui/find_48.svg @@ -2,19 +2,19 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data_from_portwine/img/gui/history.svg b/data_from_portwine/img/gui/history.svg index bbbc8e87..4ce33490 100644 --- a/data_from_portwine/img/gui/history.svg +++ b/data_from_portwine/img/gui/history.svg @@ -2,19 +2,19 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="stop4863-4" /> + + + + + diff --git a/data_from_portwine/img/gui/info.svg b/data_from_portwine/img/gui/info.svg index b8d8d1f5..c03887ed 100644 --- a/data_from_portwine/img/gui/info.svg +++ b/data_from_portwine/img/gui/info.svg @@ -2,64 +2,64 @@ - - - - - - - + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="info.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns="http://www.w3.org/2000/svg" +> + + + + + + + diff --git a/data_from_portwine/img/gui/portproton.svg b/data_from_portwine/img/gui/portproton.svg index efcbe9e3..74b85090 100644 --- a/data_from_portwine/img/gui/portproton.svg +++ b/data_from_portwine/img/gui/portproton.svg @@ -1 +1,14 @@ - \ No newline at end of file + + + + + + + + + + + + \ No newline at end of file diff --git a/data_from_portwine/img/gui/portproton_tray_dark.svg b/data_from_portwine/img/gui/portproton_tray_dark.svg index a943863f..7ed7349b 100644 --- a/data_from_portwine/img/gui/portproton_tray_dark.svg +++ b/data_from_portwine/img/gui/portproton_tray_dark.svg @@ -1,84 +1,84 @@ - - - - - - - - - + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + viewBox="0 0 600 600" + version="1.1" + id="svg3" + sodipodi:docname="portproton_tray-dark.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + inkscape:export-filename="portproton_tray3.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns="http://www.w3.org/2000/svg" +> + + + + + + + - - - + id="g4" + transform="translate(-6.7840858,-19.964294)"> + + + + + + - diff --git a/data_from_portwine/img/gui/portproton_tray_flatpak.svg b/data_from_portwine/img/gui/portproton_tray_flatpak.svg index de3205d5..7e2e712e 100644 --- a/data_from_portwine/img/gui/portproton_tray_flatpak.svg +++ b/data_from_portwine/img/gui/portproton_tray_flatpak.svg @@ -1,85 +1,85 @@ - - - - - - - - - + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + viewBox="0 0 600 600" + version="1.1" + id="svg3" + sodipodi:docname="portproton_tray-blue.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + inkscape:export-filename="portproton_tray3.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns="http://www.w3.org/2000/svg" +> + + + + + + + - - - + id="g4" + transform="translate(-6.7840858,-19.964294)" + style="fill:#09bec8;fill-opacity:1"> + + + + + + - diff --git a/data_from_portwine/img/gui/portproton_tray_light.svg b/data_from_portwine/img/gui/portproton_tray_light.svg index 7a66e402..9b63bd61 100644 --- a/data_from_portwine/img/gui/portproton_tray_light.svg +++ b/data_from_portwine/img/gui/portproton_tray_light.svg @@ -1,85 +1,85 @@ - - - - - - - - - + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + viewBox="0 0 600 600" + version="1.1" + id="svg3" + sodipodi:docname="portproton_tray-iight.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + inkscape:export-filename="portproton_tray3.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns="http://www.w3.org/2000/svg" +> + + + + + + + - - - + id="g4" + transform="translate(-6.7840858,-19.964294)" + style="fill:#000000"> + + + + + + - diff --git a/data_from_portwine/img/gui/question.svg b/data_from_portwine/img/gui/question.svg index 317083fc..c7f68471 100644 --- a/data_from_portwine/img/gui/question.svg +++ b/data_from_portwine/img/gui/question.svg @@ -2,57 +2,57 @@ - - - - - - + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="question.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns="http://www.w3.org/2000/svg" +> + + + + + + diff --git a/data_from_portwine/img/gui/wine_file.svg b/data_from_portwine/img/gui/wine_file.svg index a3731386..555f1f2b 100644 --- a/data_from_portwine/img/gui/wine_file.svg +++ b/data_from_portwine/img/gui/wine_file.svg @@ -2,19 +2,19 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data_from_portwine/img/gui/wine_system.svg b/data_from_portwine/img/gui/wine_system.svg index bb75b2d8..54f680c9 100644 --- a/data_from_portwine/img/gui/wine_system.svg +++ b/data_from_portwine/img/gui/wine_system.svg @@ -2,19 +2,19 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="path1-9-6" + style="fill:#09bec8;fill-opacity:1;stroke-width:0.121745" + d="m 404.27342,520.20973 c -0.18845,0 -0.37691,0.0156 -0.56342,0.0469 -0.0795,0.0134 -0.1472,0.0652 -0.18092,0.13831 l -0.19004,0.41234 c -0.24009,0.0797 -0.46897,0.19005 -0.68106,0.32798 1.4e-4,0 -0.44085,-0.1086 -0.44085,-0.1086 -0.0783,-0.0193 -0.16091,0.002 -0.22094,0.0553 -0.28135,0.25263 -0.51888,0.5504 -0.70259,0.88106 -0.0391,0.0704 -0.0409,0.15558 -0.004,0.22766 l 0.2039,0.40565 c -0.0873,0.23741 -0.14375,0.48504 -0.16822,0.73693 l -0.35978,0.27699 c -0.0638,0.0492 -0.0992,0.12673 -0.0945,0.20721 0.0221,0.37753 0.10678,0.74883 0.25068,1.09859 0.0307,0.0745 0.0962,0.12908 0.17506,0.14563 l 0.44437,0.0935 c 0.13124,0.21621 0.28965,0.41491 0.47129,0.59095 l -0.008,0.45397 c -8.7e-4,0.0806 0.0373,0.15657 0.103,0.20308 0.30899,0.21817 0.65221,0.38339 1.01538,0.48894 0.0774,0.0225 0.16082,0.005 0.22303,-0.046 l 0.35015,-0.28911 c 0.25078,0.0322 0.50485,0.0322 0.75577,0 l 0.35015,0.28911 c 0.0622,0.0512 0.1456,0.0686 0.22303,0.046 0.36316,-0.10555 0.70636,-0.27077 1.01534,-0.48894 0.0658,-0.0465 0.10437,-0.12249 0.10303,-0.20308 l -0.008,-0.45397 c 0.18163,-0.17604 0.34004,-0.37461 0.47128,-0.59095 l 0.44437,-0.0935 c 0.0789,-0.0165 0.14438,-0.0711 0.17506,-0.14563 0.1439,-0.34976 0.22864,-0.72106 0.25067,-1.09859 0.005,-0.0805 -0.0306,-0.15803 -0.0945,-0.20721 l -0.35978,-0.27699 c -0.0243,-0.25176 -0.0809,-0.49952 -0.16825,-0.73693 l 0.20393,-0.40565 c 0.0363,-0.0721 0.0345,-0.15729 -0.004,-0.22766 -0.18372,-0.33066 -0.42125,-0.62843 -0.7026,-0.88106 -0.06,-0.0538 -0.14266,-0.0745 -0.22094,-0.0553 l -0.44098,0.1086 c -0.21195,-0.13793 -0.44084,-0.24812 -0.68091,-0.32798 l -0.19006,-0.41234 c -0.0337,-0.0731 -0.10141,-0.12492 -0.1809,-0.13831 -0.18652,-0.0313 -0.37497,-0.0469 -0.56344,-0.0469 z m 0,1.97723 a 1.3687662,1.3687662 0 0 1 1.36878,1.36878 1.3687662,1.3687662 0 0 1 -1.36878,1.36877 1.3687662,1.3687662 0 0 1 -1.36877,-1.36877 1.3687662,1.3687662 0 0 1 1.36877,-1.36878 z"/> diff --git a/data_from_portwine/themes/compact/style.css b/data_from_portwine/themes/compact/style.css index 2b14121a..05ce1026 100644 --- a/data_from_portwine/themes/compact/style.css +++ b/data_from_portwine/themes/compact/style.css @@ -1,15 +1,68 @@ /*Глобальные правила*/ -arrow {margin: 3px 5px} /*выравнивание стрелок комбобоксов*/ -separator {margin: 0px 0px 0px 0px; background-size:0px; padding-bottom: 0px} /*скрываем сепаратор*/ -check {min-height: 24px; min-width: 24px} /*увеличиваем чекбоксы*/ -cellview,entry {min-height: 26px} /*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ -switch {margin: 5px 10px 0px 10px} /*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ +arrow { + margin: 3px 5px +} + +/*выравнивание стрелок комбобоксов*/ +separator { + margin: 0px 0px 0px 0px; + background-size: 0px; + padding-bottom: 0px +} + +/*скрываем сепаратор*/ +check { + min-height: 24px; + min-width: 24px +} + +/*увеличиваем чекбоксы*/ +cellview, entry { + min-height: 26px +} + +/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ +switch { + margin: 5px 10px 0px 10px +} + +/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ /*Правила для окон*/ -window>box>grid {padding: 5px} /*отступы в расширенных настройках*/ -window>box>box>image {padding: 0px 0px 5px 0px;} /*иконка запуска ярлыка*/ -window>box>box>box>image {margin-top: 5px} /*иконка в создании ярлыка*/ -window>box>box>grid {padding: 0px 5px 5px 0px} /*комбобоксы в запуске ярлыка*/ -window>box>label {background: @theme_selected_bg_color; color: @theme_text_color; margin:3px 0px 3px 0px; padding: 5px} /*текст запуска ярлыка*/ +window > box > grid { + padding: 5px +} -window>box>box>label {background: @theme_selected_bg_color; color: @theme_text_color; margin:3px 0px 0px 0px; padding: 5px} /*текст при создании ярлыка и в настройках*/ +/*отступы в расширенных настройках*/ +window > box > box > image { + padding: 0px 0px 5px 0px; +} + +/*иконка запуска ярлыка*/ +window > box > box > box > image { + margin-top: 5px +} + +/*иконка в создании ярлыка*/ +window > box > box > grid { + padding: 0px 5px 5px 0px +} + +/*комбобоксы в запуске ярлыка*/ +window > box > label { + background: @theme_selected_bg_color; + color: @theme_text_color; + margin: 3px 0px 3px 0px; + padding: 5px +} + +/*текст запуска ярлыка*/ + +window > box > box > label { + background: @theme_selected_bg_color; + color: @theme_text_color; + margin: 3px 0px 0px 0px; + padding: 5px +} + +/*текст при создании ярлыка и в настройках*/ diff --git a/data_from_portwine/themes/default/style.css b/data_from_portwine/themes/default/style.css index e8dfad03..abc10ada 100644 --- a/data_from_portwine/themes/default/style.css +++ b/data_from_portwine/themes/default/style.css @@ -1,12 +1,51 @@ /*Глобальные правила*/ -arrow {margin: 3px 5px} /*выравнивание стрелок комбобоксов*/ -separator {margin: 0px 0px 0px 0px; background-size:0px; padding-bottom: 0px} /*скрываем сепаратор*/ -check {min-height: 24px; min-width: 24px} /*увеличиваем чекбоксы*/ -cellview,entry {min-height: 26px} /*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ -switch {margin: 5px 10px 0px 10px} /*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ +arrow { + margin: 3px 5px +} + +/*выравнивание стрелок комбобоксов*/ +separator { + margin: 0px 0px 0px 0px; + background-size: 0px; + padding-bottom: 0px +} + +/*скрываем сепаратор*/ +check { + min-height: 24px; + min-width: 24px +} + +/*увеличиваем чекбоксы*/ +cellview, entry { + min-height: 26px +} + +/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ +switch { + margin: 5px 10px 0px 10px +} + +/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ /*Правила для окон*/ -window>box>grid {padding: 5px} /*отступы в расширенных настройках*/ -window>box>box>image {padding: 0px 0px 5px 0px;} /*иконка запуска ярлыка*/ -window>box>box>box>image {margin-top: 5px} /*иконка в создании ярлыка*/ -window>box>box>grid {padding: 0px 5px 5px 0px} /*комбобоксы в запуске ярлыка*/ +window > box > grid { + padding: 5px +} + +/*отступы в расширенных настройках*/ +window > box > box > image { + padding: 0px 0px 5px 0px; +} + +/*иконка запуска ярлыка*/ +window > box > box > box > image { + margin-top: 5px +} + +/*иконка в создании ярлыка*/ +window > box > box > grid { + padding: 0px 5px 5px 0px +} + +/*комбобоксы в запуске ярлыка*/ From b94b6f8a264fdb24a23781a4c106deab7b30c165 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 18 Jul 2024 13:48:32 +0300 Subject: [PATCH 02/37] drop EXIT from changelog --- data_from_portwine/scripts/functions_helper | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d7cb1041..60509ec5 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1463,11 +1463,13 @@ pw_port_update () { xcsd=$("${pw_yad}" --title "$(gettext "Update scripts:") v.(${scripts_install_ver}${BRANCH_VERSION})" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --form --separator='%%%' --width=1000 --height=500 \ --field=":TXT" "${CHANGLOG_NEWS}" \ - --button="$(gettext "EXIT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":252 \ --button="$(gettext "DO NOT REMIND ME")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":16 \ --button="$(gettext "REMIND ME LATER")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":18 \ --button="$(gettext "UPDATING NOW")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":20 2>/dev/null) YAD_STATUS="$?" + + # --button="$(gettext "EXIT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":252 \ + case "${YAD_STATUS}" in 1|252) exit 0 ;; 16) xcsd="$(gettext "DO NOT REMIND ME")" ;; From bfbe84301398f02d9e542e34f0d392f1a390cf63 Mon Sep 17 00:00:00 2001 From: Boria138 Date: Tue, 14 May 2024 00:35:48 +0500 Subject: [PATCH 03/37] Added automatic detection and creation of shortcuts --- data_from_portwine/scripts/functions_helper | 93 +++++++++++++++++++ .../scripts/portwine_db/setup.ppdb | 4 - .../scripts/pw_autoinstall/PW_UBC | 1 + data_from_portwine/scripts/start.sh | 2 +- 4 files changed, 95 insertions(+), 5 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d7cb1041..4525435a 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -998,6 +998,41 @@ stop_portwine () { if [[ ! -z "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" ]] ; then kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi + + for prefix_dir in "${PORT_WINE_PATH}"/prefixes/*; do + DESKTOP_DIRS+=( + "${prefix_dir}/drive_c/users/steamuser/Desktop" + "${prefix_dir}/drive_c/users/Public/Desktop" + ) + done + + for dir in "${DESKTOP_DIRS[@]}" ; do + while IFS= read -r -d '' link_file; do + LINKS+=("$link_file") + done < <(find "$dir" -type f -iname "*.lnk" -print0 2>/dev/null | sort -u) + done + + for link_file in "${LINKS[@]}"; do + if command -v exiftool &>/dev/null + link_drive=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') + link_name=$(exiftool -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') + link_cmd=$(exiftool -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') + else + link_drive=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') + link_name=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') + link_cmd=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') + fi + exe_path="$(realpath "$link_path")" + if ! [[ "$(grep -il "${exe_path}" "${PORT_WINE_PATH}"/*.desktop)" ]] || \ + ! [[ "$(grep -il "${exe_path}" "${HOME}/.local/share/applications"/*.desktop)" ]] || \ + ! [[ "$(grep -il "${exe_path}" "$(xdg-user-dir DESKTOP)"/*.desktop)" ]] ; then + create_shortcut_from_link + print_info "Created link for $link_name" + fi + done + add_in_stop_portwine unset SKIP_CHECK_UPDATES exit 0 @@ -1294,6 +1329,62 @@ check_nvidia_rtx () { return 1 } +create_shortcut_from_link(){ + PORTPROTON_NAME="$link_name" + PW_RESIZE_TO=128 + + try_remove_file "${PORT_WINE_PATH}/data/img/setup.png" + try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png" + try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" + try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" + + if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then + if command -v exe-thumbnailer &>/dev/null ; then + exe-thumbnailer -s 128 "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + else + env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ + LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" \ + "${PW_WINELIB}/runtime/files/bin/python3.9" \ + "${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" -s 128 "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + fi + fi + + echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + echo "Name=${PORTPROTON_NAME}" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + if [[ ! -z "$link_cmd" ]] ; then + if check_flatpak + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + fi + else + if check_flatpak + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + fi + fi + { + echo "Type=Application" + echo "Categories=Game" + echo "StartupNotify=true" + echo "Path=${PORT_SCRIPTS_PATH}/" + echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + } >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + chmod u+x "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + + if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then + try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop" + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/.local/share/applications/" + else + if [[ -d "${HOME}/Desktop" ]] ; then + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Desktop/" + elif [[ -d "${HOME}/Рабочий стол" ]] ; then + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Рабочий стол/" + elif [[ $(xdg-user-dir DESKTOP) ]] ; then + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "$(xdg-user-dir DESKTOP)" + fi + fi +} + pw_init_db () { if [[ -f "${portwine_exe}" ]] ; then PORTWINE_DB="$(basename "${portwine_exe}" .exe)" @@ -4622,6 +4713,8 @@ portwine_delete_shortcut () { elif [[ $(xdg-user-dir DESKTOP) ]] ; then rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null fi + rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop"/*.lnk)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop"/*.lnk)" &>/dev/null } portwine_missing_shortcut () { diff --git a/data_from_portwine/scripts/portwine_db/setup.ppdb b/data_from_portwine/scripts/portwine_db/setup.ppdb index 5eef0874..3c4947b0 100644 --- a/data_from_portwine/scripts/portwine_db/setup.ppdb +++ b/data_from_portwine/scripts/portwine_db/setup.ppdb @@ -17,7 +17,3 @@ export PW_FORCE_LARGE_ADDRESS_AWARE=1 # Force Wine to enable the LARGE_ export PW_DLL_INSTALL="" # export WINEDLLOVERRIDES="mscoree,mshtml=" export PW_WINE_USE=WINE_LG - -add_in_stop_portwine () { - pw_find_exe news -} diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_UBC b/data_from_portwine/scripts/pw_autoinstall/PW_UBC index 0ca0c6e6..65fa3125 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_UBC +++ b/data_from_portwine/scripts/pw_autoinstall/PW_UBC @@ -3,6 +3,7 @@ ######################################################################## export LAUNCH_PARAMETERS=("/S" "/D=c:\Program Files (x86)\Ubisoft Game Launcher") export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/UbisoftConnectInstaller.exe" +export PORTWINE_CREATE_SHORTCUT_NAME="Ubisoft Connect" start_portwine if try_download "https://ubistatic3-a.akamaihd.net/orbit/launcher_installer/UbisoftConnectInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror then diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 0bc1d950..c1c376d6 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -172,7 +172,7 @@ then else # shellcheck source=/dev/null source "$PW_GUI_THEMES_PATH/default.pptheme" -echo 'export GUI_THEME="default"' >> "$USER_CONF" + echo 'export GUI_THEME="default"' >> "$USER_CONF" fi # choose branch From e90b8aa2426cb2eef01bb43ffa2774f56d3247e3 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Thu, 18 Jul 2024 16:22:10 +0500 Subject: [PATCH 04/37] apply patch from @Htylol --- data_from_portwine/scripts/functions_helper | 67 +++++++++++++++------ 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 4525435a..8477b3e8 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -999,6 +999,18 @@ stop_portwine () { kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi + for check in ${PORT_WINE_PATH}/*.desktop ; do + SHORTCUT_SKIP_LIST+="$check" + done + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" + if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop" ]] ; then + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk "}" + for skip in ${SHORTCUT_SKIP_LIST} ; do + SHORTCUT_SKIP_LIST_NEW+="-not -name "${skip}" " + done + fi + for prefix_dir in "${PORT_WINE_PATH}"/prefixes/*; do DESKTOP_DIRS+=( "${prefix_dir}/drive_c/users/steamuser/Desktop" @@ -1009,28 +1021,43 @@ stop_portwine () { for dir in "${DESKTOP_DIRS[@]}" ; do while IFS= read -r -d '' link_file; do LINKS+=("$link_file") - done < <(find "$dir" -type f -iname "*.lnk" -print0 2>/dev/null | sort -u) + done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u) done for link_file in "${LINKS[@]}"; do - if command -v exiftool &>/dev/null - link_drive=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') - link_name=$(exiftool -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') - link_cmd=$(exiftool -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') + if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then + prefix_name=$(echo $link_file | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; then + link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + else + link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + fi + link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') + link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + echo $link_path else - link_drive=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') - link_name=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') - link_cmd=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') - fi - exe_path="$(realpath "$link_path")" - if ! [[ "$(grep -il "${exe_path}" "${PORT_WINE_PATH}"/*.desktop)" ]] || \ - ! [[ "$(grep -il "${exe_path}" "${HOME}/.local/share/applications"/*.desktop)" ]] || \ - ! [[ "$(grep -il "${exe_path}" "$(xdg-user-dir DESKTOP)"/*.desktop)" ]] ; then - create_shortcut_from_link - print_info "Created link for $link_name" + if ! command -v exiftool &>/dev/null ; then + print_warning "use portable exiftool" + prefix_name=$(echo $link_file | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" + if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; then + link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + else + link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + fi + link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') + link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + else + yad_error "exiftool - broken!" + fi fi + exe_path="$(realpath "${link_path}")" + create_shortcut_from_link + print_info "Created link for $link_name" done add_in_stop_portwine @@ -1329,7 +1356,7 @@ check_nvidia_rtx () { return 1 } -create_shortcut_from_link(){ +create_shortcut_from_link () { PORTPROTON_NAME="$link_name" PW_RESIZE_TO=128 @@ -1340,12 +1367,12 @@ create_shortcut_from_link(){ if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then if command -v exe-thumbnailer &>/dev/null ; then - exe-thumbnailer -s 128 "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + exe-thumbnailer -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" else env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" \ "${PW_WINELIB}/runtime/files/bin/python3.9" \ - "${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" -s 128 "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + "${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" fi fi From 3b33c4fc9cf8d5c2b5ed02f097577db49a914ce6 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Thu, 18 Jul 2024 17:32:36 +0500 Subject: [PATCH 05/37] fix pw_create_gui_png if selinux mode is enforcing --- data_from_portwine/scripts/functions_helper | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d7cb1041..3838a7bd 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1617,7 +1617,7 @@ pw_create_gui_png () { try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then - if command -v exe-thumbnailer &>/dev/null ; then + if command -v exe-thumbnailer &>/dev/null && [[ ! $(sestatus | grep "Current mode: *enforcing") ]] ; then exe-thumbnailer -s "${PW_RESIZE_TO}" "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" else env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ From 1c1551c29e329c390b08ee7b22ed348abcfb727a Mon Sep 17 00:00:00 2001 From: Kazevic Date: Thu, 18 Jul 2024 14:11:08 -0300 Subject: [PATCH 06/37] Revert changes to installation on Alt Linux --- README-RU.md | 13 ++++++------- README.md | 10 +++++----- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/README-RU.md b/README-RU.md index a01e9348..54f583bb 100755 --- a/README-RU.md +++ b/README-RU.md @@ -45,14 +45,13 @@ * **Alt Linux** -`apt` : - +`apt-get` : ```sh su - -apt update && apt dist-upgrade -y +apt-get update && apt-get dist-upgrade -y -apt install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} +apt-get install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} exit ``` @@ -168,11 +167,11 @@ sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i6 * **Alt Linux** ```sh -sudo apt update +sudo apt-get update -sudo apt dist-upgrade -y +sudo apt-get dist-upgrade -y -sudo apt install bubblewrap cabextract curl icoutils i586-libvulkan1 libvulkan1 vulkan-tools zstd +sudo apt-get install bubblewrap cabextract curl icoutils i586-libvulkan1 libvulkan1 vulkan-tools zstd ``` * **ROSA DESKTOP FRESH R12** diff --git a/README.md b/README.md index 7ae4dd2a..b3b65643 100755 --- a/README.md +++ b/README.md @@ -47,14 +47,14 @@ The **official website of the project** since September 2022 is: https://linux-g * **Alt Linux** (package in the official repository) is installed with the command: -`apt`: +`apt-get`: ```sh su - -apt update && apt dist-upgrade -y +apt-get update && apt-get dist-upgrade -y -apt install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} +apt-get install portproton i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} exit ``` @@ -172,9 +172,9 @@ sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i6 ```sh su - -apt update && apt dist-upgrade -y +apt-get update && apt-get dist-upgrade -y -apt install bubblewrap cabextract zstd gawk tar xz pciutils coreutils file curl icoutils wmctrl xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} +apt-get install bubblewrap cabextract zstd gawk tar xz pciutils coreutils file curl icoutils wmctrl xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} exit ``` From 95f51b9f412b52f4196bc1615871c4b358feb7e1 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Fri, 19 Jul 2024 11:03:35 +0500 Subject: [PATCH 07/37] Fixed auto-mounting of the disk on which PortProton is located --- data_from_portwine/scripts/functions_helper | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d7cb1041..90a73a94 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1259,15 +1259,17 @@ check_dirs_and_files_in_pfx () { then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data" fi - 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)) + rm -fv "${WINEPREFIX}/dosdevices/"*:: + for drive in "${DRIVES[@]}"; do + rm -fv "${WINEPREFIX}/dosdevices/${drive}:" 2>/dev/null + done for drive_dir in "${MOUNT_DIRS[@]}" ; do if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \ - && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep "$drive_dir" &>/dev/null ; then + && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep -w "$drive_dir$" &>/dev/null ; then drive_num=0 while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:" From 18dc83991dcf5791cf0bdc8ca6a38085643e870c Mon Sep 17 00:00:00 2001 From: Htylol Date: Fri, 19 Jul 2024 15:17:15 +0500 Subject: [PATCH 08/37] Added duplicate detection feature --- data_from_portwine/scripts/functions_helper | 88 ++++++++++++++------- 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 8477b3e8..bf4cd7b4 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1000,18 +1000,31 @@ stop_portwine () { fi for check in ${PORT_WINE_PATH}/*.desktop ; do - SHORTCUT_SKIP_LIST+="$check" + if PREFIX_SKIP_LIST="$(grep -A1 '###AUTOCREATE###' "$check")" ; then + SHORTCUT_SKIP_LIST+="${check//"${PORT_WINE_PATH}/"/""}${PREFIX_SKIP_LIST//###AUTOCREATE###[[:space:]]###PREFIX:/"%"}" + fi done - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" - if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop" ]] ; then + + if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop%" ]] ; then SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk "}" - for skip in ${SHORTCUT_SKIP_LIST} ; do - SHORTCUT_SKIP_LIST_NEW+="-not -name "${skip}" " - done + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"###"/" "}" + else + SHORTCUT_SKIP_LIST="" fi - for prefix_dir in "${PORT_WINE_PATH}"/prefixes/*; do + shortcut_fix () { + SHORTCUT_SKIP_LIST_NEW="" + prefix_check=${dir//*prefixes\/} + prefix_check=${prefix_check//\/drive_c*/} + for fix in ${SHORTCUT_SKIP_LIST} ; do + if [[ "${prefix_check}" == ${fix//*%/} ]] ; then + SHORTCUT_SKIP_LIST_NEW+="-not -name "${fix//%*/}" " + fi + done + } + + for prefix_dir in "${PORT_WINE_PATH}"/prefixes/* ; do DESKTOP_DIRS+=( "${prefix_dir}/drive_c/users/steamuser/Desktop" "${prefix_dir}/drive_c/users/Public/Desktop" @@ -1019,6 +1032,7 @@ stop_portwine () { done for dir in "${DESKTOP_DIRS[@]}" ; do + shortcut_fix while IFS= read -r -d '' link_file; do LINKS+=("$link_file") done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u) @@ -1026,8 +1040,8 @@ stop_portwine () { for link_file in "${LINKS[@]}"; do if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then - prefix_name=$(echo $link_file | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') - if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; then + prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; then link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') else @@ -1036,13 +1050,12 @@ stop_portwine () { fi link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") - echo $link_path else if ! command -v exiftool &>/dev/null ; then print_warning "use portable exiftool" - prefix_name=$(echo $link_file | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" - if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; then + if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; then link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') else @@ -1055,9 +1068,17 @@ stop_portwine () { yad_error "exiftool - broken!" fi fi - exe_path="$(realpath "${link_path}")" - create_shortcut_from_link - print_info "Created link for $link_name" + if ! exe_path="$(realpath "${link_path}")" ; then + try_remove_file "$link_file" + print_warning "Removed broken link for $link_name" + else + create_shortcut_from_link + if [[ "${CREATE_WITH_PREFIX}" == "true" ]] ; then + print_info "Created link for $link_name - $prefix_name" + else + print_info "Created link for $link_name" + fi + fi done add_in_stop_portwine @@ -1376,17 +1397,26 @@ create_shortcut_from_link () { fi fi - echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - echo "Name=${PORTPROTON_NAME}" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then + mv -f "${link_file}" "${link_file//".lnk"/" - ${prefix_name}.lnk"}" + PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME} - ${prefix_name}.desktop" + export CREATE_WITH_PREFIX="true" + else + PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + export CREATE_WITH_PREFIX="" + fi + + echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" + echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}" if [[ ! -z "$link_cmd" ]] ; then if check_flatpak - then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PW_NAME_DESKTOP}" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\" \"${link_cmd}\"" >> "${PW_NAME_DESKTOP}" fi else if check_flatpak - then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PW_NAME_DESKTOP}" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\"" >> "${PW_NAME_DESKTOP}" fi fi { @@ -1395,19 +1425,21 @@ create_shortcut_from_link () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" - } >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - chmod u+x "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + echo "###AUTOCREATE###" + echo "###PREFIX:$prefix_name###" + } >> "${PW_NAME_DESKTOP}" + chmod u+x "${PW_NAME_DESKTOP}" if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop" - cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/.local/share/applications/" + cp -f "${PW_NAME_DESKTOP}" "${HOME}/.local/share/applications/" else if [[ -d "${HOME}/Desktop" ]] ; then - cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Desktop/" + cp -f "${PW_NAME_DESKTOP}" "${HOME}/Desktop/" elif [[ -d "${HOME}/Рабочий стол" ]] ; then - cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Рабочий стол/" + cp -f "${PW_NAME_DESKTOP}" "${HOME}/Рабочий стол/" elif [[ $(xdg-user-dir DESKTOP) ]] ; then - cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "$(xdg-user-dir DESKTOP)" + cp -f "${PW_NAME_DESKTOP}" "$(xdg-user-dir DESKTOP)" fi fi } From 04a7c25d114387129c8643d827782d983a2cfd1d Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Fri, 19 Jul 2024 21:49:52 +0500 Subject: [PATCH 09/37] add_in_steam.sh: fix icon --- data_from_portwine/scripts/add_in_steam.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index 2422275f..a5150bd5 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -3,14 +3,14 @@ # based on https://github.com/sonic2kk/steamtinkerlaunch/blob/master/steamtinkerlaunch PROGNAME="PortProton" - +name_desktop_png="${name_desktop// /_}" NOSTAPPNAME="$name_desktop" NOSTEXEPATH="\"${STEAM_SCRIPTS}/${name_desktop}.sh\"" # NOSTSTDIR="\"${PATH_TO_GAME}\"" if [[ -z "${NOSTSTDIR}" ]] ; then NOSTSTDIR="\"${STEAM_SCRIPTS}\"" fi -NOSTICONPATH="${PORT_WINE_PATH}/data/img/${name_desktop}.png" +NOSTICONPATH="${PORT_WINE_PATH}/data/img/$name_desktop_png.png" BASESTEAMGRIDDBAPI="https://www.steamgriddb.com/api/v2" ## How Non-Steam AppIDs work, because it took me almost a year to figure this out From 20bb84e5f054bfe71f77a5b6a16afe7f458b775f Mon Sep 17 00:00:00 2001 From: Htylol Date: Sat, 20 Jul 2024 06:06:32 +0500 Subject: [PATCH 10/37] Fixed gamescope for ru lang --- data_from_portwine/scripts/functions_helper | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d7cb1041..66a7a8e0 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -4369,7 +4369,7 @@ fi old_IFS=$IFS IFS="%" - "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="1" --form --columns=3 --separator=" " --text-align=center --text "$GAMESCOPE_NEED_INSTALL" \ + "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="1" --form --columns=4 --separator=" " --text-align=center --text "$GAMESCOPE_NEED_INSTALL" \ --gui-type-text=${GAMESCOPE_GUI_TYPE_TEXT_UP} --gui-type-layout=${GAMESCOPE_GUI_TYPE_LAYOUT_UP} $YAD_TEXT_SELECTION \ ${ADD_CHK_BOX_GS} \ 1> "${PW_TMPFS_PATH}/tmp_yad_gs_set" 2>/dev/null & @@ -4377,7 +4377,7 @@ fi GAMESCOPE_XRANDR="$(grep -e '[0-9]x' "${PW_TMPFS_PATH}/xrandr.tmp" | awk '{print $1}' | sort -rVu | grep "^[1-2]" | tr '\n' '!' | sed 's/.$//')" - "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="2" --form --columns=3 --separator="%" --homogeneous-row \ + "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="2" --form --columns=2 --separator="%" --homogeneous-row \ --gui-type-text=${GAMESCOPE_GUI_TYPE_TEXT_DOWN} --gui-type-layout=${GAMESCOPE_GUI_TYPE_LAYOUT_DOWN} \ --field="${CHKBOX_SPACE}$(gettext "Show resolution")!$(gettext "Set the resolution used by gamescope. Resizing the gamescope window will update these settings. Defaults to 1280x720.") :${GS_CBE}" "$(combobox_fix_disabled "${PW_GS_SHOW_RESOLUTION}" "${GAMESCOPE_XRANDR}")" \ --field="${CHKBOX_SPACE}$(gettext "Internal resolution")!$(gettext "Scale internal resolution (0.0 is unused)") :${GS_NUMN}" "${PW_GS_INTERNAL_RESOLUTION}:!0..2" \ From 13f288984085137a573c58a4784445ccb35b60dd Mon Sep 17 00:00:00 2001 From: Htylol Date: Fri, 19 Jul 2024 20:35:21 +0500 Subject: [PATCH 11/37] Optimization and fixed remove lnk, added dublicate dir --- data_from_portwine/scripts/functions_helper | 69 +++++++++++++-------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index bf4cd7b4..9bf80a18 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -999,18 +999,25 @@ stop_portwine () { kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi - for check in ${PORT_WINE_PATH}/*.desktop ; do - if PREFIX_SKIP_LIST="$(grep -A1 '###AUTOCREATE###' "$check")" ; then - SHORTCUT_SKIP_LIST+="${check//"${PORT_WINE_PATH}/"/""}${PREFIX_SKIP_LIST//###AUTOCREATE###[[:space:]]###PREFIX:/"%"}" - fi - done + SHORTCUT_SKIP_LIST="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop%" ]] ; then + if [[ ${SHORTCUT_SKIP_LIST} == "" ]] ; then + export DESKTOP_LIST_EMPTY="1" + elif [[ ${SHORTCUT_SKIP_LIST} == '###PREFIX:'* ]] ; then + SHORTCUT_SKIP_LIST="$(grep -il '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" + SHORTCUT_SKIP_LIST+="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###PREFIX:/"%"}" SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###/""}" SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"###"/" "}" else - SHORTCUT_SKIP_LIST="" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//:###PREFIX:/"%"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//[[:space:]]/" "}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###/""}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" fi shortcut_fix () { @@ -1070,13 +1077,13 @@ stop_portwine () { fi if ! exe_path="$(realpath "${link_path}")" ; then try_remove_file "$link_file" - print_warning "Removed broken link for $link_name" + print_warning "Removed broken link for: $link_name" else create_shortcut_from_link - if [[ "${CREATE_WITH_PREFIX}" == "true" ]] ; then - print_info "Created link for $link_name - $prefix_name" + if [[ "${SHORTCUT_DUBLICATE}" == "true" ]] ; then + print_info "Created link for dublicate: $link_name - $prefix_name" else - print_info "Created link for $link_name" + print_info "Created link for: $link_name" fi fi done @@ -1397,13 +1404,15 @@ create_shortcut_from_link () { fi fi - if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then - mv -f "${link_file}" "${link_file//".lnk"/" - ${prefix_name}.lnk"}" - PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME} - ${prefix_name}.desktop" - export CREATE_WITH_PREFIX="true" + if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] \ + && [[ "$DESKTOP_LIST_EMPTY" != "1" ]] ; then + rm -f "${link_file}" + create_new_dir "${PORT_WINE_PATH}/dublicate" + PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name}.desktop" + export SHORTCUT_DUBLICATE="true" else PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - export CREATE_WITH_PREFIX="" + export SHORTCUT_DUBLICATE="" fi echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" @@ -1425,8 +1434,7 @@ create_shortcut_from_link () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" - echo "###AUTOCREATE###" - echo "###PREFIX:$prefix_name###" + echo "###PREFIX:${prefix_name}###" } >> "${PW_NAME_DESKTOP}" chmod u+x "${PW_NAME_DESKTOP}" @@ -4699,6 +4707,7 @@ portwine_create_shortcut () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" + echo "###PREFIX:${PW_PREFIX_NAME}###" } >> "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" @@ -4762,18 +4771,24 @@ portwine_create_shortcut () { } 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 + rm_helper="$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop 2>/dev/null)" + rm_helper="${rm_helper//"${PORT_WINE_PATH}/"/""}" + rm_helper="${rm_helper//".desktop"/""}" + rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop/${rm_helper}.lnk" + rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop/${rm_helper}.lnk" + + # rm -f "${STEAM_SCRIPTS}/${rm_helper}.sh" + + rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" + rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" + if [[ -d "${HOME}/Desktop" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" elif [[ -d "${HOME}/Рабочий стол" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" elif [[ $(xdg-user-dir DESKTOP) ]] ; then - rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" fi - rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop"/*.lnk)" &>/dev/null - rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop"/*.lnk)" &>/dev/null } portwine_missing_shortcut () { From 42dfd9c8d32acce846d6ef0e8da3b46edcbd980a Mon Sep 17 00:00:00 2001 From: Htylol Date: Sat, 20 Jul 2024 03:29:03 +0500 Subject: [PATCH 12/37] Added gui for dublicate shortcuts, drop skip --- data_from_portwine/scripts/functions_helper | 154 ++++++++++---------- data_from_portwine/scripts/start.sh | 6 +- data_from_portwine/themes/classic.pptheme | 3 + data_from_portwine/themes/compact.pptheme | 7 +- data_from_portwine/themes/default.pptheme | 6 +- 5 files changed, 97 insertions(+), 79 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 9bf80a18..6a189858 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -999,38 +999,6 @@ stop_portwine () { kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi - SHORTCUT_SKIP_LIST="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - - if [[ ${SHORTCUT_SKIP_LIST} == "" ]] ; then - export DESKTOP_LIST_EMPTY="1" - elif [[ ${SHORTCUT_SKIP_LIST} == '###PREFIX:'* ]] ; then - SHORTCUT_SKIP_LIST="$(grep -il '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - SHORTCUT_SKIP_LIST+="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###PREFIX:/"%"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" - else - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//:###PREFIX:/"%"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//[[:space:]]/" "}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" - fi - - shortcut_fix () { - SHORTCUT_SKIP_LIST_NEW="" - prefix_check=${dir//*prefixes\/} - prefix_check=${prefix_check//\/drive_c*/} - for fix in ${SHORTCUT_SKIP_LIST} ; do - if [[ "${prefix_check}" == ${fix//*%/} ]] ; then - SHORTCUT_SKIP_LIST_NEW+="-not -name "${fix//%*/}" " - fi - done - } - for prefix_dir in "${PORT_WINE_PATH}"/prefixes/* ; do DESKTOP_DIRS+=( "${prefix_dir}/drive_c/users/steamuser/Desktop" @@ -1039,7 +1007,6 @@ stop_portwine () { done for dir in "${DESKTOP_DIRS[@]}" ; do - shortcut_fix while IFS= read -r -d '' link_file; do LINKS+=("$link_file") done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u) @@ -1404,9 +1371,7 @@ create_shortcut_from_link () { fi fi - if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] \ - && [[ "$DESKTOP_LIST_EMPTY" != "1" ]] ; then - rm -f "${link_file}" + if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then create_new_dir "${PORT_WINE_PATH}/dublicate" PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name}.desktop" export SHORTCUT_DUBLICATE="true" @@ -1414,6 +1379,7 @@ create_shortcut_from_link () { PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" export SHORTCUT_DUBLICATE="" fi + rm -f "${link_file}" echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}" @@ -1434,20 +1400,23 @@ create_shortcut_from_link () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" - echo "###PREFIX:${prefix_name}###" } >> "${PW_NAME_DESKTOP}" chmod u+x "${PW_NAME_DESKTOP}" + [[ -z "${PW_SHORTCUT_DESKTOP}" ]] && PW_SHORTCUT_DESKTOP="TRUE" + if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop" cp -f "${PW_NAME_DESKTOP}" "${HOME}/.local/share/applications/" else - if [[ -d "${HOME}/Desktop" ]] ; then - cp -f "${PW_NAME_DESKTOP}" "${HOME}/Desktop/" - elif [[ -d "${HOME}/Рабочий стол" ]] ; then - cp -f "${PW_NAME_DESKTOP}" "${HOME}/Рабочий стол/" - elif [[ $(xdg-user-dir DESKTOP) ]] ; then - cp -f "${PW_NAME_DESKTOP}" "$(xdg-user-dir DESKTOP)" + if [[ ${PW_SHORTCUT_DESKTOP} == "TRUE" ]] ; then + if [[ -d "${HOME}/Desktop" ]] ; then + cp -f "${PW_NAME_DESKTOP}" "${HOME}/Desktop/" + elif [[ -d "${HOME}/Рабочий стол" ]] ; then + cp -f "${PW_NAME_DESKTOP}" "${HOME}/Рабочий стол/" + elif [[ $(xdg-user-dir DESKTOP) ]] ; then + cp -f "${PW_NAME_DESKTOP}" "$(xdg-user-dir DESKTOP)" + fi fi fi } @@ -1840,6 +1809,45 @@ pw_find_exe () { fi } +pw_dublicate () { + orig_IFS="$IFS" && IFS=$'\n' + PW_DUBLICATE="$(ls "${PORT_WINE_PATH}"/dublicate/ | grep .desktop)" + for PW_DUBLICATE_FILES_D in ${PW_DUBLICATE} ; do + PW_NAME_D_ICON_D="$(grep Icon "${PORT_WINE_PATH}/dublicate/${PW_DUBLICATE_FILES_D}" | awk -F= '{print $2}')" + PW_NAME_D_ICON_48_D="${PW_NAME_D_ICON_D//".png"/"_48.png"}" + if [[ ! -f "${PW_NAME_D_ICON_48_D}" ]] \ + && [[ -f "${PW_NAME_D_ICON_D}" ]] \ + && command -v "convert" 2>/dev/null + then + convert "${PW_NAME_D_ICON_D}" -resize 48x48 "${PW_NAME_D_ICON_48_D}" + fi + PW_DUBLICATE_HELPER_D="${PW_DUBLICATE_FILES_D// /@_@}" + PW_GENERATE_BUTTONS_D+="--field= ${PW_DUBLICATE_FILES_D//".desktop"/""}!${PW_NAME_D_ICON_48_D}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DUBLICATE_HELPER_D}"\"%" + done + + export USE_DUBLICATE_GUI="1" + + IFS="$orig_IFS" + old_IFS=$IFS && IFS="%" + GUI_DUBLICATE="$("${pw_yad}" --width="${PW_DUBLICATE_SIZE_W}" --height="${PW_DUBLICATE_SIZE_H}" \ + --columns="$MAIN_GUI_COLUMNS" --homogeneous-column --form \ + --gui-type-layout=${MAIN_MENU_GUI_TYPE_LAYOUT} \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ + --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} 2>/dev/null)" + YAD_STATUS="$?" + IFS="$orig_IFS" + + if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then + exit 0 + fi + + pw_yad_set_form + [[ ! -z "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in + *.desktop) run_desktop_b_click ;; + esac +} + pw_create_unique_exe () { BASEDIR_GAME="$(dirname "$portwine_exe")" if [[ -d "$BASEDIR_GAME" ]] ; then @@ -4679,13 +4687,9 @@ portwine_create_shortcut () { fi name_desktop="$(echo "${name_desktop}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g")" name_desktop_png="${name_desktop// /_}" - create_menu_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $2}') - create_desktop_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $3}') - create_menu_steam_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $4}') - - PW_SHORTCUT_MENU="$create_menu_desktop_shortcut" - PW_SHORTCUT_DESKTOP="$create_desktop_desktop_shortcut" - PW_SHORTCUT_STEAM="$create_menu_steam_shortcut" + PW_SHORTCUT_MENU=$(echo "$OUTPUT" | awk -F'|' '{print $2}') + PW_SHORTCUT_DESKTOP=$(echo "$OUTPUT" | awk -F'|' '{print $3}') + PW_SHORTCUT_STEAM=$(echo "$OUTPUT" | awk -F'|' '{print $4}') edit_user_conf_from_gui PW_SHORTCUT_MENU PW_SHORTCUT_DESKTOP PW_SHORTCUT_STEAM @@ -4707,16 +4711,15 @@ portwine_create_shortcut () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" - echo "###PREFIX:${PW_PREFIX_NAME}###" } >> "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" - if [[ "${create_menu_desktop_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_MENU}" == "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 [[ "${PW_SHORTCUT_DESKTOP}" == "TRUE" ]] ; then if [[ -d "${HOME}/Desktop" ]] ; then cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/Desktop/" elif [[ -d "${HOME}/Рабочий стол" ]] ; then @@ -4726,7 +4729,7 @@ portwine_create_shortcut () { fi fi - if [[ "${create_menu_steam_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_STEAM}" == "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" @@ -4771,23 +4774,15 @@ portwine_create_shortcut () { } portwine_delete_shortcut () { - rm_helper="$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop 2>/dev/null)" - rm_helper="${rm_helper//"${PORT_WINE_PATH}/"/""}" - rm_helper="${rm_helper//".desktop"/""}" - rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop/${rm_helper}.lnk" - rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop/${rm_helper}.lnk" - - # rm -f "${STEAM_SCRIPTS}/${rm_helper}.sh" - - rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" - rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" - + 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)" + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null elif [[ -d "${HOME}/Рабочий стол" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" + 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)" + rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null fi } @@ -5196,13 +5191,22 @@ export -f button_click_start run_desktop_b_click () { [[ ! -z "$1" ]] && echo "$1" > "${PW_TMPFS_PATH}/tmp_yad_form" - if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then - kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY} \--notebook" | awk '{print $1}') > /dev/null 2>&1 - fi - - if check_flatpak - then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" - else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + if [[ "${USE_DUBLICATE_GUI}" == "1" ]] ; then + if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then + kill -s SIGUSR1 $(pgrep -a yad | grep "\--width="${PW_DUBLICATE_SIZE_W}" \--height="${PW_DUBLICATE_SIZE_H}"" | awk '{print $1}') > /dev/null 2>&1 + fi + if check_flatpak + then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/dublicate/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" + else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/dublicate/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + fi + else + if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then + kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY} \--notebook" | awk '{print $1}') > /dev/null 2>&1 + fi + if check_flatpak + then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" + else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + fi fi print_info "Restarting PP after choose desktop file..." diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index c1c376d6..c7d717da 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -87,7 +87,7 @@ unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_T 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 unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR -unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR +unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR USE_DUBLICATE_GUI export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* @@ -629,6 +629,9 @@ else else PW_GUI_SORT_TABS=(2 3 4 5 1) fi PW_GENERATE_BUTTONS="--field= $(gettext "Create shortcut...")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_find_exe\"%" + if grep -i "[Desktop Entry]" "${PORT_WINE_PATH}/dublicate"/* &>/dev/null ; then + PW_GENERATE_BUTTONS+="--field= $(gettext "Dublicate")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_dublicate\"%" + fi for PW_DESKTOP_FILES in ${PW_ALL_DF} ; do PW_NAME_D_ICON="$(grep Icon "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F= '{print $2}')" PW_NAME_D_ICON_48="${PW_NAME_D_ICON//".png"/"_48.png"}" @@ -837,6 +840,7 @@ fi gui_credits) gui_credits ;; pw_start_cont_xterm) pw_start_cont_xterm ;; pw_find_exe) pw_find_exe ;; + pw_dublicate) pw_dublicate ;; PW_*) pw_autoinstall_from_db ;; *.desktop) run_desktop_b_click ;; 1|252|*) exit 0 ;; diff --git a/data_from_portwine/themes/classic.pptheme b/data_from_portwine/themes/classic.pptheme index 23caed23..67eeb325 100755 --- a/data_from_portwine/themes/classic.pptheme +++ b/data_from_portwine/themes/classic.pptheme @@ -23,6 +23,9 @@ export TAB_SIZE=28 export PW_MAIN_SIZE_W=1100 export PW_MAIN_SIZE_H=350 +export PW_DUBLICATE_SIZE_W=800 +export PW_DUBLICATE_SIZE_H=350 + export PW_START_SIZE_W=600 export PW_START_SIZE_H=350 export PW_TAB_POSITON=top diff --git a/data_from_portwine/themes/compact.pptheme b/data_from_portwine/themes/compact.pptheme index 8e627df3..a0349ba0 100755 --- a/data_from_portwine/themes/compact.pptheme +++ b/data_from_portwine/themes/compact.pptheme @@ -24,10 +24,13 @@ export BUTTON_SIZE=32 # 24, 28, 32, 36, 40 export TAB_SIZE=32 # 24, 28, 32, 36, 40 -export PW_MAIN_SIZE_W=1 +export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=350 -export PW_START_SIZE_W=1 +export PW_DUBLICATE_SIZE_W=800 +export PW_DUBLICATE_SIZE_H=350 + +export PW_START_SIZE_W=500 export PW_START_SIZE_H=350 export PW_TAB_POSITON=top diff --git a/data_from_portwine/themes/default.pptheme b/data_from_portwine/themes/default.pptheme index 3ee636d8..14b04849 100755 --- a/data_from_portwine/themes/default.pptheme +++ b/data_from_portwine/themes/default.pptheme @@ -31,9 +31,13 @@ export BUTTON_SIZE=28 # 24, 28, 32, 36, 40 export TAB_SIZE=32 # 24, 28, 32, 36, 40 # размер главного меню -export PW_MAIN_SIZE_W=1 +export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=330 +# размер окна для дубликатов +export PW_DUBLICATE_SIZE_W=800 +export PW_DUBLICATE_SIZE_H=330 + # размер меню запуска и положения табов export PW_START_SIZE_W=800 export PW_START_SIZE_H=330 From c08f0142abf4a7d378b73c4940e2f2d0294bae69 Mon Sep 17 00:00:00 2001 From: Htylol Date: Sat, 20 Jul 2024 16:41:41 +0500 Subject: [PATCH 13/37] Added numbering for duplicates and determining their uniqueness --- data_from_portwine/scripts/functions_helper | 29 ++++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 6a189858..56e6bde6 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1009,7 +1009,7 @@ stop_portwine () { for dir in "${DESKTOP_DIRS[@]}" ; do while IFS= read -r -d '' link_file; do LINKS+=("$link_file") - done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u) + done < <(find "$dir" -type f -iname "*.lnk" -print0 2>/dev/null | sort -u) done for link_file in "${LINKS[@]}"; do @@ -1048,7 +1048,7 @@ stop_portwine () { else create_shortcut_from_link if [[ "${SHORTCUT_DUBLICATE}" == "true" ]] ; then - print_info "Created link for dublicate: $link_name - $prefix_name" + print_info "Created link for dublicate: $link_name - $prefix_name [$number_dublication]" else print_info "Created link for: $link_name" fi @@ -1371,15 +1371,30 @@ create_shortcut_from_link () { fi fi + rm -f "${link_file}" if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then - create_new_dir "${PORT_WINE_PATH}/dublicate" - PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name}.desktop" - export SHORTCUT_DUBLICATE="true" + if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" &>/dev/null ; then + create_new_dir "${PORT_WINE_PATH}/dublicate" + SHORTCUT_DUBLICATE="true" + number_dublication="1" + if [[ -f "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" ]] ; then + number_dublication="$(ls "${PORT_WINE_PATH}/dublicate"/ 2>/dev/null)" + number_dublication="${number_dublication//*[/}" + number_dublication="${number_dublication//]*/}" + if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" &>/dev/null ; then + number_dublication="$(($number_dublication+1))" + else + exit 0 + fi + fi + PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" + else + exit 0 + fi else PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - export SHORTCUT_DUBLICATE="" + SHORTCUT_DUBLICATE="" fi - rm -f "${link_file}" echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}" From 2633d813dcb99518c53fda0661283e6868461dd6 Mon Sep 17 00:00:00 2001 From: Htylol Date: Sat, 20 Jul 2024 16:57:38 +0500 Subject: [PATCH 14/37] Title correction, added new --- data_from_portwine/scripts/functions_helper | 90 +++++++++++++-------- data_from_portwine/scripts/start.sh | 8 +- data_from_portwine/themes/classic.pptheme | 4 +- data_from_portwine/themes/compact.pptheme | 4 +- data_from_portwine/themes/default.pptheme | 4 +- 5 files changed, 65 insertions(+), 45 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 56e6bde6..a45e34de 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1047,8 +1047,8 @@ stop_portwine () { print_warning "Removed broken link for: $link_name" else create_shortcut_from_link - if [[ "${SHORTCUT_DUBLICATE}" == "true" ]] ; then - print_info "Created link for dublicate: $link_name - $prefix_name [$number_dublication]" + if [[ "${SHORTCUT_DUPLICATE}" == "true" ]] ; then + print_info "Created link for duplicate: $link_name - $prefix_name [$number_duplication]" else print_info "Created link for: $link_name" fi @@ -1361,7 +1361,7 @@ create_shortcut_from_link () { try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then - if command -v exe-thumbnailer &>/dev/null ; then + if command -v exe-thumbnailer &>/dev/null && [[ ! $(sestatus | grep "Current mode: *enforcing" &>/dev/null) ]] ; then exe-thumbnailer -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" else env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ @@ -1374,26 +1374,48 @@ create_shortcut_from_link () { rm -f "${link_file}" if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" &>/dev/null ; then - create_new_dir "${PORT_WINE_PATH}/dublicate" - SHORTCUT_DUBLICATE="true" - number_dublication="1" - if [[ -f "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" ]] ; then - number_dublication="$(ls "${PORT_WINE_PATH}/dublicate"/ 2>/dev/null)" - number_dublication="${number_dublication//*[/}" - number_dublication="${number_dublication//]*/}" - if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" &>/dev/null ; then - number_dublication="$(($number_dublication+1))" + create_new_dir "${PORT_WINE_PATH}/duplicate" + if [[ "$(ls -A "${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name}"* 2>/dev/null)" ]] ; then + if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name}"* &>/dev/null ; then + number_duplication="$(ls "${PORT_WINE_PATH}/duplicate"/ 2>/dev/null)" + number_duplication="${number_duplication//${PORTPROTON_NAME} - ${prefix_name}/}" + number_duplication="${number_duplication//].desktop/}" + number_duplication=(${number_duplication//[/}) + dup_prev="0" + for dup_num in ${number_duplication[@]} ; do + dup_num_list="$(("$dup_num" - 1))" + if [[ "$dup_num_list" != "$dup_prev" ]] ; then + dup_num_list_new+="$dup_num_list " + fi + dup_prev="$dup_num" + done + + if [[ -z "$dup_num_list_new" ]] ; then + number_duplication="${dup_prev}" + else + dup_helper="$(echo ${dup_num_list_new} | awk '{print $1}')" + for dup in ${number_duplication[@]} ; do + if (( "$dup_helper" > "$dup" )) ; then + dup_helper_new+="$dup " + fi + done + number_duplication="$(echo ${dup_helper_new} | awk '{print $NF}')" + fi + number_duplication="$(("$number_duplication" + 1))" else exit 0 fi + else + number_duplication="1" fi - PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" + PW_NAME_DESKTOP="${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name} [$number_duplication].desktop" + SHORTCUT_DUPLICATE="true" else exit 0 fi else PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - SHORTCUT_DUBLICATE="" + SHORTCUT_DUPLICATE="" fi echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" @@ -1824,11 +1846,12 @@ pw_find_exe () { fi } -pw_dublicate () { +pw_duplicate () { + export USE_DUPLICATE_GUI="1" orig_IFS="$IFS" && IFS=$'\n' - PW_DUBLICATE="$(ls "${PORT_WINE_PATH}"/dublicate/ | grep .desktop)" - for PW_DUBLICATE_FILES_D in ${PW_DUBLICATE} ; do - PW_NAME_D_ICON_D="$(grep Icon "${PORT_WINE_PATH}/dublicate/${PW_DUBLICATE_FILES_D}" | awk -F= '{print $2}')" + PW_DESKTOP_D="$(ls "${PORT_WINE_PATH}"/duplicate/ | grep .desktop)" + for PW_DESKTOP_FILES_D in ${PW_DESKTOP_D} ; do + PW_NAME_D_ICON_D="$(grep Icon "${PORT_WINE_PATH}/duplicate/${PW_DESKTOP_FILES_D}" | awk -F= '{print $2}')" PW_NAME_D_ICON_48_D="${PW_NAME_D_ICON_D//".png"/"_48.png"}" if [[ ! -f "${PW_NAME_D_ICON_48_D}" ]] \ && [[ -f "${PW_NAME_D_ICON_D}" ]] \ @@ -1836,31 +1859,27 @@ pw_dublicate () { then convert "${PW_NAME_D_ICON_D}" -resize 48x48 "${PW_NAME_D_ICON_48_D}" fi - PW_DUBLICATE_HELPER_D="${PW_DUBLICATE_FILES_D// /@_@}" - PW_GENERATE_BUTTONS_D+="--field= ${PW_DUBLICATE_FILES_D//".desktop"/""}!${PW_NAME_D_ICON_48_D}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DUBLICATE_HELPER_D}"\"%" + PW_DESKTOP_HELPER_D="${PW_DESKTOP_FILES_D// /@_@}" + PW_GENERATE_BUTTONS_D+="--field= ${PW_DESKTOP_FILES_D//".desktop"/""}!${PW_NAME_D_ICON_48_D}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DESKTOP_HELPER_D}"\"%" done - - export USE_DUBLICATE_GUI="1" - IFS="$orig_IFS" + old_IFS=$IFS && IFS="%" - GUI_DUBLICATE="$("${pw_yad}" --width="${PW_DUBLICATE_SIZE_W}" --height="${PW_DUBLICATE_SIZE_H}" \ + PW_DUPLICATE_GUI="$("${pw_yad}" --width="${PW_DUPLICATE_SIZE_W}" --height="${PW_DUPLICATE_SIZE_H}" \ --columns="$MAIN_GUI_COLUMNS" --homogeneous-column --form \ --gui-type-layout=${MAIN_MENU_GUI_TYPE_LAYOUT} \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} 2>/dev/null)" - YAD_STATUS="$?" IFS="$orig_IFS" + YAD_STATUS="$?" - if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then - exit 0 - fi + if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi pw_yad_set_form - [[ ! -z "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in - *.desktop) run_desktop_b_click ;; - esac + if [[ "$PW_YAD_SET" == *.desktop ]] ; then + run_desktop_b_click + fi } pw_create_unique_exe () { @@ -4791,6 +4810,7 @@ portwine_create_shortcut () { 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}" "${PORT_WINE_PATH}/duplicate"/*.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 @@ -5206,13 +5226,13 @@ export -f button_click_start run_desktop_b_click () { [[ ! -z "$1" ]] && echo "$1" > "${PW_TMPFS_PATH}/tmp_yad_form" - if [[ "${USE_DUBLICATE_GUI}" == "1" ]] ; then + if [[ "${USE_DUPLICATE_GUI}" == "1" ]] ; then if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then - kill -s SIGUSR1 $(pgrep -a yad | grep "\--width="${PW_DUBLICATE_SIZE_W}" \--height="${PW_DUBLICATE_SIZE_H}"" | awk '{print $1}') > /dev/null 2>&1 + kill -s SIGUSR1 $(pgrep -a yad | grep "\--width="${PW_DUPLICATE_SIZE_W}" \--height="${PW_DUPLICATE_SIZE_H}"" | awk '{print $1}') > /dev/null 2>&1 fi if check_flatpak - then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/dublicate/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" - else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/dublicate/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/duplicate/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" + else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/duplicate/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" fi else if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index c7d717da..37cd44d2 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -87,7 +87,7 @@ unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_T 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 unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR -unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR USE_DUBLICATE_GUI +unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR USE_DUPLICATE_GUI export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* @@ -629,8 +629,8 @@ else else PW_GUI_SORT_TABS=(2 3 4 5 1) fi PW_GENERATE_BUTTONS="--field= $(gettext "Create shortcut...")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_find_exe\"%" - if grep -i "[Desktop Entry]" "${PORT_WINE_PATH}/dublicate"/* &>/dev/null ; then - PW_GENERATE_BUTTONS+="--field= $(gettext "Dublicate")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_dublicate\"%" + if grep -i "[Desktop Entry]" "${PORT_WINE_PATH}/duplicate"/* &>/dev/null ; then + PW_GENERATE_BUTTONS+="--field= $(gettext "Duplicates")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_duplicate\"%" fi for PW_DESKTOP_FILES in ${PW_ALL_DF} ; do PW_NAME_D_ICON="$(grep Icon "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F= '{print $2}')" @@ -840,7 +840,7 @@ fi gui_credits) gui_credits ;; pw_start_cont_xterm) pw_start_cont_xterm ;; pw_find_exe) pw_find_exe ;; - pw_dublicate) pw_dublicate ;; + pw_duplicate) pw_duplicate ;; PW_*) pw_autoinstall_from_db ;; *.desktop) run_desktop_b_click ;; 1|252|*) exit 0 ;; diff --git a/data_from_portwine/themes/classic.pptheme b/data_from_portwine/themes/classic.pptheme index 67eeb325..93af8e2a 100755 --- a/data_from_portwine/themes/classic.pptheme +++ b/data_from_portwine/themes/classic.pptheme @@ -23,8 +23,8 @@ export TAB_SIZE=28 export PW_MAIN_SIZE_W=1100 export PW_MAIN_SIZE_H=350 -export PW_DUBLICATE_SIZE_W=800 -export PW_DUBLICATE_SIZE_H=350 +export PW_DUPLICATE_SIZE_W=1100 +export PW_DUPLICATE_SIZE_H=350 export PW_START_SIZE_W=600 export PW_START_SIZE_H=350 diff --git a/data_from_portwine/themes/compact.pptheme b/data_from_portwine/themes/compact.pptheme index a0349ba0..6638dda1 100755 --- a/data_from_portwine/themes/compact.pptheme +++ b/data_from_portwine/themes/compact.pptheme @@ -27,8 +27,8 @@ export TAB_SIZE=32 # 24, 28, 32, 36, 40 export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=350 -export PW_DUBLICATE_SIZE_W=800 -export PW_DUBLICATE_SIZE_H=350 +export PW_DUPLICATE_SIZE_W=1000 +export PW_DUPLICATE_SIZE_H=350 export PW_START_SIZE_W=500 export PW_START_SIZE_H=350 diff --git a/data_from_portwine/themes/default.pptheme b/data_from_portwine/themes/default.pptheme index 14b04849..b1c61c61 100755 --- a/data_from_portwine/themes/default.pptheme +++ b/data_from_portwine/themes/default.pptheme @@ -35,8 +35,8 @@ export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=330 # размер окна для дубликатов -export PW_DUBLICATE_SIZE_W=800 -export PW_DUBLICATE_SIZE_H=330 +export PW_DUPLICATE_SIZE_W=1000 +export PW_DUPLICATE_SIZE_H=330 # размер меню запуска и положения табов export PW_START_SIZE_W=800 From 9ffaf72a02699e00d44b072f43dfd3cb64ac2cac Mon Sep 17 00:00:00 2001 From: Htylol Date: Sun, 21 Jul 2024 16:51:32 +0500 Subject: [PATCH 15/37] Fixed pw_find_exe and change_locale --- data_from_portwine/scripts/functions_helper | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d7cb1041..bb389931 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -50,8 +50,7 @@ change_locale () { echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc" fi - if [[ ! -z "${LANGUAGE}" ]] \ - && [[ ! -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] + if [[ ! -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] then [[ ! -f "${pw_yad}" ]] && pw_yad="yad" SET_LANG=( @@ -472,7 +471,7 @@ unpack () { if [[ "$silent" != "true" ]] ; then set -o pipefail pw_start_progress_bar_cover_block "${COVERS_PATH}/unpacking_${LANGUAGE_GIF}.gif" - $command "$1" -C "$2" + $command "$1" -C "$2" 2>/dev/null pw_stop_progress_bar_cover_block [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0 else @@ -1648,6 +1647,7 @@ pw_find_exe () { pw_start_progress_bar_block "$(gettext "Searching for .exe files... Please wait.")" find "${PW_PATH_FOR_FIND}" -type f -name '*.exe' ${PW_FIND_TIME} | grep -viE ${PW_EXCLUDE_EXE_FIND} | \ awk -F"/prefixes/" '{print $2}' > "${PW_TMPFS_PATH}/tmp_yad_find_exe" + sleep 0.001 pw_stop_progress_bar unset FIND_TO_GUI @@ -3174,6 +3174,8 @@ pw_stop_progress_bar () { do kill -s SIGUSR1 "$PW_KILL_YAD_PID" &>/dev/null done + unset PW_YAD_PID_PROGRESS_BAR_BLOCK PW_YAD_PID_PROGRESS_BAR_CS \ + PW_YAD_PID_PFX_COVER_UI PW_YAD_PID_PROGRESS_BAR_COVER return 0 } export -f pw_stop_progress_bar From 59e95078c5a58f8248f68d24a4d8fff00de6cc21 Mon Sep 17 00:00:00 2001 From: Htylol Date: Sun, 21 Jul 2024 19:11:49 +0500 Subject: [PATCH 16/37] Fixed for Icon File Name --- data_from_portwine/scripts/functions_helper | 30 +++++++++++++-------- data_from_portwine/scripts/start.sh | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index a45e34de..48e1fd36 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1015,7 +1015,8 @@ stop_portwine () { for link_file in "${LINKS[@]}"; do if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') - if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; then + if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ + && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') else @@ -1027,9 +1028,10 @@ stop_portwine () { else if ! command -v exiftool &>/dev/null ; then print_warning "use portable exiftool" - prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" - if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; then + prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ + && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') else @@ -1865,21 +1867,27 @@ pw_duplicate () { IFS="$orig_IFS" old_IFS=$IFS && IFS="%" - PW_DUPLICATE_GUI="$("${pw_yad}" --width="${PW_DUPLICATE_SIZE_W}" --height="${PW_DUPLICATE_SIZE_H}" \ + "${pw_yad}" --width="${PW_DUPLICATE_SIZE_W}" --height="${PW_DUPLICATE_SIZE_H}" \ --columns="$MAIN_GUI_COLUMNS" --homogeneous-column --form \ --gui-type-layout=${MAIN_MENU_GUI_TYPE_LAYOUT} \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ - --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} 2>/dev/null)" + --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} \ + --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null IFS="$orig_IFS" - YAD_STATUS="$?" - - if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi pw_yad_set_form - if [[ "$PW_YAD_SET" == *.desktop ]] ; then - run_desktop_b_click - fi + [[ ! -z "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in + *.desktop) + run_desktop_b_click + ;; + pw_duplicate) + export SKIP_CHECK_UPDATES=1 + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; + esac } pw_create_unique_exe () { diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 37cd44d2..6ddceb70 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -630,7 +630,7 @@ else fi PW_GENERATE_BUTTONS="--field= $(gettext "Create shortcut...")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_find_exe\"%" if grep -i "[Desktop Entry]" "${PORT_WINE_PATH}/duplicate"/* &>/dev/null ; then - PW_GENERATE_BUTTONS+="--field= $(gettext "Duplicates")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_duplicate\"%" + PW_GENERATE_BUTTONS+="--field= $(gettext "Duplicates")!${PW_GUI_ICON_PATH}/duplicate.svg!:FBTN%@bash -c \"button_click pw_duplicate\"%" fi for PW_DESKTOP_FILES in ${PW_ALL_DF} ; do PW_NAME_D_ICON="$(grep Icon "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F= '{print $2}')" From 43030abcb866c72605fede93b302b74f344d7ead Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Mon, 22 Jul 2024 14:08:35 +0300 Subject: [PATCH 17/37] updated Calibre autoinstall --- data_from_portwine/changelog_ru | 2 ++ data_from_portwine/scripts/portwine_db/Caliber.ppdb | 2 +- data_from_portwine/scripts/pw_autoinstall/PW_CALIBER | 6 ++---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 6ace2622..16d5b1fe 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,6 +2,8 @@ ----------------------------------------- История изменений: +* обновлена автоустановка Calibre + ###Scripts version 2324### / Дата: 18.07.2024 / Размер скачиваемого обновления: 4 мегабайта * доработана русская локализация (спасибо Eljeyna) diff --git a/data_from_portwine/scripts/portwine_db/Caliber.ppdb b/data_from_portwine/scripts/portwine_db/Caliber.ppdb index 35dc7b1b..b60d3f44 100644 --- a/data_from_portwine/scripts/portwine_db/Caliber.ppdb +++ b/data_from_portwine/scripts/portwine_db/Caliber.ppdb @@ -6,5 +6,5 @@ export PW_VULKAN_USE="2" export PW_WINE_USE="PROTON_LG" export PW_PREFIX_NAME="CALIBER" -export DISABLE_CP_DEFPFX=1 +# export DISABLE_CP_DEFPFX="1" export WINEDLLOVERRIDES="xaudio2_7=n,b" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER b/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER index aa2afcf4..ab952a75 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER +++ b/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER @@ -4,12 +4,10 @@ export PW_PREFIX_NAME="CALIBER" export LAUNCH_PARAMETERS=("/VERYSILENT" "/CLOSEAPPLICATIONS") export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/CaliberSetup.exe" -export PW_WINE_USE=PROTON_LG -export DISABLE_CP_DEFPFX=1 +export PW_WINE_USE="PROTON_LG" +# export DISABLE_CP_DEFPFX="1" export PORTWINE_CREATE_SHORTCUT_NAME="CALIBER" -gui_proton_downloader silent "${PW_WINE_USE}" - start_portwine if try_download "https://cdn.playcaliber.com/caliber-s3/p1/a88c3b70f76a0e56b1e08b62c9895cfe/launcher/setup/CaliberSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror then From 3858f341ff7bfd22565149692114d037267902f3 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Mon, 22 Jul 2024 14:26:27 +0300 Subject: [PATCH 18/37] added Yabause icon 128x128 --- data_from_portwine/changelog_ru | 1 + data_from_portwine/img/yabause.png | Bin 0 -> 17692 bytes 2 files changed, 1 insertion(+) create mode 100644 data_from_portwine/img/yabause.png diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 16d5b1fe..0882b0c1 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -3,6 +3,7 @@ История изменений: * обновлена автоустановка Calibre +* исправлено отображение иконки Yabause ###Scripts version 2324### / Дата: 18.07.2024 / Размер скачиваемого обновления: 4 мегабайта * доработана русская локализация (спасибо Eljeyna) diff --git a/data_from_portwine/img/yabause.png b/data_from_portwine/img/yabause.png new file mode 100644 index 0000000000000000000000000000000000000000..b340144ac6f1c05e2f350d89e061075bafefc33d GIT binary patch literal 17692 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 literal 0 HcmV?d00001 From 75c3eba7f8eebea2af7621b066294678033d0e31 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Mon, 22 Jul 2024 15:42:09 +0300 Subject: [PATCH 19/37] update locales func --- data_from_portwine/changelog_ru | 3 +++ data_from_portwine/scripts/functions_helper | 25 +++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 0882b0c1..20dc6fc7 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -4,6 +4,9 @@ * обновлена автоустановка Calibre * исправлено отображение иконки Yabause +* исправлено добавление иконок при создании ярлыка в библиотеку steam (спасибо Boria138) +* обновлено окно настроек gamescope (спасибо Htylol) +* обновлена функция выбора языка (спасибо Htylol) ###Scripts version 2324### / Дата: 18.07.2024 / Размер скачиваемого обновления: 4 мегабайта * доработана русская локализация (спасибо Eljeyna) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 2b095d6b..45819ba4 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -40,18 +40,15 @@ fatal () { change_locale () { if [[ -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] ; then LANGUAGE=$(<"${PORT_WINE_TMP_PATH}/PortProton_loc") - fi - - if [[ "$LANGUAGE" == "RUS" ]] ; then - LANGUAGE="ru" - echo "ru" > "${PORT_WINE_TMP_PATH}/PortProton_loc" - elif [[ "$LANGUAGE" == "ENG" ]] ; then - LANGUAGE="en" - echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc" - fi - - if [[ ! -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] - then + # TODO: drop legacy check language after 01.01.2025 + if [[ "$LANGUAGE" == "RUS" ]] ; then + LANGUAGE="ru" + echo "ru" > "${PORT_WINE_TMP_PATH}/PortProton_loc" + elif [[ "$LANGUAGE" == "ENG" ]] ; then + LANGUAGE="en" + echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc" + fi + else [[ ! -f "${pw_yad}" ]] && pw_yad="yad" SET_LANG=( "${pw_yad}" --list @@ -66,7 +63,7 @@ change_locale () { ) out=$("${SET_LANG[@]}") - [ -n "$out" ] || return + [ -n "$out" ] || fatal "Language is not set!" SET_LANG=$(echo "$out" | cut -d'|' -f2) echo "${SET_LANG}" > "${PORT_WINE_TMP_PATH}/PortProton_loc" @@ -1649,7 +1646,6 @@ pw_find_exe () { pw_start_progress_bar_block "$(gettext "Searching for .exe files... Please wait.")" find "${PW_PATH_FOR_FIND}" -type f -name '*.exe' ${PW_FIND_TIME} | grep -viE ${PW_EXCLUDE_EXE_FIND} | \ awk -F"/prefixes/" '{print $2}' > "${PW_TMPFS_PATH}/tmp_yad_find_exe" - sleep 0.001 pw_stop_progress_bar unset FIND_TO_GUI @@ -3171,6 +3167,7 @@ pw_start_progress_bar_install_game () { } pw_stop_progress_bar () { + sleep 0.01 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 From 89e63624ca87411d2d52e22c7582febf33515922 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Mon, 22 Jul 2024 15:57:52 +0300 Subject: [PATCH 20/37] fix create icons for systems with SELinux --- data_from_portwine/changelog_ru | 1 + data_from_portwine/scripts/functions_helper | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 20dc6fc7..882df152 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -7,6 +7,7 @@ * исправлено добавление иконок при создании ярлыка в библиотеку steam (спасибо Boria138) * обновлено окно настроек gamescope (спасибо Htylol) * обновлена функция выбора языка (спасибо Htylol) +* исправление создания иконок в системах использующих SELinux (спасибо Boria138) ###Scripts version 2324### / Дата: 18.07.2024 / Размер скачиваемого обновления: 4 мегабайта * доработана русская локализация (спасибо Eljeyna) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 29b78cd3..0edaaf94 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1615,7 +1615,12 @@ pw_create_gui_png () { try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then - if command -v exe-thumbnailer &>/dev/null && [[ ! $(sestatus | grep "Current mode: *enforcing") ]] ; then + if command -v sestatus &>/dev/null && sestatus | grep "Current mode: *enforcing" ; then + SESTATUS="1" + else + SESTATUS="0" + fi + if command -v exe-thumbnailer &>/dev/null && [[ "${SESTATUS}" == "0" ]] ; then exe-thumbnailer -s "${PW_RESIZE_TO}" "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" else env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ From f53400ef7ed6f3524171775180eabcb58d2c04c9 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Mon, 22 Jul 2024 17:06:24 +0300 Subject: [PATCH 21/37] Scripts version 2325 --- data_from_portwine/changelog_en | 8 ++++++++ data_from_portwine/changelog_ru | 3 ++- data_from_portwine/scripts/start.sh | 4 ++-- data_from_portwine/scripts/var | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/data_from_portwine/changelog_en b/data_from_portwine/changelog_en index e3683a1f..19b33b75 100755 --- a/data_from_portwine/changelog_en +++ b/data_from_portwine/changelog_en @@ -2,6 +2,14 @@ You can help us in the development of the project on the website: https://linux- ---------------------------------------- Changelog: +###Scripts version 2325### / Date: 22.07.2024 / Download update size: 4 megabytes +* updated Caliber auto-installation +* fixed Yabause icon display +* fixed adding icons when creating a shortcut to the steam library (thanks to Boria138) +* updated gamescope settings window (thanks to Htylol) +* updated language selection function (thanks to Htylol) +* fix icon creation on systems using SELinux (thanks to Boria138) + ###Scripts version 2324### / Date: 18.07.2024 / Download update size: 4 megabytes * updated Russian translation (thanks to Eljeyna) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 882df152..59b9cfbc 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,7 +2,8 @@ ----------------------------------------- История изменений: -* обновлена автоустановка Calibre +###Scripts version 2325### / Дата: 22.07.2024 / Размер скачиваемого обновления: 4 мегабайта +* обновлена автоустановка Caliber * исправлено отображение иконки Yabause * исправлено добавление иконок при создании ярлыка в библиотеку steam (спасибо Boria138) * обновлено окно настроек gamescope (спасибо Htylol) diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 0bc1d950..bbc70039 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -634,9 +634,9 @@ else PW_NAME_D_ICON_48="${PW_NAME_D_ICON//".png"/"_48.png"}" if [[ ! -f "${PW_NAME_D_ICON_48}" ]] \ && [[ -f "${PW_NAME_D_ICON}" ]] \ - && command -v "convert" 2>/dev/null + && command -v "convert" &>/dev/null then - convert "${PW_NAME_D_ICON}" -resize 48x48 "${PW_NAME_D_ICON_48}" + convert "${PW_NAME_D_ICON}" -resize 48x48 "${PW_NAME_D_ICON_48}" &>/dev/null fi PW_DESKTOP_HELPER="${PW_DESKTOP_FILES// /@_@}" PW_GENERATE_BUTTONS+="--field= ${PW_DESKTOP_FILES//".desktop"/""}!${PW_NAME_D_ICON_48}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DESKTOP_HELPER}"\"%" diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index adf50f3e..8b01f3bc 100755 --- a/data_from_portwine/scripts/var +++ b/data_from_portwine/scripts/var @@ -1,6 +1,6 @@ #!/usr/bin/env bash #Author: Castro-Fidel (linux-gaming.ru) -#SCRIPTS_NEXT_VERSION=2324 +#SCRIPTS_NEXT_VERSION=2325 #SCRIPTS_STABLE_VERSION=2320 ######################################################################## export LANGUAGES_LIST="ru es" From 4515f7995115d985bb440aaa0364f2dbf7239d25 Mon Sep 17 00:00:00 2001 From: Kazevic Date: Mon, 22 Jul 2024 18:16:42 -0300 Subject: [PATCH 22/37] Revert SVG changes --- data_from_portwine/img/gui/close.svg | 1154 +++++------ data_from_portwine/img/gui/download.svg | 120 +- data_from_portwine/img/gui/error.svg | 102 +- data_from_portwine/img/gui/find_48.svg | 1153 +++++------ data_from_portwine/img/gui/history.svg | 1158 ++++++----- data_from_portwine/img/gui/info.svg | 120 +- data_from_portwine/img/gui/portproton.svg | 15 +- .../img/gui/portproton_tray_dark.svg | 158 +- .../img/gui/portproton_tray_flatpak.svg | 160 +- .../img/gui/portproton_tray_light.svg | 160 +- data_from_portwine/img/gui/question.svg | 106 +- data_from_portwine/img/gui/wine_file.svg | 1153 +++++------ data_from_portwine/img/gui/wine_system.svg | 1686 ++++++++--------- 13 files changed, 3332 insertions(+), 3913 deletions(-) diff --git a/data_from_portwine/img/gui/close.svg b/data_from_portwine/img/gui/close.svg index 66088c84..a923cc48 100644 --- a/data_from_portwine/img/gui/close.svg +++ b/data_from_portwine/img/gui/close.svg @@ -2,19 +2,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="stop4863-4" /> diff --git a/data_from_portwine/img/gui/download.svg b/data_from_portwine/img/gui/download.svg index 61c40df1..bd3428d9 100644 --- a/data_from_portwine/img/gui/download.svg +++ b/data_from_portwine/img/gui/download.svg @@ -2,66 +2,66 @@ - - + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="download.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + + + + - - - - - + id="g2" + style="fill:#ffffff" + transform="matrix(0.49271292,0,0,0.49271292,129.86574,129.86549)"> + + + diff --git a/data_from_portwine/img/gui/error.svg b/data_from_portwine/img/gui/error.svg index 01a8cffe..45b98c8a 100644 --- a/data_from_portwine/img/gui/error.svg +++ b/data_from_portwine/img/gui/error.svg @@ -2,55 +2,55 @@ - - - - - - + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="error.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + + + + + + diff --git a/data_from_portwine/img/gui/find_48.svg b/data_from_portwine/img/gui/find_48.svg index 2d54e49c..18757877 100644 --- a/data_from_portwine/img/gui/find_48.svg +++ b/data_from_portwine/img/gui/find_48.svg @@ -2,19 +2,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data_from_portwine/img/gui/history.svg b/data_from_portwine/img/gui/history.svg index 4ce33490..bbbc8e87 100644 --- a/data_from_portwine/img/gui/history.svg +++ b/data_from_portwine/img/gui/history.svg @@ -2,19 +2,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="stop4863-4" /> diff --git a/data_from_portwine/img/gui/info.svg b/data_from_portwine/img/gui/info.svg index c03887ed..b8d8d1f5 100644 --- a/data_from_portwine/img/gui/info.svg +++ b/data_from_portwine/img/gui/info.svg @@ -2,64 +2,64 @@ - - - - - - - + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="info.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + + + + + + + diff --git a/data_from_portwine/img/gui/portproton.svg b/data_from_portwine/img/gui/portproton.svg index 74b85090..efcbe9e3 100644 --- a/data_from_portwine/img/gui/portproton.svg +++ b/data_from_portwine/img/gui/portproton.svg @@ -1,14 +1 @@ - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/data_from_portwine/img/gui/portproton_tray_dark.svg b/data_from_portwine/img/gui/portproton_tray_dark.svg index 7ed7349b..a943863f 100644 --- a/data_from_portwine/img/gui/portproton_tray_dark.svg +++ b/data_from_portwine/img/gui/portproton_tray_dark.svg @@ -1,84 +1,84 @@ - - - - - - - + viewBox="0 0 600 600" + version="1.1" + id="svg3" + sodipodi:docname="portproton_tray-dark.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + inkscape:export-filename="portproton_tray3.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + + + + + + + + + - - - - - - + stroke="none" + stroke-width="1" + fill="none" + fill-rule="evenodd" + id="g3" + transform="matrix(20.50461,8.6382238,-8.6348702,20.512573,27.749764,-417.23972)" + style="fill:#ffffff"> + + + + diff --git a/data_from_portwine/img/gui/portproton_tray_flatpak.svg b/data_from_portwine/img/gui/portproton_tray_flatpak.svg index 7e2e712e..de3205d5 100644 --- a/data_from_portwine/img/gui/portproton_tray_flatpak.svg +++ b/data_from_portwine/img/gui/portproton_tray_flatpak.svg @@ -1,85 +1,85 @@ - - - - - - - + viewBox="0 0 600 600" + version="1.1" + id="svg3" + sodipodi:docname="portproton_tray-blue.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + inkscape:export-filename="portproton_tray3.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + + + + + + + + + - - - - - - + stroke="none" + stroke-width="1" + fill="none" + fill-rule="evenodd" + id="g3" + transform="matrix(20.50461,8.6382238,-8.6348702,20.512573,27.749764,-417.23972)" + style="fill:#09bec8;fill-opacity:1"> + + + + diff --git a/data_from_portwine/img/gui/portproton_tray_light.svg b/data_from_portwine/img/gui/portproton_tray_light.svg index 9b63bd61..7a66e402 100644 --- a/data_from_portwine/img/gui/portproton_tray_light.svg +++ b/data_from_portwine/img/gui/portproton_tray_light.svg @@ -1,85 +1,85 @@ - - - - - - - + viewBox="0 0 600 600" + version="1.1" + id="svg3" + sodipodi:docname="portproton_tray-iight.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + inkscape:export-filename="portproton_tray3.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + + + + + + + + + - - - - - - + stroke="none" + stroke-width="1" + fill="none" + fill-rule="evenodd" + id="g3" + transform="matrix(20.50461,8.6382238,-8.6348702,20.512573,27.749764,-417.23972)" + style="fill:#000000"> + + + + diff --git a/data_from_portwine/img/gui/question.svg b/data_from_portwine/img/gui/question.svg index c7f68471..317083fc 100644 --- a/data_from_portwine/img/gui/question.svg +++ b/data_from_portwine/img/gui/question.svg @@ -2,57 +2,57 @@ - - - - - - + width="64" + height="64" + viewBox="0 0 64 64" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + sodipodi:docname="question.svg" + inkscape:export-filename="download.png" + inkscape:export-xdpi="24" + inkscape:export-ydpi="24" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + + + + + + diff --git a/data_from_portwine/img/gui/wine_file.svg b/data_from_portwine/img/gui/wine_file.svg index 555f1f2b..a3731386 100644 --- a/data_from_portwine/img/gui/wine_file.svg +++ b/data_from_portwine/img/gui/wine_file.svg @@ -2,19 +2,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data_from_portwine/img/gui/wine_system.svg b/data_from_portwine/img/gui/wine_system.svg index 54f680c9..bb75b2d8 100644 --- a/data_from_portwine/img/gui/wine_system.svg +++ b/data_from_portwine/img/gui/wine_system.svg @@ -2,19 +2,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="path1-9-6" + style="fill:#09bec8;fill-opacity:1;stroke-width:0.121745" + d="m 404.27342,520.20973 c -0.18845,0 -0.37691,0.0156 -0.56342,0.0469 -0.0795,0.0134 -0.1472,0.0652 -0.18092,0.13831 l -0.19004,0.41234 c -0.24009,0.0797 -0.46897,0.19005 -0.68106,0.32798 1.4e-4,0 -0.44085,-0.1086 -0.44085,-0.1086 -0.0783,-0.0193 -0.16091,0.002 -0.22094,0.0553 -0.28135,0.25263 -0.51888,0.5504 -0.70259,0.88106 -0.0391,0.0704 -0.0409,0.15558 -0.004,0.22766 l 0.2039,0.40565 c -0.0873,0.23741 -0.14375,0.48504 -0.16822,0.73693 l -0.35978,0.27699 c -0.0638,0.0492 -0.0992,0.12673 -0.0945,0.20721 0.0221,0.37753 0.10678,0.74883 0.25068,1.09859 0.0307,0.0745 0.0962,0.12908 0.17506,0.14563 l 0.44437,0.0935 c 0.13124,0.21621 0.28965,0.41491 0.47129,0.59095 l -0.008,0.45397 c -8.7e-4,0.0806 0.0373,0.15657 0.103,0.20308 0.30899,0.21817 0.65221,0.38339 1.01538,0.48894 0.0774,0.0225 0.16082,0.005 0.22303,-0.046 l 0.35015,-0.28911 c 0.25078,0.0322 0.50485,0.0322 0.75577,0 l 0.35015,0.28911 c 0.0622,0.0512 0.1456,0.0686 0.22303,0.046 0.36316,-0.10555 0.70636,-0.27077 1.01534,-0.48894 0.0658,-0.0465 0.10437,-0.12249 0.10303,-0.20308 l -0.008,-0.45397 c 0.18163,-0.17604 0.34004,-0.37461 0.47128,-0.59095 l 0.44437,-0.0935 c 0.0789,-0.0165 0.14438,-0.0711 0.17506,-0.14563 0.1439,-0.34976 0.22864,-0.72106 0.25067,-1.09859 0.005,-0.0805 -0.0306,-0.15803 -0.0945,-0.20721 l -0.35978,-0.27699 c -0.0243,-0.25176 -0.0809,-0.49952 -0.16825,-0.73693 l 0.20393,-0.40565 c 0.0363,-0.0721 0.0345,-0.15729 -0.004,-0.22766 -0.18372,-0.33066 -0.42125,-0.62843 -0.7026,-0.88106 -0.06,-0.0538 -0.14266,-0.0745 -0.22094,-0.0553 l -0.44098,0.1086 c -0.21195,-0.13793 -0.44084,-0.24812 -0.68091,-0.32798 l -0.19006,-0.41234 c -0.0337,-0.0731 -0.10141,-0.12492 -0.1809,-0.13831 -0.18652,-0.0313 -0.37497,-0.0469 -0.56344,-0.0469 z m 0,1.97723 a 1.3687662,1.3687662 0 0 1 1.36878,1.36878 1.3687662,1.3687662 0 0 1 -1.36878,1.36877 1.3687662,1.3687662 0 0 1 -1.36877,-1.36877 1.3687662,1.3687662 0 0 1 1.36877,-1.36878 z" /> From 7561746fb57c6335f6d4b71579543fc654298faa Mon Sep 17 00:00:00 2001 From: Htylol Date: Tue, 23 Jul 2024 05:51:21 +0500 Subject: [PATCH 23/37] Update gui_open_user_conf and open_changelog --- data_from_portwine/scripts/functions_helper | 35 +++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 0edaaf94..8e082bf8 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -3172,7 +3172,7 @@ pw_start_progress_bar_install_game () { } pw_stop_progress_bar () { - sleep 0.01 + sleep 0.1 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 @@ -3198,10 +3198,17 @@ export -f pw_stop_progress_bar_cover_block open_changelog () { [[ "$LANGUAGE" == ru ]] && local PW_CHANGELOG_FILE="changelog_ru" || local PW_CHANGELOG_FILE="changelog_en" - "${pw_yad}" --title="$(gettext "CHANGELOG")" --no-buttons --text-align=center \ + "${pw_yad}" --title="$(gettext "CHANGELOG")" --no-buttons \ --text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}" &>/dev/null + YAD_STATUS="$?" + if [[ "$YAD_STATUS" == "252" ]] && [[ -z "$WINEPREFIX" ]] ; then + export SKIP_CHECK_UPDATES=1 + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + fi } export -f open_changelog @@ -5150,7 +5157,29 @@ gui_wine_uninstaller () { export -f gui_wine_uninstaller gui_open_user_conf () { - xdg-open "${PORT_WINE_PATH}/data/user.conf" + PW_USERCONF_GUI="$("${pw_yad}" --title="$(gettext "EDIT USER CONFIG")" \ + --text-info --editable --width=800 --height=600 \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="$(gettext "SAVE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --filename="${PORT_WINE_PATH}/data/user.conf" 2>/dev/null)" + YAD_STATUS="$?" + + case "${YAD_STATUS}" in + 1|252) + export SKIP_CHECK_UPDATES=1 + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; + 2) + echo "${PW_USERCONF_GUI}" > "${PORT_WINE_PATH}/data/user.conf" + export SKIP_CHECK_UPDATES=1 + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; + esac } export -f gui_open_user_conf From 9440a0d900b75e903a69ea3e9b3faeb4d8676469 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Sun, 21 Jul 2024 22:43:07 +0500 Subject: [PATCH 24/37] Finally fixed duplicates of sd cards and flash drives (SteamDeck) --- data_from_portwine/scripts/functions_helper | 47 ++++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 90a73a94..1e2eadff 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1260,26 +1260,41 @@ check_dirs_and_files_in_pfx () { fi 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)) + DEF_MOUNT_DIRS=('/media' '/mnt' '/run/media') + MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sort -u)) + + rm -f "${WINEPREFIX}/dosdevices/com"* + rm -f "${WINEPREFIX}/dosdevices/"*:: - rm -fv "${WINEPREFIX}/dosdevices/"*:: for drive in "${DRIVES[@]}"; do - rm -fv "${WINEPREFIX}/dosdevices/${drive}:" 2>/dev/null + rm -f "${WINEPREFIX}/dosdevices/${drive}:" done + for drive_dir in "${MOUNT_DIRS[@]}" ; do - if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \ - && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep -w "$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 + if mountpoint -q "$drive_dir" ; then + if ! realpath "${WINEPREFIX}/dosdevices"/*: | grep -w "$drive_dir$" &>/dev/null ; then + drive_num=0 + while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do + drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:" + mount_point=$(df -P "$drive_dir" | awk 'NR==2 {print $1}') + mount_name=$(lsblk -no pkname "$mount_point" 2>/dev/null) + + if [[ ! -L "$drive_path" ]] ; then + if [[ $(cat "/sys/class/block/$mount_name/removable") != "1" ]] 2>/dev/null ; then + if [[ ! $(echo "$mount_point" | grep "mmc") ]] 2>/dev/null ; then + ln -sf "$drive_dir" "$drive_path" + break + else + ((drive_num++)) + fi + else + ((drive_num++)) + fi + else + ((drive_num++)) + fi + done + fi fi done } From 6a8e4d5a900125a5dac50de53b0915aa8e2817df Mon Sep 17 00:00:00 2001 From: Htylol Date: Tue, 23 Jul 2024 09:21:54 +0500 Subject: [PATCH 25/37] fix for selinux --- data_from_portwine/scripts/functions_helper | 25 ++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 48e1fd36..bbc4aa5e 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1363,7 +1363,12 @@ create_shortcut_from_link () { try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then - if command -v exe-thumbnailer &>/dev/null && [[ ! $(sestatus | grep "Current mode: *enforcing" &>/dev/null) ]] ; then + if command -v sestatus &>/dev/null && sestatus | grep "Current mode: *enforcing" ; then + SESTATUS="1" + else + SESTATUS="0" + fi + if command -v exe-thumbnailer &>/dev/null && [[ "${SESTATUS}" == "0" ]] ; then exe-thumbnailer -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" else env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ @@ -1873,20 +1878,20 @@ pw_duplicate () { --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} \ - --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null + --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null IFS="$orig_IFS" pw_yad_set_form - [[ ! -z "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in + case "$PW_YAD_SET" in *.desktop) - run_desktop_b_click - ;; + run_desktop_b_click + ;; pw_duplicate) - export SKIP_CHECK_UPDATES=1 - /usr/bin/env bash -c ${pw_full_command_line[*]} & - print_info "Restarting..." - exit 0 - ;; + export SKIP_CHECK_UPDATES=1 + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; esac } From eca02d91a19ac63a17e31c46468de0140cb92251 Mon Sep 17 00:00:00 2001 From: Htylol Date: Tue, 23 Jul 2024 07:20:27 +0500 Subject: [PATCH 26/37] Added TAB_MAIN_MENU --- data_from_portwine/scripts/functions_helper | 87 +++++++++++++-------- data_from_portwine/scripts/start.sh | 14 ++-- 2 files changed, 63 insertions(+), 38 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 8e082bf8..367cd63a 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -584,7 +584,7 @@ pw_reinstall_pp () { try_remove_file "${PORT_WINE_TMP_PATH}/scripts_ver" echo print_info "Restarting PP for reinstall files..." - export SKIP_CHECK_UPDATES=0 + export SKIP_CHECK_UPDATES="0" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -1668,7 +1668,7 @@ pw_find_exe () { YAD_STATUS="$?" if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then if [[ -z "${PW_SET_FIND_EXE}" ]] ; then - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & print_info "Restarting..." fi @@ -1679,7 +1679,7 @@ pw_find_exe () { if [[ ! -z "${PW_SET_FIND_EXE}" ]] ; then portwine_exe="${PW_PATH_FOR_FIND}$(echo "${PW_SET_FIND_EXE}" | awk -F'|' '{print $1}')" portwine_create_shortcut silent - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -3203,11 +3203,18 @@ open_changelog () { --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}" &>/dev/null YAD_STATUS="$?" - if [[ "$YAD_STATUS" == "252" ]] && [[ -z "$WINEPREFIX" ]] ; then - export SKIP_CHECK_UPDATES=1 + if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] && [[ -z "$WINEPREFIX" ]] ; then + export SKIP_CHECK_UPDATES="1" + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi /usr/bin/env bash -c ${pw_full_command_line[*]} & print_info "Restarting..." exit 0 + else + exit 0 fi } export -f open_changelog @@ -3322,7 +3329,7 @@ gui_proton_downloader () { if [[ -z "${PROTON_PW_GIT}" ]] ; then yad_error "$(gettext "Error: check wine.")" - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -3401,7 +3408,7 @@ gui_proton_downloader () { --button="$(gettext "OK")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":0 2>/dev/null YAD_WINE_STATUS="$?" if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -3416,7 +3423,7 @@ gui_proton_downloader () { && [[ -z "${VERSION_INSTALLED_WINE}" ]] then print_info "Nothing to do." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -3671,7 +3678,7 @@ A brief instruction: --button="$(gettext "OPEN THE SETTINGS FILE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Open the .ppdb settings file in a system text editor to view and change variables manually")":150 \ --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":0 2>/dev/null YAD_STATUS="$?" - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" case "$YAD_STATUS" in 1|252) @@ -3854,7 +3861,7 @@ fi YAD_VKBASALT_STATUS="$?" case "${YAD_VKBASALT_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 180) @@ -3884,7 +3891,7 @@ fi else export PW_VKBASALT_FFX_CAS="0.$YAD_CAS_SET" fi edit_db_from_gui PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PW_VKBASALT - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4021,14 +4028,14 @@ fi YAD_MANGOHUD_STATUS="$?" case "${YAD_MANGOHUD_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 182) export PW_MANGOHUD=0 edit_db_from_gui PW_MANGOHUD FPS_LIMIT - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4102,7 +4109,7 @@ fi gui_mangohud fi - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4220,7 +4227,7 @@ fi YAD_DGV2_STATUS="$?" case "${YAD_DGV2_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4228,14 +4235,14 @@ fi sed -i '/PW_DGV2/d' "$portwine_exe".ppdb export PW_DGVOODOO2=0 edit_db_from_gui PW_DGVOODOO2 - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 164) export PW_DGVOODOO2=0 edit_db_from_gui PW_DGVOODOO2 - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4275,7 +4282,7 @@ fi PW_DGV2_FPS_LIMIT PW_DGV2_BIT_DEPTH PW_DGV2_BRIGHTNESS PW_DGV2_COLOR PW_DGV2_CONTRAST PW_DGV2_VIDEOCARD PW_DGV2_DISPLAY_ROI \ PW_DGV2_CURSOR_SCALE PW_DGV2_RESAMPLING - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4422,7 +4429,7 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate." YAD_GAMESCOPE_STATUS="$?" case "${YAD_GAMESCOPE_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4430,14 +4437,14 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate." sed -i '/PW_GS/d' "$portwine_exe".ppdb export PW_GAMESCOPE=0 edit_db_from_gui PW_GAMESCOPE - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 164) export PW_GAMESCOPE=0 edit_db_from_gui PW_GAMESCOPE - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4477,8 +4484,7 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate." PW_GS_UPSCALE_SHARPNESS PW_GS_MAX_SCALE_FACTOR PW_GS_MOUSE_SENSITIVITY \ PW_GS_SDR_CONTENT_NITS PW_GS_ITM_SDR_NITS PW_GS_ITM_TARGET_NITS - - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4617,7 +4623,7 @@ portwine_create_shortcut () { if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then print_info "Restarting PP..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -5019,6 +5025,11 @@ pw_autoinstall_from_db () { } gui_credits () { + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi . "${PORT_SCRIPTS_PATH}/credits" } export -f gui_credits @@ -5053,7 +5064,7 @@ run_desktop_b_click () { print_info "Restarting PP after choose desktop file..." # stop_portwine - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c "${PW_EXEC_FROM_DESKTOP}" & exit 0 } @@ -5063,7 +5074,7 @@ gui_clear_pfx () { if yad_question "$(gettext "Do you want to clear prefix in PortProton?")" ; then pw_clear_pfx print_info "Restarting PP after clearing prefix..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -5085,7 +5096,7 @@ export -f gui_rm_portproton gui_pw_update () { try_remove_file "${PORT_WINE_TMP_PATH}/scripts_update_notifier" print_info "Restarting PP for check update..." - export SKIP_CHECK_UPDATES=0 + export SKIP_CHECK_UPDATES="0" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5094,7 +5105,7 @@ export -f gui_pw_update change_loc () { try_remove_file "${PORT_WINE_TMP_PATH}/PortProton_loc" print_info "Restarting PP for change language..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5109,7 +5120,7 @@ change_mirror () { yad_info "$(gettext "Mirror changed to:") CDN" fi print_info "Restarting PP for change mirror..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5144,7 +5155,7 @@ change_gui_start () { yad_info "$(gettext "Gui start changed to:") NOTEBOOK" fi print_info "Restarting PP for change gui start..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5167,14 +5178,24 @@ gui_open_user_conf () { case "${YAD_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi /usr/bin/env bash -c ${pw_full_command_line[*]} & print_info "Restarting..." exit 0 ;; 2) echo "${PW_USERCONF_GUI}" > "${PORT_WINE_PATH}/data/user.conf" - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi /usr/bin/env bash -c ${pw_full_command_line[*]} & print_info "Restarting..." exit 0 @@ -5192,7 +5213,7 @@ gui_open_scripts_from_backup () { unpack "$PW_SCRIPT_FROM_BACKUP" "${PORT_WINE_PATH}/data/" echo "0" > "${PORT_WINE_TMP_PATH}/scripts_update_notifier" print_info "Restarting PP after backup..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index bbc70039..1769b180 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -551,7 +551,7 @@ if [[ -f "${portwine_exe}" ]] ; then export TAB_START="1" fi - "${pw_yad}" --key=$KEY_START --notebook --active-tab=${TAB_START} \ + "${pw_yad}" --key=$KEY_START --notebook --active-tab="${TAB_START}" \ --gui-type="settings-notebook" \ --width="${PW_START_SIZE_W}" --tab-pos="${PW_TAB_POSITON}" --center \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" --expand \ @@ -742,11 +742,14 @@ else # --field=" Bethesda.net Launcher"!"$PW_GUI_ICON_PATH/bethesda.png"!"":"FBTN" '@bash -c "button_click PW_BETHESDA"' # --field=" League of Legends"!"$PW_GUI_ICON_PATH/lol.png"!"":"FBTN" '@bash -c "button_click PW_LOL"' - export START_FROM_PP_GUI=1 + export START_FROM_PP_GUI="1" + if [[ -z ${TAB_MAIN_MENU} ]] ; then + export TAB_MAIN_MENU="1" + fi if [[ -z "${PW_ALL_DF}" ]] ; then "${pw_yad}" --key=$KEY --notebook --expand \ - --gui-type="settings-notebook" \ + --gui-type="settings-notebook" --active-tab="${TAB_MAIN_MENU}" \ --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ @@ -759,7 +762,7 @@ else YAD_STATUS="$?" else "${pw_yad}" --key=$KEY --notebook --expand \ - --gui-type="settings-notebook" \ + --gui-type="settings-notebook" --active-tab="${TAB_MAIN_MENU}" \ --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ @@ -771,6 +774,7 @@ else --tab="$(gettext "PORTPROTON SETTINGS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null YAD_STATUS="$?" fi + unset TAB_MAIN_MENU if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi pw_yad_set_form @@ -787,7 +791,7 @@ else fi export PW_PREFIX_NAME PW_WINE_VER VULKAN_MOD fi - export PW_DISABLED_CREATE_DB=1 + export PW_DISABLED_CREATE_DB="1" fi case "${VULKAN_MOD}" in From df6a7ea7335959ffffba62a6ceed8325f180d567 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Wed, 24 Jul 2024 11:06:00 +0300 Subject: [PATCH 27/37] update deb in readme --- README-RU.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-RU.md b/README-RU.md index 54f583bb..fcff64e4 100755 --- a/README-RU.md +++ b/README-RU.md @@ -69,7 +69,7 @@ exit ``` * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** : - [portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) + [portproton_1.7-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.7-2_amd64/portproton_1.7-2_amd64.deb) * **Arch Linux** и производные (Manjaro, Garuda, и т.д.) : [AUR](https://aur.archlinux.org/packages/portproton) diff --git a/README.md b/README.md index b3b65643..e1e82df9 100755 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ sudo urpmi portproton ``` * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x**, and **Deepin**: - [portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) + [portproton_1.7-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.7-2_amd64/portproton_1.7-2_amd64.deb) * **Arch Linux** and derivatives (Manjaro, Garuda, etc.): [AUR](https://aur.archlinux.org/packages/portproton) From 6d3b9d983cf7f9885856c992e0d567d7e884f91f Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Wed, 24 Jul 2024 11:09:37 +0300 Subject: [PATCH 28/37] fix comments in css --- data_from_portwine/themes/compact/style.css | 26 +++++++++++---------- data_from_portwine/themes/default/style.css | 22 +++++++++-------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/data_from_portwine/themes/compact/style.css b/data_from_portwine/themes/compact/style.css index 05ce1026..1dba1966 100644 --- a/data_from_portwine/themes/compact/style.css +++ b/data_from_portwine/themes/compact/style.css @@ -1,54 +1,58 @@ /*Глобальные правила*/ + +/*выравнивание стрелок комбобоксов*/ arrow { margin: 3px 5px } -/*выравнивание стрелок комбобоксов*/ +/*скрываем сепаратор*/ separator { margin: 0px 0px 0px 0px; background-size: 0px; padding-bottom: 0px } -/*скрываем сепаратор*/ +/*увеличиваем чекбоксы*/ check { min-height: 24px; min-width: 24px } -/*увеличиваем чекбоксы*/ +/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ cellview, entry { min-height: 26px } -/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ +/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ switch { margin: 5px 10px 0px 10px } -/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ /*Правила для окон*/ + + +/*отступы в расширенных настройках*/ window > box > grid { padding: 5px } -/*отступы в расширенных настройках*/ +/*иконка запуска ярлыка*/ window > box > box > image { padding: 0px 0px 5px 0px; } -/*иконка запуска ярлыка*/ +/*иконка в создании ярлыка*/ window > box > box > box > image { margin-top: 5px } -/*иконка в создании ярлыка*/ +/*комбобоксы в запуске ярлыка*/ window > box > box > grid { padding: 0px 5px 5px 0px } -/*комбобоксы в запуске ярлыка*/ +/*текст запуска ярлыка*/ window > box > label { background: @theme_selected_bg_color; color: @theme_text_color; @@ -56,8 +60,7 @@ window > box > label { padding: 5px } -/*текст запуска ярлыка*/ - +/*текст при создании ярлыка и в настройках*/ window > box > box > label { background: @theme_selected_bg_color; color: @theme_text_color; @@ -65,4 +68,3 @@ window > box > box > label { padding: 5px } -/*текст при создании ярлыка и в настройках*/ diff --git a/data_from_portwine/themes/default/style.css b/data_from_portwine/themes/default/style.css index abc10ada..e93b75f0 100644 --- a/data_from_portwine/themes/default/style.css +++ b/data_from_portwine/themes/default/style.css @@ -1,51 +1,53 @@ /*Глобальные правила*/ + +/*выравнивание стрелок комбобоксов*/ arrow { margin: 3px 5px } -/*выравнивание стрелок комбобоксов*/ + +/*скрываем сепаратор*/ separator { margin: 0px 0px 0px 0px; background-size: 0px; padding-bottom: 0px } -/*скрываем сепаратор*/ +/*увеличиваем чекбоксы*/ check { min-height: 24px; min-width: 24px } -/*увеличиваем чекбоксы*/ +/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ cellview, entry { min-height: 26px } -/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ +/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ switch { margin: 5px 10px 0px 10px } -/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ /*Правила для окон*/ + +/*отступы в расширенных настройках*/ window > box > grid { padding: 5px } -/*отступы в расширенных настройках*/ +/*иконка запуска ярлыка*/ window > box > box > image { padding: 0px 0px 5px 0px; } -/*иконка запуска ярлыка*/ +/*иконка в создании ярлыка*/ window > box > box > box > image { margin-top: 5px } -/*иконка в создании ярлыка*/ +/*комбобоксы в запуске ярлыка*/ window > box > box > grid { padding: 0px 5px 5px 0px } - -/*комбобоксы в запуске ярлыка*/ From 94568782f0ba3aa661fa6cb626bbde5307460029 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Wed, 24 Jul 2024 12:22:18 +0300 Subject: [PATCH 29/37] fix setup.exe icon --- data_from_portwine/changelog_ru | 6 ++++++ data_from_portwine/img/setup.png | Bin 0 -> 22012 bytes data_from_portwine/scripts/functions_helper | 15 ++++++++++++--- .../scripts/portwine_db/setup.ppdb | 3 --- 4 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 data_from_portwine/img/setup.png diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 59b9cfbc..ba1f4c1b 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,6 +2,12 @@ ----------------------------------------- История изменений: +###Scripts version 2326### / Дата: 22.07.2024 / Размер скачиваемого обновления: 4 мегабайта +* обновлен README.md (спасибо Kazevic) +* редактор user.conf переключен на yad (спасибо Htylol) +* исправлена работа монтирования дисков в dosdevice (спасибо Boria138) +* добавлен диск S который всегда ссылается на каталог с играми в STEAM (для удобства установки русификаторов и модов в игры из библиотеки STEAM) + ###Scripts version 2325### / Дата: 22.07.2024 / Размер скачиваемого обновления: 4 мегабайта * обновлена автоустановка Caliber * исправлено отображение иконки Yabause diff --git a/data_from_portwine/img/setup.png b/data_from_portwine/img/setup.png new file mode 100644 index 0000000000000000000000000000000000000000..438ac77ff97e138a0799671c22d085cbcb9fc832 GIT binary patch literal 22012 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

gNgnXMcV0d@E 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 Z;qeamW`A{@V&{T#m|?AqUmH0^{|n~Hl4Ae> literal 0 HcmV?d00001 diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 2de90f6e..01710fda 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1225,6 +1225,12 @@ check_dirs_and_files_in_pfx () { [ ! -d "${WINEPREFIX}/dosdevices/z:" ] && try_force_link_dir "/" "${WINEPREFIX}/dosdevices/z:" [ ! -d "${WINEPREFIX}/dosdevices/h:" ] && try_force_link_dir "$HOME" "${WINEPREFIX}/dosdevices/h:" + if [ ! -d "${WINEPREFIX}/dosdevices/s:" ] \ + && [ -d "$HOME/.local/share/Steam/steamapps/common/" ] + then + try_force_link_dir "$HOME/.local/share/Steam/steamapps/common/" "${WINEPREFIX}/dosdevices/s:" + fi + 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 @@ -1255,7 +1261,7 @@ check_dirs_and_files_in_pfx () { then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data" fi - DRIVES=(d e f g i j k l m n o p q r s t u v w x y) + DRIVES=(d e f g i j k l m n o p q r t u v w x y) DEF_MOUNT_DIRS=('/media' '/mnt' '/run/media') MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sort -u)) @@ -1594,6 +1600,11 @@ edit_user_conf_from_gui () { } pw_create_gui_png () { + if echo "$(basename "${portwine_exe}")" | grep -i "setup\|install" &>/dev/null ; then + export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/setup.png" + return 0 + fi + if [[ -z "$PORTPROTON_NAME" ]] \ || [[ "$PW_NO_RESTART_PPDB" == "1" ]] then @@ -1627,8 +1638,6 @@ pw_create_gui_png () { edit_db_from_gui PORTPROTON_NAME fi PW_RESIZE_TO="128" - try_remove_file "${PORT_WINE_PATH}/data/img/setup.png" - try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png" try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then diff --git a/data_from_portwine/scripts/portwine_db/setup.ppdb b/data_from_portwine/scripts/portwine_db/setup.ppdb index 5eef0874..533a57d3 100644 --- a/data_from_portwine/scripts/portwine_db/setup.ppdb +++ b/data_from_portwine/scripts/portwine_db/setup.ppdb @@ -1,13 +1,10 @@ #!/usr/bin/env bash #Author: linux-gaming.ru #setup.exe -#Setup.exe -#SETUP.exe #.msi #Rating=5 ################################################ export PW_DISABLED_CREATE_DB=1 -export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/setup.png" export PW_VULKAN_USE=1 export PW_MANGOHUD=0 export PW_NO_FSYNC=1 # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support. From 9f2a1b189c6766cdac77cffaf401429fe98db19b Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Wed, 24 Jul 2024 12:25:06 +0300 Subject: [PATCH 30/37] Scripts version 2326 --- data_from_portwine/changelog_en | 6 ++++++ data_from_portwine/changelog_ru | 2 +- data_from_portwine/scripts/var | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/data_from_portwine/changelog_en b/data_from_portwine/changelog_en index 19b33b75..68a3a785 100755 --- a/data_from_portwine/changelog_en +++ b/data_from_portwine/changelog_en @@ -2,6 +2,12 @@ You can help us in the development of the project on the website: https://linux- ---------------------------------------- Changelog: +###Scripts version 2326### / Date: 24.07.2024 / Download update size: 4 megabytes +* updated README.md (thanks Kazevic) +* user.conf editor switched to yad (thanks to Htylol) +* fixed disk mounting in dosdevice (thanks to Boria138) +* added drive S which always links to the directory with games in STEAM (for easy installing mods in games from the STEAM library) + ###Scripts version 2325### / Date: 22.07.2024 / Download update size: 4 megabytes * updated Caliber auto-installation * fixed Yabause icon display diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index ba1f4c1b..e4555ff6 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,7 +2,7 @@ ----------------------------------------- История изменений: -###Scripts version 2326### / Дата: 22.07.2024 / Размер скачиваемого обновления: 4 мегабайта +###Scripts version 2326### / Дата: 24.07.2024 / Размер скачиваемого обновления: 4 мегабайта * обновлен README.md (спасибо Kazevic) * редактор user.conf переключен на yad (спасибо Htylol) * исправлена работа монтирования дисков в dosdevice (спасибо Boria138) diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index 8b01f3bc..935c7aae 100755 --- a/data_from_portwine/scripts/var +++ b/data_from_portwine/scripts/var @@ -1,6 +1,6 @@ #!/usr/bin/env bash #Author: Castro-Fidel (linux-gaming.ru) -#SCRIPTS_NEXT_VERSION=2325 +#SCRIPTS_NEXT_VERSION=2326 #SCRIPTS_STABLE_VERSION=2320 ######################################################################## export LANGUAGES_LIST="ru es" From 11eefbc594c73b7d45f95904414db82ac7d02ae3 Mon Sep 17 00:00:00 2001 From: Htylol Date: Wed, 24 Jul 2024 18:39:17 +0500 Subject: [PATCH 31/37] Added gui_edit_db_file --- data_from_portwine/scripts/functions_helper | 31 +++++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 01710fda..be8ada18 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1375,7 +1375,7 @@ pw_init_db () { else if [[ "${PW_DISABLED_CREATE_DB}" != 1 ]] ; then if [[ ! -z "${PORTWINE_DB}" ]] ; then - export PORTWINE_DB_FILE=$(grep -il "\#${PORTWINE_DB}.exe" "${PORT_SCRIPTS_PATH}/portwine_db"/*) + export PORTWINE_DB_FILE=$(grep -il "#${PORTWINE_DB}.exe" "${PORT_SCRIPTS_PATH}/portwine_db"/*) if [[ -z "${PORTWINE_DB_FILE}" ]] ; then { echo "#!/usr/bin/env bash" @@ -3538,7 +3538,10 @@ gui_edit_db () { if check_wayland_session ; then rm_from_var PW_EDIT_DB_LIST "PW_USE_US_LAYOUT" + else + rm_from_var PW_EDIT_DB_LIST "PW_USE_NATIVE_WAYLAND" fi + if check_flatpak ; then rm_from_var PW_EDIT_DB_LIST "PW_USE_RUNTIME" fi @@ -3770,8 +3773,8 @@ A brief instruction: exit 0 ;; 150) - xdg-open "${PORTWINE_DB_FILE}" & - exit 0 + print_info "Restarting PP after update ppdb file..." + gui_edit_db_file ;; esac } @@ -5230,6 +5233,28 @@ gui_open_user_conf () { } export -f gui_open_user_conf +gui_edit_db_file () { + GUI_EDIT_DB_FILE="$("${pw_yad}" --title="$(gettext "EDIT DB")" \ + --text-info --editable --width=800 --height=600 \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + --button="$(gettext "SETTINGS")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="$(gettext "SAVE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --filename="${PORTWINE_DB_FILE}" 2>/dev/null)" + YAD_STATUS="$?" + + case "$YAD_STATUS" in + 1|252) + /usr/bin/env bash -c ${pw_full_command_line[*]} & + exit 0 + ;; + 2) + echo "${GUI_EDIT_DB_FILE}" > "${PORTWINE_DB_FILE}" + /usr/bin/env bash -c ${pw_full_command_line[*]} & + exit 0 + ;; + esac +} + gui_open_scripts_from_backup () { cd "${PORT_WINE_TMP_PATH}/scripts_backup/" || fatal PW_SCRIPT_FROM_BACKUP=$("${pw_yad}" --file --width=650 --height=500 \ From 67fa0e5febc325e572b378138006bf7481758a94 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 25 Jul 2024 13:35:31 +0300 Subject: [PATCH 32/37] STABLE: Scripts version 2327 --- data_from_portwine/changelog_en | 3 +++ data_from_portwine/changelog_ru | 3 +++ data_from_portwine/scripts/var | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/data_from_portwine/changelog_en b/data_from_portwine/changelog_en index 68a3a785..1f481655 100755 --- a/data_from_portwine/changelog_en +++ b/data_from_portwine/changelog_en @@ -2,6 +2,9 @@ You can help us in the development of the project on the website: https://linux- ---------------------------------------- Changelog: +###Scripts version 2327### / stable / Date: 25.07.2024 / Download update size: 4 megabytes +* cumulative update to the stable version of PortProton scripts + ###Scripts version 2326### / Date: 24.07.2024 / Download update size: 4 megabytes * updated README.md (thanks Kazevic) * user.conf editor switched to yad (thanks to Htylol) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index e4555ff6..15e7aa02 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,6 +2,9 @@ ----------------------------------------- История изменений: +###Scripts version 2327### / stable / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта +* кумулятивное обновление стабильной версии скриптов PortProton + ###Scripts version 2326### / Дата: 24.07.2024 / Размер скачиваемого обновления: 4 мегабайта * обновлен README.md (спасибо Kazevic) * редактор user.conf переключен на yad (спасибо Htylol) diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index 935c7aae..4b7fe64d 100755 --- a/data_from_portwine/scripts/var +++ b/data_from_portwine/scripts/var @@ -1,7 +1,7 @@ #!/usr/bin/env bash #Author: Castro-Fidel (linux-gaming.ru) -#SCRIPTS_NEXT_VERSION=2326 -#SCRIPTS_STABLE_VERSION=2320 +#SCRIPTS_NEXT_VERSION=2327 +#SCRIPTS_STABLE_VERSION=2327 ######################################################################## export LANGUAGES_LIST="ru es" export PW_VKBASALT="0" From 3d7f2f29a22305101a86d42f6507c84afd31523e Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 25 Jul 2024 15:21:06 +0300 Subject: [PATCH 33/37] updated setup.png --- data_from_portwine/changelog_ru | 2 ++ data_from_portwine/img/setup.png | Bin 22012 -> 8481 bytes 2 files changed, 2 insertions(+) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 15e7aa02..54fc9fca 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,6 +2,8 @@ ----------------------------------------- История изменений: +* обновлена иконка для setup файлов (спасибо Dervart) + ###Scripts version 2327### / stable / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта * кумулятивное обновление стабильной версии скриптов PortProton diff --git a/data_from_portwine/img/setup.png b/data_from_portwine/img/setup.png index 438ac77ff97e138a0799671c22d085cbcb9fc832..b33afc8f5eb74efa1a58bcbd35ba217e946dfe9b 100644 GIT binary patch literal 8481 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

gNgnXMcV0d@E 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 Z;qeamW`A{@V&{T#m|?AqUmH0^{|n~Hl4Ae> From 093d6f5d3d6fa5256d3b43eebf8b1de35d04f024 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 25 Jul 2024 15:42:37 +0300 Subject: [PATCH 34/37] centering GUI in KDE --- data_from_portwine/changelog_ru | 1 + data_from_portwine/scripts/start.sh | 1 + data_from_portwine/themes/compact.pptheme | 1 - 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 54fc9fca..b8068a20 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -3,6 +3,7 @@ История изменений: * обновлена иконка для setup файлов (спасибо Dervart) +* исправлена центровка интерфейса для KDE ###Scripts version 2327### / stable / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта * кумулятивное обновление стабильной версии скриптов PortProton diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 1769b180..224d71d4 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -174,6 +174,7 @@ else source "$PW_GUI_THEMES_PATH/default.pptheme" echo 'export GUI_THEME="default"' >> "$USER_CONF" fi +[[ "$XDG_SESSION_DESKTOP" == "KDE" ]] && export YAD_OPTIONS+="--center" # choose branch if [[ -z "$BRANCH" ]] ; then diff --git a/data_from_portwine/themes/compact.pptheme b/data_from_portwine/themes/compact.pptheme index 8e627df3..4a094116 100755 --- a/data_from_portwine/themes/compact.pptheme +++ b/data_from_portwine/themes/compact.pptheme @@ -11,7 +11,6 @@ export YAD_OPTIONS="--css=$THEME_PATH/style.css \ --keep-icon-size \ --buttons-layout=expand \ --class=PortProton \ ---center \ --gui-type-height=2 \ --gui-type-width=2 \ " From d99d25daac8cbff04b8f3a5eb746639a22286149 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 25 Jul 2024 16:09:17 +0300 Subject: [PATCH 35/37] added duplicate.svg --- data_from_portwine/changelog_ru | 1 + data_from_portwine/img/gui/duplicate.svg | 598 +++++++++++++++++++++++ 2 files changed, 599 insertions(+) create mode 100644 data_from_portwine/img/gui/duplicate.svg diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index b8068a20..bb0713b7 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -4,6 +4,7 @@ * обновлена иконка для setup файлов (спасибо Dervart) * исправлена центровка интерфейса для KDE +* добавлено автоматическое создание ярлыков галочкой "создать ярлык" в самом установщике (спасибо Boria138 и Htylol) ###Scripts version 2327### / stable / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта * кумулятивное обновление стабильной версии скриптов PortProton diff --git a/data_from_portwine/img/gui/duplicate.svg b/data_from_portwine/img/gui/duplicate.svg new file mode 100644 index 00000000..f51eba5f --- /dev/null +++ b/data_from_portwine/img/gui/duplicate.svg @@ -0,0 +1,598 @@ + + + + From 388f1fc8fbaf971ca2bbcb20dd071057a257a0df Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 25 Jul 2024 16:36:21 +0300 Subject: [PATCH 36/37] edit_db to yad --- data_from_portwine/changelog_ru | 1 + 1 file changed, 1 insertion(+) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index bb0713b7..ebe38060 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -5,6 +5,7 @@ * обновлена иконка для setup файлов (спасибо Dervart) * исправлена центровка интерфейса для KDE * добавлено автоматическое создание ярлыков галочкой "создать ярлык" в самом установщике (спасибо Boria138 и Htylol) +* редактор файлов настроек переключен на yad (спасибо Htylol) ###Scripts version 2327### / stable / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта * кумулятивное обновление стабильной версии скриптов PortProton From 7b5b381a0346fd36a61438e44b0f0aa0d69fafe8 Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Thu, 25 Jul 2024 18:21:12 +0300 Subject: [PATCH 37/37] Scripts version 2328 --- data_from_portwine/changelog_en | 6 + data_from_portwine/changelog_ru | 1 + data_from_portwine/scripts/functions_helper | 126 ++++++++++---------- data_from_portwine/scripts/var | 2 +- 4 files changed, 72 insertions(+), 63 deletions(-) diff --git a/data_from_portwine/changelog_en b/data_from_portwine/changelog_en index 1f481655..c24337b5 100755 --- a/data_from_portwine/changelog_en +++ b/data_from_portwine/changelog_en @@ -2,6 +2,12 @@ You can help us in the development of the project on the website: https://linux- ---------------------------------------- Changelog: +###Scripts version 2328### / Date: 25.07.2024 / Download update size: 4 megabytes +* updated icon for setup files (thanks to Dervart) +* fixed interface alignment for KDE +* added automatic creation of shortcuts by checking "create shortcut" in the installer itself (thanks to Boria138 and Htylol) +* settings file editor switched to yad (thanks to Htylol) + ###Scripts version 2327### / stable / Date: 25.07.2024 / Download update size: 4 megabytes * cumulative update to the stable version of PortProton scripts diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index ebe38060..1ebc427d 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,6 +2,7 @@ ----------------------------------------- История изменений: +###Scripts version 2328### / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта * обновлена иконка для setup файлов (спасибо Dervart) * исправлена центровка интерфейса для KDE * добавлено автоматическое создание ярлыков галочкой "создать ярлык" в самом установщике (спасибо Boria138 и Htylol) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index fd2f60c2..37f84ff6 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -994,65 +994,7 @@ stop_portwine () { if [[ ! -z "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" ]] ; then kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi - - for prefix_dir in "${PORT_WINE_PATH}"/prefixes/* ; do - DESKTOP_DIRS+=( - "${prefix_dir}/drive_c/users/steamuser/Desktop" - "${prefix_dir}/drive_c/users/Public/Desktop" - ) - done - - for dir in "${DESKTOP_DIRS[@]}" ; do - while IFS= read -r -d '' link_file; do - LINKS+=("$link_file") - done < <(find "$dir" -type f -iname "*.lnk" -print0 2>/dev/null | sort -u) - done - - for link_file in "${LINKS[@]}"; do - if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then - prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') - if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ - && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then - link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') - else - link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') - fi - link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') - link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") - else - if ! command -v exiftool &>/dev/null ; then - print_warning "use portable exiftool" - env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" - prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') - if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ - && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then - link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') - else - link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') - fi - link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') - link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") - else - yad_error "exiftool - broken!" - fi - fi - if ! exe_path="$(realpath "${link_path}")" ; then - try_remove_file "$link_file" - print_warning "Removed broken link for: $link_name" - else - create_shortcut_from_link - if [[ "${SHORTCUT_DUPLICATE}" == "true" ]] ; then - print_info "Created link for duplicate: $link_name - $prefix_name [$number_duplication]" - else - print_info "Created link for: $link_name" - fi - fi - done - + pw_auto_create_shortcut add_in_stop_portwine unset SKIP_CHECK_UPDATES exit 0 @@ -1376,8 +1318,6 @@ create_shortcut_from_link () { PORTPROTON_NAME="$link_name" PW_RESIZE_TO=128 - try_remove_file "${PORT_WINE_PATH}/data/img/setup.png" - try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png" try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" @@ -1397,7 +1337,6 @@ create_shortcut_from_link () { fi fi - rm -f "${link_file}" if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" &>/dev/null ; then create_new_dir "${PORT_WINE_PATH}/duplicate" @@ -1484,6 +1423,68 @@ create_shortcut_from_link () { fi } +pw_auto_create_shortcut () { + [[ "${PW_CHECK_AUTOINSTALL}" == 1 ]] && return 0 + unset LINKS + orig_IFS="$IFS" && IFS=$'\n' + for link_file in "${PORT_WINE_PATH}"/prefixes/*/drive_c/users/steamuser/Desktop/*.lnk + do + if echo "$link_file" | grep "\*.lnk" &>/dev/null + then continue + else LINKS+=("$link_file") + fi + done + IFS="$orig_IFS" + [[ -z "$LINKS" ]] && return 0 + + for link_file in "${LINKS[@]}"; do + if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then + prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ + && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then + link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + else + link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + fi + link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') + link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + else + if ! command -v exiftool &>/dev/null ; then + print_warning "use portable exiftool" + env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" + prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ + && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then + link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + else + link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + fi + link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') + link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + else + yad_error "exiftool - broken!" + fi + fi + + try_remove_file "$link_file" + + if ! exe_path="$(realpath "${link_path}")" ; then + print_warning "Removed broken link for: $link_name" + else + if [[ "${SHORTCUT_DUPLICATE}" == "true" ]] ; then + print_info "Created link for duplicate: $link_name - $prefix_name [$number_duplication]" + else + print_info "Created link for: $link_name" + fi + create_shortcut_from_link + fi + done +} + pw_init_db () { if [[ -f "${portwine_exe}" ]] ; then PORTWINE_DB="$(basename "${portwine_exe}" .exe)" @@ -2093,6 +2094,7 @@ start_portwine () { pw_wineboot -r fi fi + rm -f "${PORT_WINE_PATH}"/prefixes/*/drive_c/users/*/Desktop/*.lnk echo "${PW_WINE_USE}" > "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index 4b7fe64d..6f8abf78 100755 --- a/data_from_portwine/scripts/var +++ b/data_from_portwine/scripts/var @@ -1,6 +1,6 @@ #!/usr/bin/env bash #Author: Castro-Fidel (linux-gaming.ru) -#SCRIPTS_NEXT_VERSION=2327 +#SCRIPTS_NEXT_VERSION=2328 #SCRIPTS_STABLE_VERSION=2327 ######################################################################## export LANGUAGES_LIST="ru es"