Compare commits
26 Commits
d91580f18e
...
6fd26a2110
Author | SHA1 | Date | |
---|---|---|---|
|
6fd26a2110 | ||
|
7cfd56f98e | ||
|
c784add1e2 | ||
|
b2830979bf | ||
|
aa4c8cabf9 | ||
|
cae792b3f7 | ||
|
f366f1e7e3 | ||
|
3fb9cd8c7e | ||
|
4bff0c99de | ||
|
b5370b3d42 | ||
|
2332b93353 | ||
|
c4431536bf | ||
|
1ae9f5a5b1 | ||
|
54be04a474 | ||
|
fd3cfffcb5 | ||
|
8d71f99b36 | ||
|
cb8f27e673 | ||
|
4446ddd6ab | ||
|
e958e49b93 | ||
|
c278df4e84 | ||
|
4c0904a5f8 | ||
|
4c5ce94067 | ||
|
109b27b3ba | ||
|
aa1e52602e | ||
|
47c0fb5b75 | ||
|
df3f6de16f |
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2024 Castro-Fidel (linux-gaming.ru)
|
Copyright (c) 2025 Castro-Fidel (linux-gaming.ru)
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -2,6 +2,16 @@ You can help us in the development of the project on the website: https://linux-
|
|||||||
----------------------------------------
|
----------------------------------------
|
||||||
Changelog:
|
Changelog:
|
||||||
|
|
||||||
|
###Scripts version 2387### / Date: 04.02.2025 / Download update size: 10 megabytes
|
||||||
|
* updated versions:
|
||||||
|
* DXVK_GIT "2.5.3-31" (shared with dxvk-nvapi)
|
||||||
|
* VKD3D_GIT "1.1-4367" (shared with vkd3d-shader)
|
||||||
|
* added the ability to replace WINEDEBUG variable arguments in user.conf or .ppdb settings files.
|
||||||
|
* improved icon creation functions (thanks to Htylol)
|
||||||
|
* added Steam Play support for games supported via PortProton and the selected Proton version on Steam (thanks to alex2844)
|
||||||
|
* fixed windows operation, paths in game launch arguments (thanks to Boria138)
|
||||||
|
* fixed errors with empty "dist" directory
|
||||||
|
|
||||||
###Scripts version 2386### / Date: 09.01.2025 / Download update size: 4 megabytes
|
###Scripts version 2386### / Date: 09.01.2025 / Download update size: 4 megabytes
|
||||||
* corrected permissions when creating desktop files (thanks to Boria138)
|
* corrected permissions when creating desktop files (thanks to Boria138)
|
||||||
* fixed the function of rolling back scripts from the archive if there is no scripts_backup directory (thanks to Boria138)
|
* fixed the function of rolling back scripts from the archive if there is no scripts_backup directory (thanks to Boria138)
|
||||||
|
@ -2,6 +2,16 @@
|
|||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
История изменений:
|
История изменений:
|
||||||
|
|
||||||
|
###Scripts version 2387### / Дата: 04.02.2025 / Размер скачиваемого обновления: 10 мегабайт
|
||||||
|
* обновлены версии:
|
||||||
|
* DXVK_GIT "2.5.3-31" (совместно с dxvk-nvapi)
|
||||||
|
* VKD3D_GIT "1.1-4367" (совместно vkd3d-shader)
|
||||||
|
* добавлена возможность замещения аргументов переменной WINEDEBUG в user.conf или .ppdb файлах настроек
|
||||||
|
* улучшение функций создания иконок (спасибо Htylol)
|
||||||
|
* добавлена поддержка Steam Play для игр установленных с помощью PortProton и когда выбрана версия proton в steam (спасибо alex2844)
|
||||||
|
* исправлена работа windows путей в аргументах запуска к игре (спасибо Boria138)
|
||||||
|
* исправлены ошибки при пустом каталоге "dist"
|
||||||
|
|
||||||
###Scripts version 2386### / Дата: 09.01.2025 / Размер скачиваемого обновления: 4 мегабайта
|
###Scripts version 2386### / Дата: 09.01.2025 / Размер скачиваемого обновления: 4 мегабайта
|
||||||
* исправление прав при создании desktop файлов (спасибо Boria138)
|
* исправление прав при создании desktop файлов (спасибо Boria138)
|
||||||
* исправлена функция отката скриптов из архива, если нет каталога scripts_backup (спасибо Boria138)
|
* исправлена функция отката скриптов из архива, если нет каталога scripts_backup (спасибо Boria138)
|
||||||
|
@ -293,7 +293,7 @@ parseSteamShortcutEntryLaunchOptions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
parseSteamTargetExe() {
|
parseSteamTargetExe() {
|
||||||
grep -E 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}'
|
grep -E '^[^# ]*?(flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}'
|
||||||
}
|
}
|
||||||
|
|
||||||
restartSteam() {
|
restartSteam() {
|
||||||
@ -356,10 +356,10 @@ addGrids() {
|
|||||||
fi
|
fi
|
||||||
if [[ -n "${SteamGridDBId}" ]] || [[ -n "${SteamAppId}" ]]; then
|
if [[ -n "${SteamGridDBId}" ]] || [[ -n "${SteamAppId}" ]]; then
|
||||||
create_new_dir "${STCFGPATH}/grid"
|
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" "${NOSTAPPID:-0}.jpg" "mimes=image/jpeg" "dimensions=460x215,920x430" || downloadImageSteam "header.jpg" "${NOSTAPPID:-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 "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" "${NOSTAIDGRID:-0}_hero.jpg" "mimes=image/jpeg" || downloadImageSteam "library_hero.jpg" "${NOSTAIDGRID:-0}_hero.jpg" || echo "Failed to load library_hero.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" "${NOSTAIDGRID:-0}_logo.png" "mimes=image/png" || downloadImageSteam "logo.png" "${NOSTAIDGRID:-0}_logo.png" || echo "Failed to load logo.png"
|
downloadImageSteamGridDB "logos" "${NOSTAPPID:-0}_logo.png" "mimes=image/png" || downloadImageSteam "logo.png" "${NOSTAPPID:-0}_logo.png" || echo "Failed to load logo.png"
|
||||||
else
|
else
|
||||||
echo "Game is not found"
|
echo "Game is not found"
|
||||||
fi
|
fi
|
||||||
@ -423,16 +423,18 @@ removeNonSteamGame() {
|
|||||||
if [[ -n "${NOSTSHPATH}" ]]; then
|
if [[ -n "${NOSTSHPATH}" ]]; then
|
||||||
mv "${SCPATH}" "${SCPATH//.vdf}_${PROGNAME}_backup.vdf" 2>/dev/null
|
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
|
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}")
|
NOSTAPPNAME=$(jq -r '.name' <<< "${game}")
|
||||||
NOSTEXEPATH=$(jq -r '.exe' <<< "${game}")
|
NOSTEXEPATH=$(jq -r '.exe' <<< "${game}")
|
||||||
NOSTSTDIR=$(jq -r '.dir' <<< "${game}")
|
NOSTSTDIR=$(jq -r '.dir' <<< "${game}")
|
||||||
NOSTICONPATH=$(jq -r '.icon' <<< "${game}")
|
NOSTICONPATH=$(jq -r '.icon' <<< "${game}")
|
||||||
NOSTARGS=$(jq -r '.args' <<< "${game}")
|
NOSTARGS=$(jq -r '.args' <<< "${game}")
|
||||||
NOSTAIDVDFHEX=$(bigToLittleEndian $(printf '%08x' "${NOSTAIDGRID}"))
|
NOSTAIDVDFHEX=$(bigToLittleEndian $(printf '%08x' "${NOSTAPPID}"))
|
||||||
addEntry
|
addEntry
|
||||||
done
|
done
|
||||||
rm -f "${STCFGPATH}/grid/${appid}.jpg" "${STCFGPATH}/grid/${appid}p.jpg" "${STCFGPATH}/grid/${appid}_hero.jpg" "${STCFGPATH}/grid/${appid}_logo.png"
|
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
|
if [[ -f "${NOSTSHPATH}" ]]; then
|
||||||
isInstallGame=false
|
isInstallGame=false
|
||||||
for STUIDCUR in $(getUserIds); do
|
for STUIDCUR in $(getUserIds); do
|
||||||
@ -464,8 +466,8 @@ addNonSteamGame() {
|
|||||||
if [[ -n "${SCPATH}" ]]; then
|
if [[ -n "${SCPATH}" ]]; then
|
||||||
[[ -z "${NOSTSHPATH}" ]] && NOSTSHPATH="${STEAM_SCRIPTS}/${name_desktop}.sh"
|
[[ -z "${NOSTSHPATH}" ]] && NOSTSHPATH="${STEAM_SCRIPTS}/${name_desktop}.sh"
|
||||||
NOSTAPPNAME="${name_desktop}"
|
NOSTAPPNAME="${name_desktop}"
|
||||||
NOSTAIDGRID=$(getAppId "${NOSTSHPATH}")
|
NOSTAPPID=$(getAppId "${NOSTSHPATH}")
|
||||||
if [[ -z "${NOSTAIDGRID}" ]]; then
|
if [[ -z "${NOSTAPPID}" ]]; then
|
||||||
NOSTEXEPATH="${NOSTSHPATH}"
|
NOSTEXEPATH="${NOSTSHPATH}"
|
||||||
if [[ -z "${NOSTSTDIR}" ]]; then
|
if [[ -z "${NOSTSTDIR}" ]]; then
|
||||||
NOSTSTDIR="${STEAM_SCRIPTS}"
|
NOSTSTDIR="${STEAM_SCRIPTS}"
|
||||||
@ -473,17 +475,16 @@ addNonSteamGame() {
|
|||||||
NOSTICONPATH="${PORT_WINE_PATH}/data/img/${name_desktop_png}.png"
|
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
|
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
|
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}"
|
create_new_dir "${STEAM_SCRIPTS}"
|
||||||
echo "#!/usr/bin/env bash" > "${NOSTSHPATH}"
|
cat <<-EOF > "${NOSTSHPATH}"
|
||||||
echo "export START_FROM_STEAM=1" >> "${NOSTSHPATH}"
|
#!/usr/bin/env bash
|
||||||
echo "export LD_PRELOAD=" >> "${NOSTSHPATH}"
|
export LD_PRELOAD=
|
||||||
if check_flatpak; then
|
export START_FROM_STEAM=1
|
||||||
echo "flatpak run ru.linux_gaming.PortProton \"${portwine_exe}\" " >> "${NOSTSHPATH}"
|
export START_FROM_FLATPAK=$(check_flatpak && echo 1 || echo 0)
|
||||||
else
|
"${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" "\$@"
|
||||||
echo "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${portwine_exe}\" " >> "${NOSTSHPATH}"
|
EOF
|
||||||
fi
|
|
||||||
chmod u+x "${NOSTSHPATH}"
|
chmod u+x "${NOSTSHPATH}"
|
||||||
|
|
||||||
if [[ -f "${SCPATH}" ]] ; then
|
if [[ -f "${SCPATH}" ]] ; then
|
||||||
|
@ -410,6 +410,7 @@ lsbash () {
|
|||||||
else
|
else
|
||||||
directory=$PWD
|
directory=$PWD
|
||||||
fi
|
fi
|
||||||
|
|
||||||
grep_find_file1 () {
|
grep_find_file1 () {
|
||||||
find_file_old=$find_file
|
find_file_old=$find_file
|
||||||
if [[ $grep_with_i == true ]] ; then
|
if [[ $grep_with_i == true ]] ; then
|
||||||
@ -975,10 +976,25 @@ debug_timer () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fix_icon_name_png () {
|
||||||
|
if [[ $1 =~ [\!\%\$\&\<] ]] ; then
|
||||||
|
local ICON_NAME_OLD=$1
|
||||||
|
local ICON_NAME_NEW=$ICON_NAME_OLD
|
||||||
|
local ICON_NAME_REGEX=(\! % \$ \& \<)
|
||||||
|
for i in "${ICON_NAME_REGEX[@]}" ; do
|
||||||
|
ICON_NAME_NEW="${ICON_NAME_NEW//$i/}"
|
||||||
|
done
|
||||||
|
sed -i "s|Icon=$ICON_NAME_OLD|Icon=$ICON_NAME_NEW|" "$2"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени)
|
# Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени)
|
||||||
# Параллельное создание базы по времени после завершения приложения
|
# Параллельное создание базы по времени после завершения приложения
|
||||||
search_desktop_file () {
|
search_desktop_file () {
|
||||||
local desktop_file desktop_file_new line1 line2 FILE_SHA256SUM_ARRAY EXEC_DESKTOP BROKEN_LINE FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND
|
local desktop_file desktop_file_new line1 line2 FILE_SHA256SUM_ARRAY EXEC_DESKTOP ICON_NAME BROKEN_LINE FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND
|
||||||
if [[ -z $FILE_SHA256SUM ]] ; then
|
if [[ -z $FILE_SHA256SUM ]] ; then
|
||||||
read -r -a FILE_SHA256SUM_ARRAY < <(sha256sum "$portwine_exe")
|
read -r -a FILE_SHA256SUM_ARRAY < <(sha256sum "$portwine_exe")
|
||||||
FILE_SHA256SUM=${FILE_SHA256SUM_ARRAY[0]}
|
FILE_SHA256SUM=${FILE_SHA256SUM_ARRAY[0]}
|
||||||
@ -996,7 +1012,9 @@ search_desktop_file () {
|
|||||||
EXEC_DESKTOP=${line1//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
|
EXEC_DESKTOP=${line1//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
[[ $line1 =~ ^Icon= ]] && ICON_NAME=${line1//Icon=/}
|
||||||
done < "$desktop_file"
|
done < "$desktop_file"
|
||||||
|
fix_icon_name_png "$ICON_NAME" "$desktop_file"
|
||||||
if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then
|
if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then
|
||||||
DESKTOP_CORRECT_FILE="$desktop_file"
|
DESKTOP_CORRECT_FILE="$desktop_file"
|
||||||
break
|
break
|
||||||
@ -1607,7 +1625,7 @@ init_wine_ver () {
|
|||||||
else
|
else
|
||||||
if [[ -d "${PORT_WINE_PATH}/data/dist" ]] ; then
|
if [[ -d "${PORT_WINE_PATH}/data/dist" ]] ; then
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
for dist_dir in $(lsbash "${PORT_WINE_PATH}/data/dist/") ; do
|
for dist_dir in $(ls -1 "${PORT_WINE_PATH}/data/dist") ; do
|
||||||
dist_dir_new=$(echo "${dist_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g)
|
dist_dir_new=$(echo "${dist_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g)
|
||||||
if [[ ! -d "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" ]] ; then
|
if [[ ! -d "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" ]] ; then
|
||||||
mv -- "${PORT_WINE_PATH}/data/dist/$dist_dir" "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}"
|
mv -- "${PORT_WINE_PATH}/data/dist/$dist_dir" "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}"
|
||||||
@ -1615,7 +1633,7 @@ init_wine_ver () {
|
|||||||
done
|
done
|
||||||
IFS="$orig_IFS"
|
IFS="$orig_IFS"
|
||||||
fi
|
fi
|
||||||
if [[ -z $(lsbash "${PORT_WINE_PATH}/data/dist/" --grep "${PW_WINE_USE}") ]] ; then
|
if [[ -z $(ls "${PORT_WINE_PATH}/data/dist/" | grep "${PW_WINE_USE}") ]] ; then
|
||||||
if [[ "$PW_WINE_USE" =~ PROTON_LG* ]]
|
if [[ "$PW_WINE_USE" =~ PROTON_LG* ]]
|
||||||
then export PW_WINE_USE=PROTON_LG
|
then export PW_WINE_USE=PROTON_LG
|
||||||
else export PW_WINE_USE=WINE_LG
|
else export PW_WINE_USE=WINE_LG
|
||||||
@ -1632,20 +1650,20 @@ init_wine_ver () {
|
|||||||
export WINELOADER="${WINEDIR}/bin/wine"
|
export WINELOADER="${WINEDIR}/bin/wine"
|
||||||
export WINESERVER="${WINEDIR}/bin/wineserver"
|
export WINESERVER="${WINEDIR}/bin/wineserver"
|
||||||
if [[ -d "${WINEDIR}/files" && ! -d "${WINEDIR}/dist" ]] ; then
|
if [[ -d "${WINEDIR}/files" && ! -d "${WINEDIR}/dist" ]] ; then
|
||||||
for clear_dist_files in $(lsbash "$WINEDIR" | sed -r "s/^(files|version)$//g") ; do
|
for clear_dist_files in $(ls "${WINEDIR}" | sed -r "s/^(files|version)$//g") ; do
|
||||||
rm -fr "${WINEDIR}/$clear_dist_files"
|
rm -fr "${WINEDIR}/$clear_dist_files"
|
||||||
done
|
done
|
||||||
mv -f "${WINEDIR}/files"/* "${WINEDIR}/"
|
mv -f "${WINEDIR}/files"/* "${WINEDIR}/"
|
||||||
rm -fr "${WINEDIR}/files"
|
rm -fr "${WINEDIR}/files"
|
||||||
elif [[ ! -d "${WINEDIR}/files" && -d "${WINEDIR}/dist" ]] ; then
|
elif [[ ! -d "${WINEDIR}/files" && -d "${WINEDIR}/dist" ]] ; then
|
||||||
for clear_dist_files in $(lsbash "$WINEDIR" | sed -r "s/^(dist|version)$//g") ; do
|
for clear_dist_files in $(ls "${WINEDIR}" | sed -r "s/^(dist|version)$//g") ; do
|
||||||
rm -fr "${WINEDIR}/$clear_dist_files"
|
rm -fr "${WINEDIR}/$clear_dist_files"
|
||||||
done
|
done
|
||||||
mv -f "${WINEDIR}/dist"/* "${WINEDIR}/"
|
mv -f "${WINEDIR}/dist"/* "${WINEDIR}/"
|
||||||
rm -fr "${WINEDIR}/dist"
|
rm -fr "${WINEDIR}/dist"
|
||||||
elif [[ -f "${WINEDIR}/proton_dist.tar" ]] ; then
|
elif [[ -f "${WINEDIR}/proton_dist.tar" ]] ; then
|
||||||
unpack "${WINEDIR}/proton_dist.tar" "${WINEDIR}/"
|
unpack "${WINEDIR}/proton_dist.tar" "${WINEDIR}/"
|
||||||
for clear_dist_files in $(lsbash "$WINEDIR" | sed -r "s/^(bin|lib|lib64|share|version)$//g") ; do
|
for clear_dist_files in $(ls "${WINEDIR}" | sed -r "s/^(bin|lib|lib64|share|version)$//g") ; do
|
||||||
rm -fr "${WINEDIR}/$clear_dist_files"
|
rm -fr "${WINEDIR}/$clear_dist_files"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@ -1934,7 +1952,7 @@ pw_kill_autostart () {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ -n "$(lsbash "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/ | grep -m 1 ".tmp")" ]] ; then
|
if [[ -n "$(ls "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/ | grep -m 1 ".tmp")" ]] ; then
|
||||||
rm -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/*.tmp
|
rm -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/*.tmp
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -2025,8 +2043,8 @@ pw_download_libs () {
|
|||||||
"${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ; then
|
"${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ; then
|
||||||
if unpack "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/" ; then
|
if unpack "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/" ; then
|
||||||
try_remove_file "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz"
|
try_remove_file "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz"
|
||||||
if lsbash "${PORT_WINE_TMP_PATH}" --grep libs_v --grep -v libs"${PW_LIBS_VER}" ; then
|
if ls "${PORT_WINE_TMP_PATH}" | grep libs_v | grep -v libs"${PW_LIBS_VER}" ; then
|
||||||
for RM_LIBS in $(lsbash "${PORT_WINE_TMP_PATH}" --grep libs_v --grep -v libs"${PW_LIBS_VER}")
|
for RM_LIBS in $(ls "${PORT_WINE_TMP_PATH}" | grep libs_v | grep -v libs"${PW_LIBS_VER}")
|
||||||
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}"
|
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@ -2176,9 +2194,9 @@ pw_check_and_download_plugins () {
|
|||||||
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
|
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
|
||||||
# TODO: drop clear prefix, and add update prefix from new plugins
|
# TODO: drop clear prefix, and add update prefix from new plugins
|
||||||
pw_clear_pfx
|
pw_clear_pfx
|
||||||
if lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}"
|
if ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}"
|
||||||
then
|
then
|
||||||
for RM_PLUGINS in $(lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}")
|
for RM_PLUGINS in $(ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}")
|
||||||
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
|
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@ -2209,9 +2227,9 @@ pw_check_and_download_plugins () {
|
|||||||
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
|
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
|
||||||
# TODO: drop clear prefix, and add update prefix from new plugins
|
# TODO: drop clear prefix, and add update prefix from new plugins
|
||||||
pw_clear_pfx
|
pw_clear_pfx
|
||||||
if lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}"
|
if ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}"
|
||||||
then
|
then
|
||||||
for RM_PLUGINS in $(lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}")
|
for RM_PLUGINS in $(ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}")
|
||||||
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
|
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@ -2338,7 +2356,7 @@ pw_init_db () {
|
|||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source "${PORTWINE_DB_FILE}"
|
source "${PORTWINE_DB_FILE}"
|
||||||
if echo "${portwine_exe}" | grep "/prefixes/" &>/dev/null ; then
|
if echo "${portwine_exe}" | grep "/prefixes/" &>/dev/null ; then
|
||||||
if [[ -z $(lsbash "${PORT_WINE_PATH}/prefixes/" --grep ^"${PW_PREFIX_NAME}"$) ]] \
|
if [[ -z $(ls "${PORT_WINE_PATH}/prefixes/" | grep -e ^"${PW_PREFIX_NAME}"$) ]] \
|
||||||
|| [[ -z $(grep -e ^"export PW_PREFIX_NAME=" "${PORTWINE_DB_FILE}" 2>/dev/null) ]]
|
|| [[ -z $(grep -e ^"export PW_PREFIX_NAME=" "${PORTWINE_DB_FILE}" 2>/dev/null) ]]
|
||||||
then
|
then
|
||||||
PW_PREFIX_NAME=$(echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
|
PW_PREFIX_NAME=$(echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
|
||||||
@ -2378,7 +2396,7 @@ pw_init_db () {
|
|||||||
try_copy_file "${PW_FIND_DB_FILE}" "${portwine_exe}".ppdb
|
try_copy_file "${PW_FIND_DB_FILE}" "${portwine_exe}".ppdb
|
||||||
PORTWINE_DB_FILE="${portwine_exe}".ppdb
|
PORTWINE_DB_FILE="${portwine_exe}".ppdb
|
||||||
if echo "${portwine_exe}" | grep "/prefixes/" &>/dev/null ; then
|
if echo "${portwine_exe}" | grep "/prefixes/" &>/dev/null ; then
|
||||||
if [[ -z $(lsbash "${PORT_WINE_PATH}/prefixes/" --grep ^"${PW_PREFIX_NAME}"$) ]] \
|
if [[ -z $(ls "${PORT_WINE_PATH}/prefixes/" | grep -e ^"${PW_PREFIX_NAME}"$) ]] \
|
||||||
|| [[ -z $(grep -e ^"export PW_PREFIX_NAME=" "${PORTWINE_DB_FILE}" 2>/dev/null) ]]
|
|| [[ -z $(grep -e ^"export PW_PREFIX_NAME=" "${PORTWINE_DB_FILE}" 2>/dev/null) ]]
|
||||||
then
|
then
|
||||||
PW_PREFIX_NAME=$(echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
|
PW_PREFIX_NAME=$(echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
|
||||||
@ -2427,7 +2445,7 @@ pw_init_db () {
|
|||||||
if [[ "${PW_WINE_CPU_TOPOLOGY}" == "disabled" ]] && [[ -n "${WINE_CPU_TOPOLOGY}" ]] ; then
|
if [[ "${PW_WINE_CPU_TOPOLOGY}" == "disabled" ]] && [[ -n "${WINE_CPU_TOPOLOGY}" ]] ; then
|
||||||
export PW_WINE_CPU_TOPOLOGY="${WINE_CPU_TOPOLOGY}"
|
export PW_WINE_CPU_TOPOLOGY="${WINE_CPU_TOPOLOGY}"
|
||||||
fi
|
fi
|
||||||
if lsbash "${PATH_TO_GAME}"/*_Data/Resources/ --grep "unity" &>/dev/null \
|
if ls "${PATH_TO_GAME}"/*_Data/Resources/ 2>/dev/null | grep "unity" &>/dev/null \
|
||||||
&& [[ "${PW_WINE_CPU_TOPOLOGY}" == "disabled" ]] \
|
&& [[ "${PW_WINE_CPU_TOPOLOGY}" == "disabled" ]] \
|
||||||
&& [[ $(grep -c ^"processor" /proc/cpuinfo) -gt "8" ]]
|
&& [[ $(grep -c ^"processor" /proc/cpuinfo) -gt "8" ]]
|
||||||
then
|
then
|
||||||
@ -2886,11 +2904,17 @@ edit_db_from_gui () {
|
|||||||
then
|
then
|
||||||
for mod_db in "$@" ; do
|
for mod_db in "$@" ; do
|
||||||
proxy_mod_db="${!mod_db}"
|
proxy_mod_db="${!mod_db}"
|
||||||
if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then
|
if (( ${#translations[@]} > 0 )); then
|
||||||
proxy_mod_db=disabled
|
if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then
|
||||||
elif [[ $proxy_mod_db =~ (${translations[Enabled]}|${translations[Enable]}) ]] ; then
|
proxy_mod_db=disabled
|
||||||
proxy_mod_db=enabled
|
elif [[ $proxy_mod_db =~ (${translations[Enabled]}|${translations[Enable]}) ]] ; then
|
||||||
|
proxy_mod_db=enabled
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Escaping backslashes and quotes for Windows paths
|
||||||
|
proxy_mod_db=$(echo "$proxy_mod_db" | sed 's/\\/\\\\\\\\/g; s/"/\\"/g')
|
||||||
|
|
||||||
if [[ $(<"${PORTWINE_DB_FILE}") =~ export\ ${mod_db}= ]]
|
if [[ $(<"${PORTWINE_DB_FILE}") =~ export\ ${mod_db}= ]]
|
||||||
then sed -i "s|export ${mod_db}=.*|export ${mod_db}=\"$proxy_mod_db\"|g" "${PORTWINE_DB_FILE}"
|
then sed -i "s|export ${mod_db}=.*|export ${mod_db}=\"$proxy_mod_db\"|g" "${PORTWINE_DB_FILE}"
|
||||||
else echo "export ${mod_db}=\"$proxy_mod_db\"" >> "${PORTWINE_DB_FILE}"
|
else echo "export ${mod_db}=\"$proxy_mod_db\"" >> "${PORTWINE_DB_FILE}"
|
||||||
@ -2982,9 +3006,15 @@ pw_create_gui_png () {
|
|||||||
edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION
|
edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION
|
||||||
fi
|
fi
|
||||||
|
|
||||||
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
|
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "48" "128"
|
||||||
|
|
||||||
PORTPROTON_NAME_PNG="${PORTPROTON_NAME// /_}"
|
PORTPROTON_NAME_PNG="${PORTPROTON_NAME// /_}"
|
||||||
|
if [[ $PORTPROTON_NAME_PNG =~ [\!\%\$\&\<] ]] ; then
|
||||||
|
local ICON_NAME_REGEX=(\! % \$ \& \<)
|
||||||
|
for i in "${ICON_NAME_REGEX[@]}" ; do
|
||||||
|
PORTPROTON_NAME_PNG="${PORTPROTON_NAME_PNG//$i/}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
if [[ -z "${PW_ICON_FOR_YAD}" ]] ; then
|
if [[ -z "${PW_ICON_FOR_YAD}" ]] ; then
|
||||||
if [[ -n "$(file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}")" ]] ; then
|
if [[ -n "$(file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}")" ]] ; then
|
||||||
export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png"
|
export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png"
|
||||||
@ -3140,18 +3170,18 @@ start_portwine () {
|
|||||||
var_winedlloverride_update "winegstreamer="
|
var_winedlloverride_update "winegstreamer="
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_variables VKD3D_DEBUG none
|
check_variables VKD3D_DEBUG "none"
|
||||||
check_variables VKD3D_SHADER_DEBUG none
|
check_variables VKD3D_SHADER_DEBUG "none"
|
||||||
check_variables DXVK_LOG_LEVEL none
|
check_variables DXVK_LOG_LEVEL "none"
|
||||||
check_variables DXVK_NVAPI_LOG_LEVEL none
|
check_variables DXVK_NVAPI_LOG_LEVEL "none"
|
||||||
check_variables VK_LOADER_DEBUG none
|
check_variables VK_LOADER_DEBUG "none"
|
||||||
check_variables VKBASALT_LOG_LEVEL none
|
check_variables VKBASALT_LOG_LEVEL "none"
|
||||||
if [[ "${PW_LOG}" == 1 ]] \
|
if [[ "${PW_LOG}" == 1 ]] \
|
||||||
|| [[ -n "$PW_DEBUG" ]]
|
|| [[ -n "$PW_DEBUG" ]]
|
||||||
then
|
then
|
||||||
export WINEDEBUG="+loaddll,+gstreamer"
|
check_variables WINEDEBUG "+loaddll"
|
||||||
export WINE_MONO_TRACE="E:System.NotImplementedException"
|
check_variables WINE_MONO_TRACE "E:System.NotImplementedException"
|
||||||
export VKBASALT_LOG_LEVEL="error"
|
check_variables VKBASALT_LOG_LEVEL "error"
|
||||||
else
|
else
|
||||||
export WINEDEBUG="-all"
|
export WINEDEBUG="-all"
|
||||||
unset WINE_MONO_TRACE
|
unset WINE_MONO_TRACE
|
||||||
@ -4368,6 +4398,35 @@ pw_yad_form_vulkan () {
|
|||||||
fi
|
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
|
||||||
|
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
|
||||||
|
debug_timer --end -s "PW_TIME_IN_GAME"
|
||||||
|
PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 ))
|
||||||
|
search_desktop_file
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
portwine_launch () {
|
portwine_launch () {
|
||||||
start_portwine
|
start_portwine
|
||||||
unset PW_VD_TMP
|
unset PW_VD_TMP
|
||||||
@ -6074,35 +6133,49 @@ resize_png () {
|
|||||||
print_error "no argument specified for resize_png"
|
print_error "no argument specified for resize_png"
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
local RESIZE_FILE="$1"
|
local RESIZE_FILE RESIZE_NAME_PNG resize_to resize_to_helper
|
||||||
local RESIZE_NAME_PNG="${2// /_}"
|
RESIZE_FILE="$1"
|
||||||
local RESIZE_TO="$3"
|
RESIZE_NAME_PNG="${2// /_}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" ]] \
|
for resize_to in "${@:3}" ; do
|
||||||
|| [[ ! -f "${RESIZE_FILE}" ]] \
|
if [[ $resize_to == 128 ]]
|
||||||
|| [[ ! ${RESIZE_FILE,,} =~ .exe$ ]]
|
then resize_to_helper=""
|
||||||
then
|
else resize_to_helper="_$resize_to"
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png"
|
|
||||||
try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png"
|
|
||||||
|
|
||||||
if check_flatpak ; then
|
|
||||||
if ! timeout 3 \
|
|
||||||
exe-thumbnailer --force-resize -s "$RESIZE_TO" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" \
|
|
||||||
&& [[ "$ALPINE_FP" != "1" ]]
|
|
||||||
then
|
|
||||||
print_error "exe-thumbnailer - broken!"
|
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
print_warning "use portable exe-thumbnailer"
|
if [[ $RESIZE_NAME_PNG =~ [\!\%\$\&\<] ]] ; then
|
||||||
env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \
|
local ICON_NAME_REGEX=(\! % \$ \& \<)
|
||||||
LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" \
|
for i in "${ICON_NAME_REGEX[@]}" ; do
|
||||||
"${PW_WINELIB}/runtime/files/bin/python3.9" \
|
RESIZE_NAME_PNG="${RESIZE_NAME_PNG//$i/}"
|
||||||
"${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" --force-resize -s "$RESIZE_TO" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png"
|
done
|
||||||
fi
|
fi
|
||||||
return 0
|
|
||||||
|
if [[ -f "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}${resize_to_helper}.png" ]] \
|
||||||
|
|| [[ ! -f "${RESIZE_FILE}" ]] \
|
||||||
|
|| [[ ! ${RESIZE_FILE,,} =~ .exe$ ]]
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png"
|
||||||
|
try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png"
|
||||||
|
|
||||||
|
if check_flatpak ; then
|
||||||
|
if ! timeout 3 \
|
||||||
|
exe-thumbnailer --force-resize -s "$resize_to" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}${resize_to_helper}.png" \
|
||||||
|
&& [[ "$ALPINE_FP" != "1" ]]
|
||||||
|
then
|
||||||
|
print_error "exe-thumbnailer - broken!"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_warning "use portable exe-thumbnailer"
|
||||||
|
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" --force-resize -s "$resize_to" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}${resize_to_helper}.png"
|
||||||
|
fi
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# GUI CREATE SHORTCUT
|
# GUI CREATE SHORTCUT
|
||||||
@ -6122,6 +6195,12 @@ portwine_create_shortcut () {
|
|||||||
export name_desktop="$PW_NAME_DESKTOP_PROXY"
|
export name_desktop="$PW_NAME_DESKTOP_PROXY"
|
||||||
|
|
||||||
[[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}"
|
[[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}"
|
||||||
|
if [[ $name_desktop_png =~ [\!\%\$\&\<] ]] ; then
|
||||||
|
local ICON_NAME_REGEX=(\! % \$ \& \<)
|
||||||
|
for i in "${ICON_NAME_REGEX[@]}" ; do
|
||||||
|
name_desktop_png="${name_desktop_png//$i/}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \
|
OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \
|
||||||
--gui-type="settings-shortcut" \
|
--gui-type="settings-shortcut" \
|
||||||
@ -6287,7 +6366,7 @@ pw_auto_create_shortcut () {
|
|||||||
print_info "Created link for: $link_name"
|
print_info "Created link for: $link_name"
|
||||||
PORTPROTON_NAME="$link_name"
|
PORTPROTON_NAME="$link_name"
|
||||||
export portwine_exe="$exe_path"
|
export portwine_exe="$exe_path"
|
||||||
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
|
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "48" "128"
|
||||||
export PW_NO_RESTART_PPDB=1
|
export PW_NO_RESTART_PPDB=1
|
||||||
portwine_create_shortcut
|
portwine_create_shortcut
|
||||||
fi
|
fi
|
||||||
@ -6327,6 +6406,12 @@ portwine_change_shortcut () {
|
|||||||
|
|
||||||
pw_create_gui_png
|
pw_create_gui_png
|
||||||
[[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}"
|
[[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}"
|
||||||
|
if [[ $name_desktop_png =~ [\!\%\$\&\<] ]] ; then
|
||||||
|
local ICON_NAME_REGEX=(\! % \$ \& \<)
|
||||||
|
for i in "${ICON_NAME_REGEX[@]}" ; do
|
||||||
|
name_desktop_png="${name_desktop_png//$i/}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \
|
OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \
|
||||||
--gui-type="settings-shortcut" \
|
--gui-type="settings-shortcut" \
|
||||||
|
@ -3,16 +3,18 @@
|
|||||||
#HogwartsLegacy.exe
|
#HogwartsLegacy.exe
|
||||||
#Rating=1-5
|
#Rating=1-5
|
||||||
#####################examples###########################
|
#####################examples###########################
|
||||||
if [[ "$LANGUAGE" == "ru" ]] ; then
|
if [[ $(cat /proc/cpuinfo | grep umip) ]] ; then
|
||||||
export PW_COMMENT_DB="Если у вас игра не запускается, то необходимо добавить
|
if [[ "$LANGUAGE" == "ru" ]] ; then
|
||||||
|
export PW_COMMENT_DB="Если у вас игра не запускается, то необходимо добавить
|
||||||
clearcpuid=514 в раздел GRUB_CMDLINE_LINUX_DEFAULT
|
clearcpuid=514 в раздел GRUB_CMDLINE_LINUX_DEFAULT
|
||||||
в файле /etc/default/grub. Для упрощения можно использовать
|
в файле /etc/default/grub. Для упрощения можно использовать
|
||||||
утилиту Grub Customizer"
|
утилиту Grub Customizer"
|
||||||
else
|
else
|
||||||
export PW_COMMENT_DB="If your game does not start, you need to add
|
export PW_COMMENT_DB="If your game does not start, you need to add
|
||||||
clearcpuid=514 to the GRUB_CMDLINE_LINUX_DEFAULT section
|
clearcpuid=514 to the GRUB_CMDLINE_LINUX_DEFAULT section
|
||||||
in the /etc/default/grub file. To simplify things, you can use
|
in the /etc/default/grub file. To simplify things, you can use
|
||||||
Grub Customizer utility"
|
Grub Customizer utility"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
export PW_VULKAN_USE="2"
|
export PW_VULKAN_USE="2"
|
||||||
|
|
||||||
|
@ -6,6 +6,11 @@ export url_site="https://linux-gaming.ru/portproton/"
|
|||||||
export url_cloud="https://cloud.linux-gaming.ru/portproton"
|
export url_cloud="https://cloud.linux-gaming.ru/portproton"
|
||||||
export url_git="https://git.linux-gaming.ru/CastroFidel/PortWINE"
|
export url_git="https://git.linux-gaming.ru/CastroFidel/PortWINE"
|
||||||
########################################################################
|
########################################################################
|
||||||
|
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
|
||||||
echo '
|
echo '
|
||||||
█░░ █ █▄░█ █░█ ▀▄▀ ▄▄ █▀▀ ▄▀█ █▀▄▀█ █ █▄░█ █▀▀ ░ █▀█ █░█
|
█░░ █ █▄░█ █░█ ▀▄▀ ▄▄ █▀▀ ▄▀█ █▀▄▀█ █ █▄░█ █▀▀ ░ █▀█ █░█
|
||||||
█▄▄ █ █░▀█ █▄█ █░█ ░░ █▄█ █▀█ █░▀░█ █ █░▀█ █▄█ ▄ █▀▄ █▄█
|
█▄▄ █ █░▀█ █▄█ █░█ ░░ █▄█ █▀█ █░▀░█ █ █░▀█ █▄█ ▄ █▀▄ █▄█
|
||||||
@ -96,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 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 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 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 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_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
|
unset PW_TERM PW_EXEC_FROM_DESKTOP WEBKIT_DISABLE_DMABUF_RENDERER PW_AMD_VULKAN_USE PW_VK_ICD_FILENAMES LAUNCH_URI
|
||||||
@ -115,15 +120,14 @@ echo "" > "${PW_TMPFS_PATH}/tmp_yad_form"
|
|||||||
echo "" > "${PW_TMPFS_PATH}/tmp_yad_form_vulkan"
|
echo "" > "${PW_TMPFS_PATH}/tmp_yad_form_vulkan"
|
||||||
|
|
||||||
create_new_dir "${PORT_WINE_PATH}/data/dist"
|
create_new_dir "${PORT_WINE_PATH}/data/dist"
|
||||||
pushd "${PORT_WINE_PATH}/data/dist/" 1>/dev/null || fatal
|
IFS=$'\n'
|
||||||
for dist_dir in ./* ; do
|
for dist_dir in $(ls -1 "${PORT_WINE_PATH}/data/dist") ; do
|
||||||
[[ -d "$dist_dir" ]] || continue
|
dist_dir_new=$(echo "${dist_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g)
|
||||||
dist_dir_new="${dist_dir//[[:blank:]]/_}"
|
|
||||||
if [[ ! -d "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" ]] ; then
|
if [[ ! -d "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" ]] ; then
|
||||||
mv -- "${PORT_WINE_PATH}/data/dist/$dist_dir" "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}"
|
mv -- "${PORT_WINE_PATH}/data/dist/$dist_dir" "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
popd 1>/dev/null || fatal
|
IFS="$orig_IFS"
|
||||||
|
|
||||||
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DEFAULT"
|
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DEFAULT"
|
||||||
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DOTNET"
|
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DOTNET"
|
||||||
@ -163,7 +167,10 @@ export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
|
|||||||
try_remove_dir "${PW_WINELIB}/var"
|
try_remove_dir "${PW_WINELIB}/var"
|
||||||
install_ver="$(<"${PORT_WINE_TMP_PATH}/PortProton_ver")"
|
install_ver="$(<"${PORT_WINE_TMP_PATH}/PortProton_ver")"
|
||||||
export install_ver
|
export install_ver
|
||||||
scripts_install_ver="$(<"${PORT_WINE_TMP_PATH}/scripts_ver")"
|
if [[ -f "${PORT_WINE_TMP_PATH}/scripts_ver" ]]
|
||||||
|
then scripts_install_ver="$(<"${PORT_WINE_TMP_PATH}/scripts_ver")"
|
||||||
|
else scripts_install_ver="2025"
|
||||||
|
fi
|
||||||
export scripts_install_ver
|
export scripts_install_ver
|
||||||
export WINETRICKS_DOWNLOADER="curl"
|
export WINETRICKS_DOWNLOADER="curl"
|
||||||
export USER_CONF="${PORT_WINE_PATH}/data/user.conf"
|
export USER_CONF="${PORT_WINE_PATH}/data/user.conf"
|
||||||
@ -191,6 +198,12 @@ if [[ $TRANSLATIONS_VER != "$scripts_install_ver" ]] ; then
|
|||||||
source "$PW_CACHE_LANG_PATH/$LANGUAGE"
|
source "$PW_CACHE_LANG_PATH/$LANGUAGE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then
|
||||||
|
steamplay_launch "${@:2}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
unset WINEPREFIX
|
||||||
|
|
||||||
# check PortProton theme
|
# check PortProton theme
|
||||||
if [[ -n "$GUI_THEME" ]] \
|
if [[ -n "$GUI_THEME" ]] \
|
||||||
&& [[ -f "$PW_GUI_THEMES_PATH/$GUI_THEME.pptheme" ]]
|
&& [[ -f "$PW_GUI_THEMES_PATH/$GUI_THEME.pptheme" ]]
|
||||||
@ -645,6 +658,12 @@ else
|
|||||||
fi
|
fi
|
||||||
[[ $line1 =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]=${line1//Icon=/}
|
[[ $line1 =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]=${line1//Icon=/}
|
||||||
done < "$desktop_file"
|
done < "$desktop_file"
|
||||||
|
if fix_icon_name_png "${PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]}" "$desktop_file" ; then
|
||||||
|
ICON_NAME_REGEX=(\! % \$ \& \<)
|
||||||
|
for i in "${ICON_NAME_REGEX[@]}" ; do
|
||||||
|
PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]//$i/}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new"
|
PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new"
|
||||||
# Для конвертации существующих .desktop файлов flatpak в натив и наоборот
|
# Для конвертации существующих .desktop файлов flatpak в натив и наоборот
|
||||||
if [[ ${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]} =~ ^"Exec=flatpak run ru.linux_gaming.PortProton " ]] ; then
|
if [[ ${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]} =~ ^"Exec=flatpak run ru.linux_gaming.PortProton " ]] ; then
|
||||||
@ -702,20 +721,6 @@ else
|
|||||||
for dp in "${PW_AMOUNT_NEW_DESKTOP[@]}" "${PW_AMOUNT_OLD_DESKTOP[@]}" ; do
|
for dp in "${PW_AMOUNT_NEW_DESKTOP[@]}" "${PW_AMOUNT_OLD_DESKTOP[@]}" ; do
|
||||||
PW_DESKTOP_FILES="${PW_ALL_DF[$dp]}"
|
PW_DESKTOP_FILES="${PW_ALL_DF[$dp]}"
|
||||||
PW_DESKTOP_FILES_SHOW="$PW_DESKTOP_FILES"
|
PW_DESKTOP_FILES_SHOW="$PW_DESKTOP_FILES"
|
||||||
PW_ICON_PATH[dp]=${PW_ICON_PATH[dp]%.png}
|
|
||||||
PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON[dp]//\"/}"
|
|
||||||
|
|
||||||
PW_NAME_D_ICON_128="${PW_ICON_PATH[dp]}"
|
|
||||||
resize_png "$PW_NAME_D_ICON_NEW" "${PW_NAME_D_ICON_128//"${PORT_WINE_PATH}/data/img/"/}" "128"
|
|
||||||
if [[ $PW_DESKTOP_FILES =~ [\!\%\$\&\<] || ${PW_ICON_PATH[dp]} =~ [\!\%\$\&\<] ]] ; then
|
|
||||||
PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
|
|
||||||
for i in "${PW_DESKTOP_FILES_SHOW_REGEX[@]}" ; do
|
|
||||||
PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//$i/}"
|
|
||||||
PW_ICON_PATH[dp]="${PW_ICON_PATH[dp]//$i/}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]}_48"
|
|
||||||
resize_png "$PW_NAME_D_ICON_NEW" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
|
|
||||||
|
|
||||||
if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then
|
if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then
|
||||||
PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;)
|
PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;)
|
||||||
@ -726,7 +731,19 @@ else
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
PW_GENERATE_BUTTONS+="--field= $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_NAME_D_ICON_48}.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%"
|
if [[ $PW_DESKTOP_FILES_SHOW =~ [\!\%\$\&\<] ]] ; then
|
||||||
|
PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
|
||||||
|
for i in "${PW_DESKTOP_FILES_SHOW_REGEX[@]}" ; do
|
||||||
|
PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//$i/}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
PW_ICON_PATH[dp]=${PW_ICON_PATH[dp]%.png}
|
||||||
|
PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON[dp]//\"/}"
|
||||||
|
|
||||||
|
resize_png "$PW_NAME_D_ICON_NEW" "${PW_ICON_PATH[dp]//"${PORT_WINE_PATH}/data/img/"/}" "48" "128"
|
||||||
|
|
||||||
|
PW_GENERATE_BUTTONS+="--field= $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_ICON_PATH[dp]}_48.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%"
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ $AMOUNT_GENERATE_BUTTONS == 1 ]] ; then
|
if [[ $AMOUNT_GENERATE_BUTTONS == 1 ]] ; then
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#Author: Castro-Fidel (linux-gaming.ru)
|
#Author: Castro-Fidel (linux-gaming.ru)
|
||||||
#SCRIPTS_NEXT_VERSION=2386
|
#SCRIPTS_NEXT_VERSION=2387
|
||||||
#SCRIPTS_STABLE_VERSION=2385
|
#SCRIPTS_STABLE_VERSION=2385
|
||||||
########################################################################
|
########################################################################
|
||||||
export AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET PW_WORLD_OF_SEA_BATTLE PW_RUSSIAN_FISHING PW_HO_YO_PLAY PW_FARLIGHT84 PW_WARFRAME PW_WGC PW_UBISOFT"
|
export AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET PW_WORLD_OF_SEA_BATTLE PW_RUSSIAN_FISHING PW_HO_YO_PLAY PW_FARLIGHT84 PW_WARFRAME PW_WGC PW_UBISOFT"
|
||||||
@ -54,9 +54,9 @@ export PW_VULKAN_USE="2"
|
|||||||
export VKD3D_LIMIT_TESS_FACTORS="64"
|
export VKD3D_LIMIT_TESS_FACTORS="64"
|
||||||
export DXVK_LEGACY_VER="1.6.1"
|
export DXVK_LEGACY_VER="1.6.1"
|
||||||
export DXVK_STABLE_VER="1.10.3-28"
|
export DXVK_STABLE_VER="1.10.3-28"
|
||||||
export DXVK_GIT_VER="2.5.2-1"
|
export DXVK_GIT_VER="2.5.3-31"
|
||||||
export VKD3D_STABLE_VER="1.1-2602"
|
export VKD3D_STABLE_VER="1.1-2602"
|
||||||
export VKD3D_GIT_VER="1.1-4326"
|
export VKD3D_GIT_VER="1.1-4367"
|
||||||
###VKBASALT###
|
###VKBASALT###
|
||||||
export PW_VKBASALT_EFFECTS="Curves:cas"
|
export PW_VKBASALT_EFFECTS="Curves:cas"
|
||||||
export PW_VKBASALT_FFX_CAS="0.50"
|
export PW_VKBASALT_FFX_CAS="0.50"
|
||||||
|
Loading…
Reference in New Issue
Block a user