From aa1e52602e83b0613129ab4beccb700e4a50cac7 Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Thu, 16 Jan 2025 02:54:28 +0500
Subject: [PATCH 1/9] support steamPlay

---
 data_from_portwine/scripts/add_in_steam.sh | 67 ++++++++++++++++------
 1 file changed, 49 insertions(+), 18 deletions(-)

diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh
index 92254b3c..a0d316d5 100755
--- a/data_from_portwine/scripts/add_in_steam.sh
+++ b/data_from_portwine/scripts/add_in_steam.sh
@@ -293,7 +293,9 @@ parseSteamShortcutEntryLaunchOptions() {
 }
 
 parseSteamTargetExe() {
-	grep -E 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}'
+	exe=$(sed -n 's/^export portwine_exe="\([^"]*\)"/\1/p' "$1")
+	[[ -z "${exe}" ]] && exe=$(grep -E 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}')
+	[[ -n "${exe}" ]] && echo "${exe}"
 }
 
 restartSteam() {
@@ -356,10 +358,10 @@ addGrids() {
 	fi
 	if [[ -n "${SteamGridDBId}" ]] || [[ -n "${SteamAppId}" ]]; then
 		create_new_dir "${STCFGPATH}/grid"
-		downloadImageSteamGridDB "grids" "${NOSTAIDGRID:-0}.jpg" "mimes=image/jpeg" "dimensions=460x215,920x430" || downloadImageSteam "header.jpg" "${NOSTAIDGRID:-0}.jpg" || echo "Failed to load header.jpg"
-		downloadImageSteamGridDB "grids" "${NOSTAIDGRID:-0}p.jpg" "mimes=image/jpeg" "dimensions=600x900,660x930" || downloadImageSteam "library_600x900_2x.jpg" "${NOSTAIDGRID:-0}p.jpg" || echo "Failed to load library_600x900_2x.jpg"
-		downloadImageSteamGridDB "heroes" "${NOSTAIDGRID:-0}_hero.jpg" "mimes=image/jpeg" || downloadImageSteam "library_hero.jpg" "${NOSTAIDGRID:-0}_hero.jpg" || echo "Failed to load library_hero.jpg"
-		downloadImageSteamGridDB "logos" "${NOSTAIDGRID:-0}_logo.png" "mimes=image/png" || downloadImageSteam "logo.png" "${NOSTAIDGRID:-0}_logo.png" || echo "Failed to load logo.png"
+		downloadImageSteamGridDB "grids" "${NOSTAPPID:-0}.jpg" "mimes=image/jpeg" "dimensions=460x215,920x430" || downloadImageSteam "header.jpg" "${NOSTAPPID:-0}.jpg" || echo "Failed to load header.jpg"
+		downloadImageSteamGridDB "grids" "${NOSTAPPID:-0}p.jpg" "mimes=image/jpeg" "dimensions=600x900,660x930" || downloadImageSteam "library_600x900_2x.jpg" "${NOSTAPPID:-0}p.jpg" || echo "Failed to load library_600x900_2x.jpg"
+		downloadImageSteamGridDB "heroes" "${NOSTAPPID:-0}_hero.jpg" "mimes=image/jpeg" || downloadImageSteam "library_hero.jpg" "${NOSTAPPID:-0}_hero.jpg" || echo "Failed to load library_hero.jpg"
+		downloadImageSteamGridDB "logos" "${NOSTAPPID:-0}_logo.png" "mimes=image/png" || downloadImageSteam "logo.png" "${NOSTAPPID:-0}_logo.png" || echo "Failed to load logo.png"
 	else
 		echo "Game is not found"
 	fi
@@ -423,16 +425,18 @@ removeNonSteamGame() {
 		if [[ -n "${NOSTSHPATH}" ]]; then
 			mv "${SCPATH}" "${SCPATH//.vdf}_${PROGNAME}_backup.vdf" 2>/dev/null
 			jq --arg id "${appid}" 'map(select(.id != $id))' <<< "${games}" | jq -c '.[]' | while read -r game; do
-				NOSTAIDGRID=$(jq -r '.id' <<< "${game}")
+				NOSTAPPID=$(jq -r '.id' <<< "${game}")
 				NOSTAPPNAME=$(jq -r '.name' <<< "${game}")
 				NOSTEXEPATH=$(jq -r '.exe' <<< "${game}")
 				NOSTSTDIR=$(jq -r '.dir' <<< "${game}")
 				NOSTICONPATH=$(jq -r '.icon' <<< "${game}")
 				NOSTARGS=$(jq -r '.args' <<< "${game}")
-				NOSTAIDVDFHEX=$(bigToLittleEndian $(printf '%08x' "${NOSTAIDGRID}"))
+				NOSTAIDVDFHEX=$(bigToLittleEndian $(printf '%08x' "${NOSTAPPID}"))
 				addEntry
 			done
 			rm -f "${STCFGPATH}/grid/${appid}.jpg" "${STCFGPATH}/grid/${appid}p.jpg" "${STCFGPATH}/grid/${appid}_hero.jpg" "${STCFGPATH}/grid/${appid}_logo.png"
+			rm -rf "${HOME}/.local/share/Steam/steamapps/compatdata/${appid}"
+			rm -rf "${HOME}/.local/share/Steam/steamapps/shadercache/${appid}"
 			if [[ -f "${NOSTSHPATH}" ]]; then
 				isInstallGame=false
 				for STUIDCUR in $(getUserIds); do
@@ -464,8 +468,8 @@ addNonSteamGame() {
 	if [[ -n "${SCPATH}" ]]; then
 		[[ -z "${NOSTSHPATH}" ]] && NOSTSHPATH="${STEAM_SCRIPTS}/${name_desktop}.sh"
 		NOSTAPPNAME="${name_desktop}"
-		NOSTAIDGRID=$(getAppId "${NOSTSHPATH}")
-		if [[ -z "${NOSTAIDGRID}" ]]; then
+		NOSTAPPID=$(getAppId "${NOSTSHPATH}")
+		if [[ -z "${NOSTAPPID}" ]]; then
 			NOSTEXEPATH="${NOSTSHPATH}"
 			if [[ -z "${NOSTSTDIR}" ]]; then
 				NOSTSTDIR="${STEAM_SCRIPTS}"
@@ -473,17 +477,18 @@ addNonSteamGame() {
 			NOSTICONPATH="${PORT_WINE_PATH}/data/img/${name_desktop_png}.png"
 			NOSTAIDVDF="$(generateShortcutVDFAppId "${NOSTAPPNAME}${NOSTEXEPATH}")"  # signed integer AppID, stored in the VDF as hexidecimal - ex: -598031679
 			NOSTAIDVDFHEX="$(generateShortcutVDFHexAppId "$NOSTAIDVDF")"  # 4byte little-endian hexidecimal of above 32bit signed integer, which we write out to the binary VDF - ex: c1c25adc
-			NOSTAIDGRID="$(extractSteamId32 "$NOSTAIDVDF")"  # unsigned 32bit ingeger version of "$NOSTAIDVDF", which is used as the AppID for Steam artwork ("grids"), as well as for our shortcuts
+			NOSTAPPID="$(extractSteamId32 "$NOSTAIDVDF")"  # unsigned 32bit ingeger version of "$NOSTAIDVDF", which is used as the AppID for Steam artwork ("grids"), as well as for our shortcuts
 
 			create_new_dir "${STEAM_SCRIPTS}"
-			echo "#!/usr/bin/env bash" > "${NOSTSHPATH}"
-			echo "export START_FROM_STEAM=1" >> "${NOSTSHPATH}"
-			echo "export LD_PRELOAD=" >> "${NOSTSHPATH}"
-			if check_flatpak; then
-				echo "flatpak run ru.linux_gaming.PortProton \"${portwine_exe}\" " >> "${NOSTSHPATH}"
-			else
-				echo "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${portwine_exe}\" " >> "${NOSTSHPATH}"
-			fi
+			cat <<-EOF > "${NOSTSHPATH}"
+				#!/usr/bin/env bash
+				export FLATPAK_IN_USE=$(check_flatpak && echo 1 || echo 0)
+				export portwine_exe="${portwine_exe}"
+				export PORT_WINE_PATH="${PORT_WINE_PATH}"
+				export PORT_SCRIPTS_PATH="\${PORT_WINE_PATH}/data/scripts"
+				source "\${PORT_SCRIPTS_PATH}/add_in_steam.sh"
+				rungame "\$@"
+			EOF
 			chmod u+x "${NOSTSHPATH}"
 
 			if [[ -f "${SCPATH}" ]] ; then
@@ -504,3 +509,29 @@ addNonSteamGame() {
 		return 1
 	fi
 }
+
+rungame() {
+	export START_FROM_STEAM=1
+	if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
+		cd "$(dirname "${portwine_exe}")"
+		PORTWINE_DB_FILE="${portwine_exe}.ppdb"
+		if [[ -f "${PORTWINE_DB_FILE}" ]]; then
+			source "${PORTWINE_DB_FILE}"
+		fi
+		for path in "ProgramData" "users/Public" "users/steamuser"; do
+			if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then
+				mkdir -p "${WINEPREFIX}/drive_c/users/"
+				rm -rf "${WINEPREFIX}/drive_c/${path}"
+				ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
+			fi
+		done
+		"${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}"
+	else
+		export LD_PRELOAD=
+		if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then
+			flatpak run ru.linux_gaming.PortProton "${portwine_exe}"
+		else
+			"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}"
+		fi
+	fi
+}

From 109b27b3bad3575f4d1d195c682457b4ec773e77 Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Thu, 16 Jan 2025 21:52:14 +0500
Subject: [PATCH 2/9] added saving statistics

---
 data_from_portwine/scripts/add_in_steam.sh  | 47 +++++++++++++--------
 data_from_portwine/scripts/functions_helper | 10 +++--
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh
index a0d316d5..4d12f250 100755
--- a/data_from_portwine/scripts/add_in_steam.sh
+++ b/data_from_portwine/scripts/add_in_steam.sh
@@ -512,26 +512,37 @@ addNonSteamGame() {
 
 rungame() {
 	export START_FROM_STEAM=1
-	if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
-		cd "$(dirname "${portwine_exe}")"
-		PORTWINE_DB_FILE="${portwine_exe}.ppdb"
-		if [[ -f "${PORTWINE_DB_FILE}" ]]; then
-			source "${PORTWINE_DB_FILE}"
-		fi
-		for path in "ProgramData" "users/Public" "users/steamuser"; do
-			if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then
-				mkdir -p "${WINEPREFIX}/drive_c/users/"
-				rm -rf "${WINEPREFIX}/drive_c/${path}"
-				ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
+	if [[ -n "${portwine_exe:-}" ]]; then
+		if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
+			cd "$(dirname "${portwine_exe}")"
+			PORTWINE_DB_FILE="${portwine_exe}.ppdb"
+			export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
+			source "${PORT_WINE_PATH}/data/user.conf"
+			source "${PORT_SCRIPTS_PATH}/functions_helper"
+			if [[ -f "${PORTWINE_DB_FILE}" ]]; then
+				source "${PORTWINE_DB_FILE}"
+			fi
+			for path in "ProgramData" "users/Public" "users/steamuser"; do
+				if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then
+					mkdir -p "${WINEPREFIX}/drive_c/users/"
+					rm -rf "${WINEPREFIX}/drive_c/${path}"
+					ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
+				fi
+			done
+			[[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
+			"${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}"
+			if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then
+				debug_timer --end -s "PW_TIME_IN_GAME"
+				PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
+				search_desktop_file
 			fi
-		done
-		"${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}"
-	else
-		export LD_PRELOAD=
-		if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then
-			flatpak run ru.linux_gaming.PortProton "${portwine_exe}"
 		else
-			"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}"
+			export LD_PRELOAD=
+			if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then
+				flatpak run ru.linux_gaming.PortProton "${portwine_exe}"
+			else
+				"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}"
+			fi
 		fi
 	fi
 }
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 862b4b72..8bc28868 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -2886,10 +2886,12 @@ edit_db_from_gui () {
     then
         for mod_db in "$@" ; do
             proxy_mod_db="${!mod_db}"
-            if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then
-                proxy_mod_db=disabled
-            elif [[ $proxy_mod_db =~ (${translations[Enabled]}|${translations[Enable]}) ]] ; then
-                proxy_mod_db=enabled
+            if (( ${#translations[@]} > 0 )); then
+                if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then
+                    proxy_mod_db=disabled
+                elif [[ $proxy_mod_db =~ (${translations[Enabled]}|${translations[Enable]}) ]] ; then
+                    proxy_mod_db=enabled
+                fi
             fi
             if [[ $(<"${PORTWINE_DB_FILE}") =~ export\ ${mod_db}= ]]
             then sed -i "s|export ${mod_db}=.*|export ${mod_db}=\"$proxy_mod_db\"|g" "${PORTWINE_DB_FILE}"

From 4c5ce9406742c5bad7c860c514dd6588615bdd7e Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Sat, 18 Jan 2025 03:29:54 +0500
Subject: [PATCH 3/9] cleaned

---
 data_from_portwine/scripts/add_in_steam.sh | 30 ++++++++++------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh
index 4d12f250..d89205c8 100755
--- a/data_from_portwine/scripts/add_in_steam.sh
+++ b/data_from_portwine/scripts/add_in_steam.sh
@@ -293,9 +293,7 @@ parseSteamShortcutEntryLaunchOptions() {
 }
 
 parseSteamTargetExe() {
-	exe=$(sed -n 's/^export portwine_exe="\([^"]*\)"/\1/p' "$1")
-	[[ -z "${exe}" ]] && exe=$(grep -E 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}')
-	[[ -n "${exe}" ]] && echo "${exe}"
+ 	grep -E '^[^# ]*?(rungame|flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}'
 }
 
 restartSteam() {
@@ -483,11 +481,8 @@ addNonSteamGame() {
 			cat <<-EOF > "${NOSTSHPATH}"
 				#!/usr/bin/env bash
 				export FLATPAK_IN_USE=$(check_flatpak && echo 1 || echo 0)
-				export portwine_exe="${portwine_exe}"
-				export PORT_WINE_PATH="${PORT_WINE_PATH}"
-				export PORT_SCRIPTS_PATH="\${PORT_WINE_PATH}/data/scripts"
-				source "\${PORT_SCRIPTS_PATH}/add_in_steam.sh"
-				rungame "\$@"
+				source "${PORT_SCRIPTS_PATH}/add_in_steam.sh"
+				rungame "${portwine_exe}" "\$@"
 			EOF
 			chmod u+x "${NOSTSHPATH}"
 
@@ -512,28 +507,31 @@ addNonSteamGame() {
 
 rungame() {
 	export START_FROM_STEAM=1
+	export portwine_exe="${1:-}"
 	if [[ -n "${portwine_exe:-}" ]]; then
 		if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
 			cd "$(dirname "${portwine_exe}")"
-			PORTWINE_DB_FILE="${portwine_exe}.ppdb"
+			export PORTWINE_DB_FILE="${portwine_exe}.ppdb"
+			export PORT_SCRIPTS_PATH=$(readlink -f "${BASH_SOURCE[0]%/*}")
+			export PORT_WINE_PATH=${PORT_SCRIPTS_PATH%/*/*}
 			export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
-			source "${PORT_WINE_PATH}/data/user.conf"
+			[[ -f "${PORT_WINE_PATH}/data/user.conf" ]] && source "${PORT_WINE_PATH}/data/user.conf"
+			[[ -f "${PORTWINE_DB_FILE}" ]] && source "${PORTWINE_DB_FILE}"
 			source "${PORT_SCRIPTS_PATH}/functions_helper"
-			if [[ -f "${PORTWINE_DB_FILE}" ]]; then
-				source "${PORTWINE_DB_FILE}"
-			fi
+			PORT_WINE_PREFIX="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}"
 			for path in "ProgramData" "users/Public" "users/steamuser"; do
+				mkdir -p "${PORT_WINE_PREFIX}/drive_c/${path}"
 				if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then
 					mkdir -p "${WINEPREFIX}/drive_c/users/"
 					rm -rf "${WINEPREFIX}/drive_c/${path}"
-					ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
+					ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
 				fi
 			done
 			[[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
-			"${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}"
+			"${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "${@:2}"
 			if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then
 				debug_timer --end -s "PW_TIME_IN_GAME"
-				PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
+				PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 ))
 				search_desktop_file
 			fi
 		else

From 4c0904a5f8d8dc4aadb93b90a8bf1fb5e4950043 Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Sat, 18 Jan 2025 03:44:54 +0500
Subject: [PATCH 4/9] check if flatpak is installed

---
 data_from_portwine/scripts/add_in_steam.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh
index d89205c8..651429ff 100755
--- a/data_from_portwine/scripts/add_in_steam.sh
+++ b/data_from_portwine/scripts/add_in_steam.sh
@@ -536,7 +536,7 @@ rungame() {
 			fi
 		else
 			export LD_PRELOAD=
-			if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then
+			if [[ "${FLATPAK_IN_USE:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then
 				flatpak run ru.linux_gaming.PortProton "${portwine_exe}"
 			else
 				"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}"

From c278df4e84d41bcbc2a2fd6f6d1bf41ad99df582 Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Sat, 18 Jan 2025 04:24:32 +0500
Subject: [PATCH 5/9] FLATPAK_IN_USE => START_FROM_FLATPAK

---
 data_from_portwine/scripts/add_in_steam.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh
index 651429ff..2aef70c5 100755
--- a/data_from_portwine/scripts/add_in_steam.sh
+++ b/data_from_portwine/scripts/add_in_steam.sh
@@ -480,7 +480,8 @@ addNonSteamGame() {
 			create_new_dir "${STEAM_SCRIPTS}"
 			cat <<-EOF > "${NOSTSHPATH}"
 				#!/usr/bin/env bash
-				export FLATPAK_IN_USE=$(check_flatpak && echo 1 || echo 0)
+				export START_FROM_STEAM=1
+				export START_FROM_FLATPAK=$(check_flatpak && echo 1 || echo 0)
 				source "${PORT_SCRIPTS_PATH}/add_in_steam.sh"
 				rungame "${portwine_exe}" "\$@"
 			EOF
@@ -506,7 +507,6 @@ addNonSteamGame() {
 }
 
 rungame() {
-	export START_FROM_STEAM=1
 	export portwine_exe="${1:-}"
 	if [[ -n "${portwine_exe:-}" ]]; then
 		if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
@@ -536,7 +536,7 @@ rungame() {
 			fi
 		else
 			export LD_PRELOAD=
-			if [[ "${FLATPAK_IN_USE:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then
+			if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then
 				flatpak run ru.linux_gaming.PortProton "${portwine_exe}"
 			else
 				"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}"

From e958e49b9373483c93f5f55a7e75b318f3ccd97c Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Sat, 18 Jan 2025 17:02:49 +0500
Subject: [PATCH 6/9] use start.sh

---
 data_from_portwine/scripts/add_in_steam.sh  | 45 ++-------------------
 data_from_portwine/scripts/functions_helper | 24 +++++++++++
 data_from_portwine/scripts/start.sh         |  9 +++++
 3 files changed, 36 insertions(+), 42 deletions(-)

diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh
index 2aef70c5..d0137db9 100755
--- a/data_from_portwine/scripts/add_in_steam.sh
+++ b/data_from_portwine/scripts/add_in_steam.sh
@@ -293,7 +293,7 @@ parseSteamShortcutEntryLaunchOptions() {
 }
 
 parseSteamTargetExe() {
- 	grep -E '^[^# ]*?(rungame|flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}'
+ 	grep -E '^[^# ]*?(flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}'
 }
 
 restartSteam() {
@@ -480,10 +480,10 @@ addNonSteamGame() {
 			create_new_dir "${STEAM_SCRIPTS}"
 			cat <<-EOF > "${NOSTSHPATH}"
 				#!/usr/bin/env bash
+				export LD_PRELOAD=
 				export START_FROM_STEAM=1
 				export START_FROM_FLATPAK=$(check_flatpak && echo 1 || echo 0)
-				source "${PORT_SCRIPTS_PATH}/add_in_steam.sh"
-				rungame "${portwine_exe}" "\$@"
+				"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" "\$@"
 			EOF
 			chmod u+x "${NOSTSHPATH}"
 
@@ -505,42 +505,3 @@ addNonSteamGame() {
 		return 1
 	fi
 }
-
-rungame() {
-	export portwine_exe="${1:-}"
-	if [[ -n "${portwine_exe:-}" ]]; then
-		if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
-			cd "$(dirname "${portwine_exe}")"
-			export PORTWINE_DB_FILE="${portwine_exe}.ppdb"
-			export PORT_SCRIPTS_PATH=$(readlink -f "${BASH_SOURCE[0]%/*}")
-			export PORT_WINE_PATH=${PORT_SCRIPTS_PATH%/*/*}
-			export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
-			[[ -f "${PORT_WINE_PATH}/data/user.conf" ]] && source "${PORT_WINE_PATH}/data/user.conf"
-			[[ -f "${PORTWINE_DB_FILE}" ]] && source "${PORTWINE_DB_FILE}"
-			source "${PORT_SCRIPTS_PATH}/functions_helper"
-			PORT_WINE_PREFIX="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}"
-			for path in "ProgramData" "users/Public" "users/steamuser"; do
-				mkdir -p "${PORT_WINE_PREFIX}/drive_c/${path}"
-				if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then
-					mkdir -p "${WINEPREFIX}/drive_c/users/"
-					rm -rf "${WINEPREFIX}/drive_c/${path}"
-					ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
-				fi
-			done
-			[[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
-			"${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "${@:2}"
-			if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then
-				debug_timer --end -s "PW_TIME_IN_GAME"
-				PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 ))
-				search_desktop_file
-			fi
-		else
-			export LD_PRELOAD=
-			if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then
-				flatpak run ru.linux_gaming.PortProton "${portwine_exe}"
-			else
-				"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}"
-			fi
-		fi
-	fi
-}
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 8bc28868..f14063fb 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -4370,6 +4370,30 @@ pw_yad_form_vulkan () {
     fi
 }
 
+steamplay_launch () {
+    if [[ -n "${portwine_exe:-}" ]]; then
+        cd "$(dirname "${portwine_exe}")"
+        export PORTWINE_DB_FILE="${portwine_exe}.ppdb"
+        [[ -f "${PORTWINE_DB_FILE}" ]] && source "${PORTWINE_DB_FILE}"
+        PORT_WINE_PREFIX="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}"
+        for path in "ProgramData" "users/Public" "users/steamuser"; do
+            mkdir -p "${PORT_WINE_PREFIX}/drive_c/${path}"
+            if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then
+                mkdir -p "${WINEPREFIX}/drive_c/users/"
+                rm -rf "${WINEPREFIX}/drive_c/${path}"
+                ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
+            fi
+        done
+        [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
+        echo "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@"
+        if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then
+            debug_timer --end -s "PW_TIME_IN_GAME"
+            PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 ))
+            search_desktop_file
+        fi
+    fi
+}
+
 portwine_launch () {
     start_portwine
     unset PW_VD_TMP
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 1d55a7bb..c6d138bc 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -6,6 +6,10 @@ export url_site="https://linux-gaming.ru/portproton/"
 export url_cloud="https://cloud.linux-gaming.ru/portproton"
 export url_git="https://git.linux-gaming.ru/CastroFidel/PortWINE"
 ########################################################################
+if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then
+    flatpak run ru.linux_gaming.PortProton "$@"
+    exit
+fi
 echo '
             █░░ █ █▄░█ █░█ ▀▄▀ ▄▄ █▀▀ ▄▀█ █▀▄▀█ █ █▄░█ █▀▀ ░ █▀█ █░█
             █▄▄ █ █░▀█ █▄█ █░█ ░░ █▄█ █▀█ █░▀░█ █ █░▀█ █▄█ ▄ █▀▄ █▄█
@@ -191,6 +195,11 @@ if [[ $TRANSLATIONS_VER != "$scripts_install_ver" ]] ; then
     source "$PW_CACHE_LANG_PATH/$LANGUAGE"
 fi
 
+if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
+    steamplay_launch "${@:2}"
+    exit
+fi
+
 # check PortProton theme
 if [[ -n "$GUI_THEME" ]] \
 && [[ -f "$PW_GUI_THEMES_PATH/$GUI_THEME.pptheme" ]]

From 4446ddd6ab76441c8230d650f63972e682699262 Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Sat, 18 Jan 2025 17:04:01 +0500
Subject: [PATCH 7/9] cleaned

---
 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 f14063fb..d620cfed 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -4385,7 +4385,7 @@ steamplay_launch () {
             fi
         done
         [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
-        echo "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@"
+        "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@"
         if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then
             debug_timer --end -s "PW_TIME_IN_GAME"
             PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 ))

From 8d71f99b3642f149fbf9dff3c2e18fd088e1c636 Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Fri, 24 Jan 2025 01:38:03 +0500
Subject: [PATCH 8/9] unset start_from_flatpak, move unset wineprefix

---
 data_from_portwine/scripts/start.sh | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index c6d138bc..d8ce7c99 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -6,7 +6,8 @@ export url_site="https://linux-gaming.ru/portproton/"
 export url_cloud="https://cloud.linux-gaming.ru/portproton"
 export url_git="https://git.linux-gaming.ru/CastroFidel/PortWINE"
 ########################################################################
-if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then
+if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && [[ -z "${STEAM_COMPAT_DATA_PATH:-}" ]] && command -v "flatpak" &>/dev/null; then
+    unset START_FROM_FLATPAK
     flatpak run ru.linux_gaming.PortProton "$@"
     exit
 fi
@@ -100,7 +101,7 @@ fi
 unset MANGOHUD MANGOHUD_DLSYM PW_NO_ESYNC PW_NO_FSYNC PW_VULKAN_USE WINEDLLOVERRIDES PW_NO_WRITE_WATCH PW_YAD_SET PW_ICON_FOR_YAD
 unset PW_CHECK_AUTOINSTALL PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PORTWINE_DB PORTWINE_DB_FILE RADV_PERFTEST
 unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_TO_GAME PW_START_DEBUG PORTPROTON_NAME PW_PATH
-unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR PW_WINE_CPU_TOPOLOGY
+unset PW_PREFIX_NAME VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR PW_WINE_CPU_TOPOLOGY
 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 RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT
 unset PW_TERM PW_EXEC_FROM_DESKTOP WEBKIT_DISABLE_DMABUF_RENDERER PW_AMD_VULKAN_USE PW_VK_ICD_FILENAMES LAUNCH_URI
@@ -199,6 +200,7 @@ if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
     steamplay_launch "${@:2}"
     exit
 fi
+unset WINEPREFIX
 
 # check PortProton theme
 if [[ -n "$GUI_THEME" ]] \

From fd3cfffcb51494cc2036d6a302afe1b643f515b3 Mon Sep 17 00:00:00 2001
From: Alex Smith <alex.smith2844@gmail.com>
Date: Fri, 24 Jan 2025 01:38:57 +0500
Subject: [PATCH 9/9] support PW_DLL_INSTALL on steamplay_launch

---
 data_from_portwine/scripts/functions_helper | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index d620cfed..38a65694 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -4384,6 +4384,11 @@ steamplay_launch () {
                 ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}"
             fi
         done
+        if [[ -n "${PW_DLL_INSTALL:-}" ]] ; then
+            update_winetricks
+            PATH="${PATH}:${PW_PLUGINS_PATH}/portable/bin" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32" \
+                "${PORT_WINE_TMP_PATH}/winetricks" -q ${PW_DLL_INSTALL}
+        fi
         [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
         "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@"
         if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then