Compare commits
37 Commits
ef83c60711
...
2a94a94a2d
Author | SHA1 | Date | |
---|---|---|---|
2a94a94a2d | |||
bab3977af0 | |||
2f25298ad1 | |||
af62974fdb | |||
d4c0104fcc
|
|||
67c419d7a4 | |||
4a3d9a6d6f | |||
100d5f49a6 | |||
235a267d43 | |||
a43b415d4b | |||
fc0aa3a3f8 | |||
4580894721 | |||
7036f06b6f | |||
36e3163edf | |||
576155e0df | |||
6e5cee5ccc | |||
8faed4e910 | |||
c85b706fee | |||
732a00183f | |||
4906e8cc3a | |||
51cc3610b8 | |||
3d6c08b319 | |||
0e0ec3028d | |||
92d86fb496 | |||
8b223bed38 | |||
fe1ff111fa | |||
3e67394c91 | |||
e3be4858b0 | |||
a81a8d8fe0 | |||
ae17cd8b01 | |||
00fed7a134 | |||
e89dae4f23 | |||
068d148eab | |||
c15ec0102f | |||
4ee7af0997 | |||
629f50e097 | |||
0c97d2c003 |
@ -7,8 +7,8 @@
|
|||||||
<a href="https://flathub.org/ru/apps/ru.linux_gaming.PortProton">
|
<a href="https://flathub.org/ru/apps/ru.linux_gaming.PortProton">
|
||||||
<img src="https://img.shields.io/flathub/downloads/ru.linux_gaming.PortProton?style=flat&logo=flathub" alt="Flathub Downloads">
|
<img src="https://img.shields.io/flathub/downloads/ru.linux_gaming.PortProton?style=flat&logo=flathub" alt="Flathub Downloads">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://discord.gg/FTaheP99wE">
|
<a href="https://t.me/linux_gaming_ru">
|
||||||
<img src="https://img.shields.io/discord/378683352946835456?logo=discord" alt="Discord">
|
<img src="https://img.shields.io/endpoint?&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Flinux_gaming_ru" alt="Telegram">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.youtube.com/@linux-gaming5986">
|
<a href="https://www.youtube.com/@linux-gaming5986">
|
||||||
<img src="https://img.shields.io/youtube/channel/subscribers/UCbI8OJx2D3q-4QKt4LffXTw?style=flat&logo=youtube" alt="YouTube Channel Subscribers">
|
<img src="https://img.shields.io/youtube/channel/subscribers/UCbI8OJx2D3q-4QKt4LffXTw?style=flat&logo=youtube" alt="YouTube Channel Subscribers">
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
<a href="https://flathub.org/apps/ru.linux_gaming.PortProton">
|
<a href="https://flathub.org/apps/ru.linux_gaming.PortProton">
|
||||||
<img src="https://img.shields.io/flathub/downloads/ru.linux_gaming.PortProton?style=flat&logo=flathub" alt="Flathub Downloads">
|
<img src="https://img.shields.io/flathub/downloads/ru.linux_gaming.PortProton?style=flat&logo=flathub" alt="Flathub Downloads">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://discord.gg/FTaheP99wE">
|
<a href="https://t.me/linux_gaming_ru">
|
||||||
<img src="https://img.shields.io/discord/378683352946835456?logo=discord" alt="Discord">
|
<img src="https://img.shields.io/endpoint?&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Flinux_gaming_ru" alt="Telegram">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.youtube.com/@linux-gaming5986">
|
<a href="https://www.youtube.com/@linux-gaming5986">
|
||||||
<img src="https://img.shields.io/youtube/channel/subscribers/UCbI8OJx2D3q-4QKt4LffXTw?style=flat&logo=youtube" alt="YouTube Channel Subscribers">
|
<img src="https://img.shields.io/youtube/channel/subscribers/UCbI8OJx2D3q-4QKt4LffXTw?style=flat&logo=youtube" alt="YouTube Channel Subscribers">
|
||||||
|
@ -2,6 +2,17 @@ You can help us in the development of the project on the website: https://linux-
|
|||||||
----------------------------------------
|
----------------------------------------
|
||||||
Changelog:
|
Changelog:
|
||||||
|
|
||||||
|
###Scripts version 2369### / Date: 31.10.2024 / Download update size: 4 megabytes
|
||||||
|
* added automatic installation of games (thanks to Chal55rus):
|
||||||
|
* Chicken Invaders Universe
|
||||||
|
* Eldevin
|
||||||
|
* The World of Nifty Craft
|
||||||
|
* Toribash
|
||||||
|
* improved performance of the time spent in the game counter (thanks to Htylol)
|
||||||
|
* fixed prefix backups for systems with SELinux (thanks to Htylol and Alek)
|
||||||
|
* updated CLI and added arguments: --launch, --edit-db (thanks to Htylol)
|
||||||
|
* many other improvements and script optimizations
|
||||||
|
|
||||||
###Scripts version 2368### / Date: 27.10.2024 / Download update size: 4 megabytes
|
###Scripts version 2368### / Date: 27.10.2024 / Download update size: 4 megabytes
|
||||||
* added automatic installation of games (thanks to Chal55rus):
|
* added automatic installation of games (thanks to Chal55rus):
|
||||||
* Goose Goose Duck
|
* Goose Goose Duck
|
||||||
|
@ -2,6 +2,17 @@
|
|||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
История изменений:
|
История изменений:
|
||||||
|
|
||||||
|
###Scripts version 2369### / Дата: 31.10.2024 / Размер скачиваемого обновления: 4 мегабайта
|
||||||
|
* добавлены автоустановки игр (спасибо Chal55rus):
|
||||||
|
* Chicken Invaders Universe
|
||||||
|
* Eldevin
|
||||||
|
* The World of Nifty Craft
|
||||||
|
* Toribash
|
||||||
|
* улучшена работа счетчика времени проведенного в игре (спасибо Htylol)
|
||||||
|
* исправлены бэкапы префиксов для систем с SELinux (спасибо Htylol и Alek)
|
||||||
|
* обновлен CLI и добавлены аргументы: --launch, --edit-db (спасибо Htylol)
|
||||||
|
* множество других улучшений и оптимизаций скриптов
|
||||||
|
|
||||||
###Scripts version 2368### / Дата: 27.10.2024 / Размер скачиваемого обновления: 4 мегабайта
|
###Scripts version 2368### / Дата: 27.10.2024 / Размер скачиваемого обновления: 4 мегабайта
|
||||||
* добавлены автоустановки игр (спасибо Chal55rus):
|
* добавлены автоустановки игр (спасибо Chal55rus):
|
||||||
* Goose Goose Duck
|
* Goose Goose Duck
|
||||||
|
BIN
data_from_portwine/img/gui/chickeninvadersuniverse.png
Normal file
BIN
data_from_portwine/img/gui/chickeninvadersuniverse.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
BIN
data_from_portwine/img/gui/eldevin.png
Normal file
BIN
data_from_portwine/img/gui/eldevin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.5 KiB |
BIN
data_from_portwine/img/gui/theworldofniftycraft.png
Normal file
BIN
data_from_portwine/img/gui/theworldofniftycraft.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.4 KiB |
BIN
data_from_portwine/img/gui/toribash.png
Normal file
BIN
data_from_portwine/img/gui/toribash.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
@ -63,6 +63,21 @@ export -f make_abbreviation
|
|||||||
|
|
||||||
check_variables () { [[ -z ${!1} ]] && export $1="$2" ;}
|
check_variables () { [[ -z ${!1} ]] && export $1="$2" ;}
|
||||||
|
|
||||||
|
# Эксортирует несколько переменных за один раз (одной командой)
|
||||||
|
# и создаёт список этих переменных в $keys_all
|
||||||
|
# К примеру set_several_variables PW_MANGOHUD=1 PW_VKBASALT=0
|
||||||
|
set_several_variables () {
|
||||||
|
local key value
|
||||||
|
unset keys_all
|
||||||
|
while (( $# > 0 )) ; do
|
||||||
|
key=${1//=*/}
|
||||||
|
value=${1//*=/}
|
||||||
|
keys_all+="$key "
|
||||||
|
export "$key"="$value"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
add_to_var () {
|
add_to_var () {
|
||||||
if ! echo ${!1} | grep "$2" &>/dev/null
|
if ! echo ${!1} | grep "$2" &>/dev/null
|
||||||
then export $1="${!1} $2"
|
then export $1="${!1} $2"
|
||||||
@ -526,7 +541,7 @@ try_download () {
|
|||||||
if [[ -n "${PW_AUTOINSTALL_EXE}" ]] \
|
if [[ -n "${PW_AUTOINSTALL_EXE}" ]] \
|
||||||
&& [[ "$no_mirror" == "true" ]]
|
&& [[ "$no_mirror" == "true" ]]
|
||||||
then
|
then
|
||||||
filename="$(basename "${PW_AUTOINSTALL_EXE}")"
|
filename="${PW_AUTOINSTALL_EXE//*\//}"
|
||||||
else
|
else
|
||||||
filename="$(basename "$1")"
|
filename="$(basename "$1")"
|
||||||
fi
|
fi
|
||||||
@ -560,7 +575,7 @@ try_download () {
|
|||||||
else
|
else
|
||||||
curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \
|
curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \
|
||||||
-H 'Pragma: no-cache' -L ${FIRST_URL[@]} -o "$dest" 2>&1 | \
|
-H 'Pragma: no-cache' -L ${FIRST_URL[@]} -o "$dest" 2>&1 | \
|
||||||
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|100||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
||||||
"$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \
|
"$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \
|
||||||
--auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
|
--auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
|
||||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE"
|
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE"
|
||||||
@ -571,7 +586,7 @@ try_download () {
|
|||||||
print_warning "Failed download $filename from ${FIRST_URL[0]}, trying mirror: ${SECOND_URL[0]}"
|
print_warning "Failed download $filename from ${FIRST_URL[0]}, trying mirror: ${SECOND_URL[0]}"
|
||||||
curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \
|
curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \
|
||||||
-H 'Pragma: no-cache' -L ${SECOND_URL[@]} -o "$dest" 2>&1 | \
|
-H 'Pragma: no-cache' -L ${SECOND_URL[@]} -o "$dest" 2>&1 | \
|
||||||
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|100||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
|
||||||
"$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \
|
"$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \
|
||||||
--auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
|
--auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
|
||||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE"
|
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders="$PROGRESS_BAR_BORDERS_SIZE"
|
||||||
@ -748,6 +763,26 @@ check_flatpak () {
|
|||||||
}
|
}
|
||||||
export -f check_flatpak
|
export -f check_flatpak
|
||||||
|
|
||||||
|
check_selinux () {
|
||||||
|
if [[ -n "$SELINUX_IN_USE" ]]
|
||||||
|
then [[ "$SELINUX_IN_USE" == 1 ]] && return 0 || return 1
|
||||||
|
fi
|
||||||
|
if check_flatpak ; then
|
||||||
|
if grep -i ^"SELINUX=enforcing" /run/host/etc/selinux/config &>/dev/null ; then
|
||||||
|
export SELINUX_IN_USE=1
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if grep -i ^"SELINUX=enforcing" /etc/selinux/config &>/dev/null ; then
|
||||||
|
export SELINUX_IN_USE=1
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
export SELINUX_IN_USE=0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
export -f check_selinux
|
||||||
|
|
||||||
background_pid () {
|
background_pid () {
|
||||||
local arg1=$1 # --start или --end
|
local arg1=$1 # --start или --end
|
||||||
local arg2=$2 # Название команды
|
local arg2=$2 # Название команды
|
||||||
@ -796,9 +831,9 @@ unpack () {
|
|||||||
[[ "$?" != 0 ]] && return 1 || return 0
|
[[ "$?" != 0 ]] && return 1 || return 0
|
||||||
elif [[ "$silent" != "true" ]] ; then
|
elif [[ "$silent" != "true" ]] ; then
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
pw_start_progress_bar_cover_block "${COVERS_PATH}/unpacking_${LANGUAGE_GIF}.gif"
|
pw_start_progress_bar_cover "${COVERS_PATH}/unpacking_${LANGUAGE_GIF}.gif" --block
|
||||||
$command "$1" -C "$2" 2>/dev/null
|
$command "$1" -C "$2" 2>/dev/null
|
||||||
pw_stop_progress_bar_cover_block
|
pw_stop_progress_bar
|
||||||
[[ "${PIPESTATUS[0]}" != 0 ]] && print_error "File $1 unpacking error." && return 1 || return 0
|
[[ "${PIPESTATUS[0]}" != 0 ]] && print_error "File $1 unpacking error." && return 1 || return 0
|
||||||
else
|
else
|
||||||
$command "$1" -C "$2" && return 0 || return 1
|
$command "$1" -C "$2" && return 0 || return 1
|
||||||
@ -849,7 +884,12 @@ debug_timer () {
|
|||||||
# Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени)
|
# Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени)
|
||||||
# Параллельное создание базы по времени после завершения приложения
|
# Параллельное создание базы по времени после завершения приложения
|
||||||
search_desktop_file () {
|
search_desktop_file () {
|
||||||
local desktop_file desktop_file_new EXEC_DESKTOP line1 line2 TIME_TOTAL
|
local desktop_file desktop_file_new line1 line2 FILE_SHA256SUM_ARRAY EXEC_DESKTOP BROKEN_LINE FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND
|
||||||
|
if [[ -z $FILE_SHA256SUM ]] ; then
|
||||||
|
read -r -a FILE_SHA256SUM_ARRAY < <(sha256sum "$portwine_exe")
|
||||||
|
FILE_SHA256SUM=${FILE_SHA256SUM_ARRAY[0]}
|
||||||
|
edit_db_from_gui FILE_SHA256SUM
|
||||||
|
fi
|
||||||
for desktop_file in "$PORT_WINE_PATH"/* ; do
|
for desktop_file in "$PORT_WINE_PATH"/* ; do
|
||||||
desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
|
desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
|
||||||
if [[ $desktop_file_new =~ .desktop$ ]] ; then
|
if [[ $desktop_file_new =~ .desktop$ ]] ; then
|
||||||
@ -863,62 +903,174 @@ search_desktop_file () {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done < "$desktop_file"
|
done < "$desktop_file"
|
||||||
while IFS=" " read -r -a line2 ; do
|
|
||||||
if [[ ${line2[1]} == "$ENTRY_POINT" ]] ; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done < "$PORT_WINE_TMP_PATH/statistics"
|
|
||||||
if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then
|
if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then
|
||||||
DESKTOP_CORRECT_FILE="$desktop_file"
|
DESKTOP_CORRECT_FILE="$desktop_file"
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
if [[ $DESKTOP_WITH_TIME == enabled ]] || [[ $SORT_WITH_TIME == enabled ]] ; then
|
||||||
|
while IFS=" " read -r -a line2 ; do
|
||||||
|
if [[ -z ${line2[0]} ]] \
|
||||||
|
|| [[ ! ${line2[0],,} =~ (.bat$|.exe$|.msi$|.reg$) ]] ; then
|
||||||
|
BROKEN_LINE=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
if [[ ${line2[1]} == "$FILE_SHA256SUM" ]] ; then
|
||||||
|
FILE_SHA256SUM_FOUND=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
if [[ ${line2[1]} != "$FILE_SHA256SUM" ]] \
|
||||||
|
&& [[ ${line2[0]} == "${portwine_exe// /#@_@#}" ]] ; then
|
||||||
|
FILE_SHA256SUM_NOT_FOUND=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done < "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
fi
|
||||||
IFS="$orig_IFS"
|
IFS="$orig_IFS"
|
||||||
if [[ -n ${line2[2]} ]]
|
if [[ $DESKTOP_WITH_TIME == enabled ]] || [[ $SORT_WITH_TIME == enabled ]] ; then
|
||||||
then TIME_CURRENT=${line2[2]}
|
local line3 line4 count_line i TIME_TOTAL SKIP_REPAIR
|
||||||
else TIME_CURRENT=0
|
## Ремонты:
|
||||||
fi
|
# Ремонт, проверяет чтобы длинна хеш суммы была равна 64 символам, в ином случае удалит битые
|
||||||
export TIME_CURRENT
|
if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] && [[ ${#line2[1]} != "64" ]] ; then
|
||||||
# Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню
|
while IFS=" " read -r -a line3 ; do
|
||||||
if [[ $PW_NEW_DESKTOP == 1 ]] && [[ ${line2[3]} != NEW_DESKTOP ]] ; then
|
if [[ ${#line3[1]} == "64" ]]
|
||||||
if [[ -n ${line2[1]} ]] ; then
|
then echo "${line3[*]}"
|
||||||
sed -i "s|$ENTRY_POINT $TIME_CURRENT OLD_DESKTOP|$ENTRY_POINT $TIME_CURRENT NEW_DESKTOP|" "$PORT_WINE_TMP_PATH/statistics"
|
fi
|
||||||
else
|
done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair"
|
||||||
echo "${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_CURRENT NEW_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
IFS="$orig_IFS"
|
||||||
|
try_remove_file "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ремонт, если есть пустые строки и непонятные строки без .exe, .bat, .msi, .reg
|
||||||
|
if [[ $BROKEN_LINE == 1 ]] ; then
|
||||||
|
while IFS=" " read -r -a line4 ; do
|
||||||
|
if [[ -n ${line4[0]} ]] && [[ ${line4[0]} =~ (.[Bb][Aa][Tt]$|.[Ee][Xx][Ee]$|.[Mm][Ss][Ii]$|.[Rr][Ee][Gg]$) ]]
|
||||||
|
then echo "${line4[*]}"
|
||||||
|
fi
|
||||||
|
done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair"
|
||||||
|
IFS="$orig_IFS"
|
||||||
|
try_remove_file "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ремонтирует путь на новый, если вдруг путь до .exe файла битый или изменился, но .exe файл он опознал
|
||||||
|
if [[ $FILE_SHA256SUM_FOUND == 1 ]] && [[ ${line2[0]} != "${portwine_exe// /#@_@#}" ]] ; then
|
||||||
|
sed -i "s|${line2[0]} ${line2[1]}|${portwine_exe// /#@_@#} ${line2[1]}|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
line2[0]=${portwine_exe// /#@_@#}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ремонт, если sha256sum изменилась, но путь до .exe тот же
|
||||||
|
if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] ; then
|
||||||
|
sed -i "s|${line2[0]} ${line2[1]}|${line2[0]} $FILE_SHA256SUM|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
line2[1]=$FILE_SHA256SUM
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Когда приложения ещё нет в статистике
|
||||||
|
[[ -z ${line2[2]} ]] && line2[2]=0
|
||||||
|
# Ремонт, если сломалось время
|
||||||
|
if (( line2[2] >= 999999999 )) ; then
|
||||||
|
sed -i "s|${line2[1]} ${line2[2]}|${line2[1]} 0|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
line2[2]=0
|
||||||
|
fi
|
||||||
|
# Ремонт, если кто-то сломал время
|
||||||
|
if [[ ! ${line2[2]} =~ ^[0-9]+$ ]] ; then
|
||||||
|
sed -i "/${line2[1]}/d" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Общее проведённое время в секундах
|
||||||
|
export TIME_CURRENT=${line2[2]}
|
||||||
|
# количество запусков приложения
|
||||||
|
export COUNT_STARTS=${line2[4]//L4-/}
|
||||||
|
###############################
|
||||||
|
|
||||||
|
# Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню + ремонт
|
||||||
|
if [[ $PW_NEW_DESKTOP == 1 ]] && [[ ${line2[3]} != NEW_DESKTOP ]] ; then
|
||||||
|
if [[ $FILE_SHA256SUM_FOUND == 1 ]] ; then
|
||||||
|
sed -i "s|${line2[1]} \(.*\) ${line2[3]}|${line2[1]} \1 NEW_DESKTOP|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
else
|
||||||
|
echo "${portwine_exe// /#@_@#} $FILE_SHA256SUM $TIME_CURRENT NEW_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
unset PW_NEW_DESKTOP
|
||||||
|
|
||||||
|
# Когда приложение было запущено и завершено
|
||||||
|
if [[ -n $PW_TIME_IN_GAME ]] ; then
|
||||||
|
TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
|
||||||
|
if [[ $FILE_SHA256SUM_FOUND == 1 ]] ; then
|
||||||
|
# Когда есть предыдущее время
|
||||||
|
sed -i "s|$FILE_SHA256SUM $TIME_CURRENT|$FILE_SHA256SUM $TIME_TOTAL|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
else
|
||||||
|
# Когда только запустили приложение первый раз
|
||||||
|
echo "${portwine_exe// /#@_@#} $FILE_SHA256SUM $TIME_TOTAL OLD_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
fi
|
||||||
|
count_line=4
|
||||||
|
# Здесь добавляются новые линии для статистики (L4-) важен
|
||||||
|
if [[ -z ${line2[4]} ]] ; then
|
||||||
|
SKIP_REPAIR=1
|
||||||
|
sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
else
|
||||||
|
# ремонт, если L4 по каким-то причинам сломался
|
||||||
|
if [[ ${line2[4]} =~ ^L4 ]] ; then
|
||||||
|
local NUMBER_OF_STARTS=$(( ${line2[4]//L4-/} + 1 ))
|
||||||
|
else
|
||||||
|
SKIP_REPAIR=1
|
||||||
|
sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[4]}|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(( count_line ++ ))
|
||||||
|
|
||||||
|
# Пример для L5
|
||||||
|
# if [[ -z ${line2[5]} ]] ; then
|
||||||
|
# SKIP_REPAIR=1
|
||||||
|
# sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L5-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
# else
|
||||||
|
# if [[ ${line2[5]} =~ ^L5 ]] ; then
|
||||||
|
# local ЗДЕСЬ_НОВАЯ_ПЕРЕМЕННАЯ=$(( ${line2[5]//L5-/} + 1 ))
|
||||||
|
# else
|
||||||
|
# SKIP_REPAIR=1
|
||||||
|
# sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[5]}|$FILE_SHA256SUM \1 L5-1|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
# fi
|
||||||
|
# fi
|
||||||
|
# (( count_line ++ ))
|
||||||
|
|
||||||
|
if [[ $SKIP_REPAIR != 1 ]] ; then
|
||||||
|
# Ремонт, если количество элементов массива по каким-то причина больше, чем должно быть
|
||||||
|
if [[ -n ${line2["$count_line"]} ]] ; then
|
||||||
|
for i in $(seq $count_line ${#line2[@]}) ; do
|
||||||
|
unset 'line2[$i]'
|
||||||
|
done
|
||||||
|
sed -i "s|${portwine_exe// /#@_@#} $FILE_SHA256SUM \(.*\)|${line2[*]}|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
fi
|
||||||
|
# Сюда все sedы от L4, L5 и т.д. (после всех ремонтов)
|
||||||
|
sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[4]}|$FILE_SHA256SUM \1 L4-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
# sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[5]}|$FILE_SHA256SUM \1 L5-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
unset PW_NEW_DESKTOP
|
if [[ -n $PW_TIME_IN_GAME ]]
|
||||||
# Когда приложение было запущено и завершено
|
then return 2
|
||||||
if [[ -n $PW_TIME_IN_GAME ]] ; then
|
else return 0
|
||||||
TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
|
|
||||||
if [[ -n ${line2[1]} ]] ; then
|
|
||||||
# Когда есть предыдущее время
|
|
||||||
sed -i "s|$ENTRY_POINT $TIME_CURRENT|$ENTRY_POINT $TIME_TOTAL|" "$PORT_WINE_TMP_PATH/statistics"
|
|
||||||
else
|
|
||||||
# Когда только запустили приложение первый раз
|
|
||||||
echo "${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_TOTAL OLD_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
|
|
||||||
fi
|
|
||||||
# Здесь добавляются новые линии для статистики по аналогии, к примеру ${line2[4]}
|
|
||||||
# L4 важен, чтобы не было путаницы из-за sed, то что используется \(.*\), для ${line2[5]} это будет L5 и т.д.
|
|
||||||
if [[ -z ${line2[4]} ]] ; then
|
|
||||||
line2[4]=1
|
|
||||||
sed -i "s|$ENTRY_POINT \(.*\)|$ENTRY_POINT \1 L4-${line2[4]}|" "$PORT_WINE_TMP_PATH/statistics"
|
|
||||||
else
|
|
||||||
line2[4]=${line2[4]//L4-/}
|
|
||||||
NUMBER_OF_STARTS=$(( line2[4] + 1 ))
|
|
||||||
sed -i "s|$ENTRY_POINT \(.*\) L4-${line2[4]}|$ENTRY_POINT \1 L4-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# Ремонтирует путь на новый, если вдруг путь до .exe файла битый или изменился, но .exe файл он опознал
|
|
||||||
if [[ -n ${line2[1]} ]] && [[ ${line2[0]} != "${portwine_exe// /#@_@#}" ]] ; then
|
|
||||||
[[ -z $TIME_TOTAL ]] && TIME_TOTAL=$TIME_CURRENT
|
|
||||||
sed -i "s|${line2[0]} $ENTRY_POINT $TIME_CURRENT|${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_TOTAL|" "$PORT_WINE_TMP_PATH/statistics"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
create_name_desktop () {
|
create_name_desktop () {
|
||||||
search_desktop_file
|
while true ; do
|
||||||
|
search_desktop_file
|
||||||
|
local exit_code=$?
|
||||||
|
case $exit_code in
|
||||||
|
0) break ;;
|
||||||
|
1) continue ;;
|
||||||
|
2) return 0 ;;
|
||||||
|
*) print_error "Broken search_desktop_file func. No exit_code." ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
if [[ -n $DESKTOP_NAME_FILE ]] ; then
|
if [[ -n $DESKTOP_NAME_FILE ]] ; then
|
||||||
DESKTOP_NAME_FILE_OLD=$DESKTOP_NAME_FILE
|
DESKTOP_NAME_FILE_OLD=$DESKTOP_NAME_FILE
|
||||||
unset DESKTOP_NAME_FILE
|
unset DESKTOP_NAME_FILE
|
||||||
@ -935,11 +1087,8 @@ create_name_desktop () {
|
|||||||
DESKTOP_NAME_FILE="${DESKTOP_NAME_FILE//.desktop/}"
|
DESKTOP_NAME_FILE="${DESKTOP_NAME_FILE//.desktop/}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z $PORTWINE_DB ]] ; then
|
PORTWINE_DB_DESKTOP="$(basename "${portwine_exe%.[Ee][Xx][Ee]}")"
|
||||||
PORTWINE_DB_DESKTOP="$(basename "${portwine_exe%.[Ee][Xx][Ee]}")"
|
|
||||||
else
|
|
||||||
PORTWINE_DB_DESKTOP="$PORTWINE_DB"
|
|
||||||
fi
|
|
||||||
if [[ -n $PORTPROTON_NAME ]] ; then
|
if [[ -n $PORTPROTON_NAME ]] ; then
|
||||||
PORTPROTON_NAME_ABBR=$(make_abbreviation "$PORTPROTON_NAME")
|
PORTPROTON_NAME_ABBR=$(make_abbreviation "$PORTPROTON_NAME")
|
||||||
PORTPROTON_NAME_ACRO=$(make_acronym "$PORTPROTON_NAME")
|
PORTPROTON_NAME_ACRO=$(make_acronym "$PORTPROTON_NAME")
|
||||||
@ -949,7 +1098,9 @@ create_name_desktop () {
|
|||||||
FILE_DESCRIPTION_ACRO=$(make_acronym "$FILE_DESCRIPTION")
|
FILE_DESCRIPTION_ACRO=$(make_acronym "$FILE_DESCRIPTION")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n $DESKTOP_NAME_FILE ]] ; then
|
if [[ -n $PORTWINE_CREATE_SHORTCUT_NAME ]] ; then
|
||||||
|
PW_NAME_DESKTOP_PROXY="$PORTWINE_CREATE_SHORTCUT_NAME"
|
||||||
|
elif [[ -n $DESKTOP_NAME_FILE ]] ; then
|
||||||
PW_NAME_DESKTOP_PROXY="$DESKTOP_NAME_FILE"
|
PW_NAME_DESKTOP_PROXY="$DESKTOP_NAME_FILE"
|
||||||
elif [[ -n $DESKTOP_NAME_FILE_OLD && ${PORTWINE_DB_DESKTOP^^} =~ ${DESKTOP_NAME_FILE_OLD^^} ]] ; then
|
elif [[ -n $DESKTOP_NAME_FILE_OLD && ${PORTWINE_DB_DESKTOP^^} =~ ${DESKTOP_NAME_FILE_OLD^^} ]] ; then
|
||||||
PW_NAME_DESKTOP_PROXY="$DESKTOP_NAME_FILE_OLD"
|
PW_NAME_DESKTOP_PROXY="$DESKTOP_NAME_FILE_OLD"
|
||||||
@ -1283,12 +1434,12 @@ init_wine_ver () {
|
|||||||
if check_symlink "${WINEDIR}/share/wine/${mono_gecko_chk}" ; then
|
if check_symlink "${WINEDIR}/share/wine/${mono_gecko_chk}" ; then
|
||||||
print_info "${WINEDIR}/share/wine/${mono_gecko_chk} is symlink. OK."
|
print_info "${WINEDIR}/share/wine/${mono_gecko_chk} is symlink. OK."
|
||||||
elif [[ -d "${WINEDIR}/share/wine/${mono_gecko_chk}" ]] ; then
|
elif [[ -d "${WINEDIR}/share/wine/${mono_gecko_chk}" ]] ; then
|
||||||
pw_start_progress_bar_cover_block "${COVERS_PATH}/loading_${LANGUAGE_GIF}.gif"
|
pw_start_progress_bar_cover "${COVERS_PATH}/loading_${LANGUAGE_GIF}.gif" --block
|
||||||
try_copy_dir "${WINEDIR}/share/wine/${mono_gecko_chk}" "${PORT_WINE_TMP_PATH}"
|
try_copy_dir "${WINEDIR}/share/wine/${mono_gecko_chk}" "${PORT_WINE_TMP_PATH}"
|
||||||
try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
|
try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
|
||||||
try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine/
|
try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine/
|
||||||
print_info "Copy ${WINEDIR}/share/wine/${mono_gecko_chk} to tmp and create symlink to ${WINEDIR}/share/wine/. OK."
|
print_info "Copy ${WINEDIR}/share/wine/${mono_gecko_chk} to tmp and create symlink to ${WINEDIR}/share/wine/. OK."
|
||||||
pw_stop_progress_bar_cover_block
|
pw_stop_progress_bar
|
||||||
else
|
else
|
||||||
try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
|
try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
|
||||||
try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine
|
try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine
|
||||||
@ -1613,10 +1764,10 @@ stop_portwine () {
|
|||||||
pw_auto_create_shortcut
|
pw_auto_create_shortcut
|
||||||
add_in_stop_portwine
|
add_in_stop_portwine
|
||||||
|
|
||||||
if [[ $PW_LOG != 1 ]] ; then
|
if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then
|
||||||
debug_timer --end -s "PW_TIME_IN_GAME"
|
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
|
create_name_desktop
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@ -2474,7 +2625,6 @@ pw_create_gui_png () {
|
|||||||
fi
|
fi
|
||||||
if [[ -z "$PORTPROTON_NAME" ]] \
|
if [[ -z "$PORTPROTON_NAME" ]] \
|
||||||
|| [[ -z "$FILE_DESCRIPTION" ]] \
|
|| [[ -z "$FILE_DESCRIPTION" ]] \
|
||||||
|| [[ -z "$ENTRY_POINT" ]] \
|
|
||||||
|| [[ "$PW_NO_RESTART_PPDB" == "1" ]]
|
|| [[ "$PW_NO_RESTART_PPDB" == "1" ]]
|
||||||
then
|
then
|
||||||
if [[ -n "${PORTWINE_CREATE_SHORTCUT_NAME}" ]] ; then
|
if [[ -n "${PORTWINE_CREATE_SHORTCUT_NAME}" ]] ; then
|
||||||
@ -2484,7 +2634,6 @@ pw_create_gui_png () {
|
|||||||
if timeout 3 exiftool "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp" ; then
|
if timeout 3 exiftool "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp" ; then
|
||||||
PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||||
FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||||
ENTRY_POINT=$(sed -n 's/^Entry Point\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
|
||||||
else
|
else
|
||||||
print_error "exiftool - broken!"
|
print_error "exiftool - broken!"
|
||||||
fi
|
fi
|
||||||
@ -2493,7 +2642,6 @@ pw_create_gui_png () {
|
|||||||
env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp"
|
env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp"
|
||||||
PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||||
FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||||
ENTRY_POINT=$(sed -n 's/^Entry Point\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$PW_PRODUCTNAME" =~ (Launcher|RU) ]]
|
if [[ "$PW_PRODUCTNAME" =~ (Launcher|RU) ]]
|
||||||
@ -2512,7 +2660,7 @@ pw_create_gui_png () {
|
|||||||
|
|
||||||
PORTPROTON_NAME="$(echo "${PORTPROTON_NAME}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g" | sed "s/\!//g")"
|
PORTPROTON_NAME="$(echo "${PORTPROTON_NAME}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g" | sed "s/\!//g")"
|
||||||
export PORTPROTON_NAME
|
export PORTPROTON_NAME
|
||||||
edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION ENTRY_POINT
|
edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION
|
||||||
fi
|
fi
|
||||||
|
|
||||||
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
|
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
|
||||||
@ -2602,7 +2750,6 @@ start_portwine () {
|
|||||||
|
|
||||||
pw_get_pfx () {
|
pw_get_pfx () {
|
||||||
case "${PW_PREFIX_NAME}" in
|
case "${PW_PREFIX_NAME}" in
|
||||||
PROGRAMS) local FILE_NAME_PFX="progpfx${PROGPFX_VER}" ;;
|
|
||||||
DOTNET) local FILE_NAME_PFX="dotpfx${DOTPFX_VER}" ;;
|
DOTNET) local FILE_NAME_PFX="dotpfx${DOTPFX_VER}" ;;
|
||||||
*) return 0 ;;
|
*) return 0 ;;
|
||||||
esac
|
esac
|
||||||
@ -2741,6 +2888,7 @@ start_portwine () {
|
|||||||
unpack "${PW_PLUGINS_PATH}/blank_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
|
unpack "${PW_PLUGINS_PATH}/blank_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
|
||||||
pw_wineboot -i
|
pw_wineboot -i
|
||||||
fi
|
fi
|
||||||
|
pw_stop_progress_bar
|
||||||
else
|
else
|
||||||
check_dirs_and_files_in_pfx
|
check_dirs_and_files_in_pfx
|
||||||
if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" ]] \
|
if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" ]] \
|
||||||
@ -2749,6 +2897,7 @@ start_portwine () {
|
|||||||
then
|
then
|
||||||
pw_update_pfx_cover_gui
|
pw_update_pfx_cover_gui
|
||||||
pw_wineboot -r
|
pw_wineboot -r
|
||||||
|
pw_stop_progress_bar
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
rm -f "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk
|
rm -f "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk
|
||||||
@ -3615,14 +3764,14 @@ start_portwine () {
|
|||||||
sed -i "/\"Audio\"=/d" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/user.reg" &>/dev/null
|
sed -i "/\"Audio\"=/d" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/user.reg" &>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pw_stop_progress_bar &&
|
pw_stop_progress_bar
|
||||||
if ! check_start_from_steam ; then
|
if ! check_start_from_steam ; then
|
||||||
pw_tray_icon
|
pw_tray_icon
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${PW_CHECK_AUTOINSTALL}" != "1" ]] ; then
|
if [[ "${PW_CHECK_AUTOINSTALL}" != "1" ]] ; then
|
||||||
pw_start_progress_bar_cover "${COVERS_PATH}/loading_${LANGUAGE_GIF}.gif"
|
pw_start_progress_bar_cover "${COVERS_PATH}/loading_${LANGUAGE_GIF}.gif"
|
||||||
fi
|
fi
|
||||||
add_in_start_portwine
|
add_in_start_portwine
|
||||||
|
|
||||||
@ -3780,7 +3929,6 @@ pw_run () {
|
|||||||
print_var "WINEDIR" "WINEPREFIX" "WINEDLLOVERRIDES" "PATH_TO_GAME" "PW_WINE_USE" "PW_VULKAN_USE" "VULKAN_DRIVER_NAME"
|
print_var "WINEDIR" "WINEPREFIX" "WINEDLLOVERRIDES" "PATH_TO_GAME" "PW_WINE_USE" "PW_VULKAN_USE" "VULKAN_DRIVER_NAME"
|
||||||
print_var "VKD3D_CONFIG" "PW_LD_LIBRARY_PATH" "PATH" "WINEESYNC" "WINEFSYNC" "WINEFSYNC_FUTEX2"
|
print_var "VKD3D_CONFIG" "PW_LD_LIBRARY_PATH" "PATH" "WINEESYNC" "WINEFSYNC" "WINEFSYNC_FUTEX2"
|
||||||
print_var "WINEDLLPATH" "WINE_CPU_TOPOLOGY" "PW_RUN_GAMESCOPE" "LD_LIBRARY_PATH"
|
print_var "WINEDLLPATH" "WINE_CPU_TOPOLOGY" "PW_RUN_GAMESCOPE" "LD_LIBRARY_PATH"
|
||||||
kill -s SIGUSR1 "$PW_YAD_PID_PFX_COVER_UI" &>/dev/null
|
|
||||||
if [[ "$PW_USE_RUNTIME" == 1 ]] \
|
if [[ "$PW_USE_RUNTIME" == 1 ]] \
|
||||||
&& [[ "$PW_WINE_USE" != "USE_SYSTEM_WINE" ]]
|
&& [[ "$PW_WINE_USE" != "USE_SYSTEM_WINE" ]]
|
||||||
then
|
then
|
||||||
@ -3916,18 +4064,18 @@ portwine_launch () {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
[[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
|
[[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
|
||||||
case "$portwine_exe" in
|
case "${portwine_exe,,}" in
|
||||||
*.[Ee][Xx][Ee])
|
*.exe)
|
||||||
pw_run ${PW_VD_TMP[@]} ${WINE_WIN_START} "$portwine_exe"
|
pw_run ${PW_VD_TMP[@]} ${WINE_WIN_START} "$portwine_exe"
|
||||||
;;
|
;;
|
||||||
*.[Bb][Aa][Tt])
|
*.bat)
|
||||||
PW_USE_TERMINAL=1
|
PW_USE_TERMINAL=1
|
||||||
pw_run ${PW_VD_TMP[@]} "$portwine_exe"
|
pw_run ${PW_VD_TMP[@]} "$portwine_exe"
|
||||||
;;
|
;;
|
||||||
*.[Mm][Ss][Ii])
|
*.msi)
|
||||||
pw_run ${PW_VD_TMP[@]} msiexec /i "$portwine_exe"
|
pw_run ${PW_VD_TMP[@]} msiexec /i "$portwine_exe"
|
||||||
;;
|
;;
|
||||||
*.[Rr][Ee][Gg])
|
*.reg)
|
||||||
pw_run ${PW_VD_TMP[@]} regedit "$portwine_exe"
|
pw_run ${PW_VD_TMP[@]} regedit "$portwine_exe"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@ -4043,34 +4191,22 @@ yad_question () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pw_start_progress_bar_cover () {
|
pw_start_progress_bar_cover () {
|
||||||
|
[[ "$2" != "--block" ]] && local AUTOCLOUSE="--close-on-unfocus"
|
||||||
if check_gamescope_session ; then
|
if check_gamescope_session ; then
|
||||||
PW_GIF_FILE="${COVERS_PATH}/loading_deck.gif"
|
PW_GIF_FILE="${COVERS_PATH}/loading_deck.gif"
|
||||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --fullscreen --skip-taskbar > /dev/null 2>&1 &
|
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" $AUTOCLOUSE --no-buttons --undecorated --fullscreen --skip-taskbar > /dev/null 2>&1 &
|
||||||
export PW_YAD_PID_PROGRESS_BAR_COVER="$!"
|
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||||
elif ! check_start_from_steam ; then
|
elif ! check_start_from_steam ; then
|
||||||
PW_GIF_FILE="$1"
|
PW_GIF_FILE="$1"
|
||||||
PW_GIF_SIZE_X=$(file "${PW_GIF_FILE}" | awk '{print $7 + 8}')
|
PW_GIF_SIZE_X=$(file "${PW_GIF_FILE}" | awk '{print $7 + 8}')
|
||||||
PW_GIF_SIZE_Y=$(file "${PW_GIF_FILE}" | awk '{print $9 + 15}')
|
PW_GIF_SIZE_Y=$(file "${PW_GIF_FILE}" | awk '{print $9 + 15}')
|
||||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated \
|
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" $AUTOCLOUSE --no-buttons --undecorated \
|
||||||
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
|
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
|
||||||
export PW_YAD_PID_PROGRESS_BAR_COVER="$!"
|
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
pw_start_progress_bar_cover_block () {
|
|
||||||
if ! check_start_from_steam ; then
|
|
||||||
[[ ! -f "${pw_yad}" ]] && local pw_yad="yad"
|
|
||||||
PW_GIF_FILE="$1"
|
|
||||||
PW_GIF_SIZE_X=$(file "${PW_GIF_FILE}" | awk '{print $7 + 8}')
|
|
||||||
PW_GIF_SIZE_Y=$(file "${PW_GIF_FILE}" | awk '{print $9 + 15}')
|
|
||||||
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated \
|
|
||||||
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
|
|
||||||
export PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK="$!"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
pw_update_pfx_cover_gui () {
|
pw_update_pfx_cover_gui () {
|
||||||
if check_gamescope_session ; then
|
if check_gamescope_session ; then
|
||||||
pw_start_progress_bar_cover
|
pw_start_progress_bar_cover
|
||||||
@ -4111,7 +4247,7 @@ pw_update_pfx_cover_gui () {
|
|||||||
"${pw_yad}" --notebook --key="$PW_KEY_PROGRESS_BAR_UP" $TAB_PLACE --no-buttons \
|
"${pw_yad}" --notebook --key="$PW_KEY_PROGRESS_BAR_UP" $TAB_PLACE --no-buttons \
|
||||||
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" $YAD_UNDECORATED \
|
--skip-taskbar --width="$PW_GIF_SIZE_X" --height="$PW_GIF_SIZE_Y" $YAD_UNDECORATED \
|
||||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "PortProton" --tab-pos="bottom" --expand 2>/dev/null &
|
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "PortProton" --tab-pos="bottom" --expand 2>/dev/null &
|
||||||
export PW_YAD_PID_PFX_COVER_UI="$!"
|
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -4124,7 +4260,7 @@ pw_start_progress_bar_cs () {
|
|||||||
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||||
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
||||||
export PW_YAD_PID_PROGRESS_BAR_CS="$!"
|
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -4138,7 +4274,7 @@ pw_start_progress_bar_block () {
|
|||||||
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||||
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
||||||
export PW_YAD_PID_PROGRESS_BAR_BLOCK="$!"
|
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -4152,26 +4288,26 @@ pw_start_progress_bar_install_game () {
|
|||||||
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
--width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||||
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
--wrap-width="$PROGRESS_BAR_WIDTH_SIZE" \
|
||||||
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" &>/dev/null &
|
||||||
export PW_YAD_PID_PROGRESS_BAR_BLOCK="$!"
|
PW_YAD_PID_PROGRESS_BAR+=($!)
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
pw_stop_progress_bar () {
|
pw_stop_progress_bar () {
|
||||||
[[ -n $PW_YAD_PID_PROGRESS_BAR_BLOCK ]] && kill -s SIGUSR1 "$PW_YAD_PID_PROGRESS_BAR_BLOCK" &>/dev/null
|
if [[ -n ${PW_YAD_PID_PROGRESS_BAR[0]} ]] ; then
|
||||||
[[ -n $PW_YAD_PID_PROGRESS_BAR_CS ]] && kill -s SIGUSR1 "$PW_YAD_PID_PROGRESS_BAR_CS" &>/dev/null
|
local pid
|
||||||
[[ -n $PW_YAD_PID_PFX_COVER_UI ]] && kill -s SIGUSR1 "$PW_YAD_PID_PFX_COVER_UI" &>/dev/null
|
for pid in ${PW_YAD_PID_PROGRESS_BAR[@]} ; do
|
||||||
[[ -n $PW_YAD_PID_PROGRESS_BAR_COVER ]] && kill -s SIGUSR1 "$PW_YAD_PID_PROGRESS_BAR_COVER" &>/dev/null
|
# Здесь sleep нужен, потому что pid может уже быть, но kill его не убьет
|
||||||
unset PW_YAD_PID_PROGRESS_BAR_BLOCK PW_YAD_PID_PROGRESS_BAR_CS
|
# со sleep 0.01 он делает 2 kill, c 0.02 нормально один
|
||||||
unset PW_YAD_PID_PFX_COVER_UI PW_YAD_PID_PROGRESS_BAR_COVER
|
while $(sleep 0.02) && [[ -f /proc/$pid/exe ]] ; do
|
||||||
|
kill -s SIGUSR1 "$pid" &>/dev/null
|
||||||
|
done
|
||||||
|
done
|
||||||
|
unset PW_YAD_PID_PROGRESS_BAR
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
export -f pw_stop_progress_bar
|
export -f pw_stop_progress_bar
|
||||||
|
|
||||||
pw_stop_progress_bar_cover_block () {
|
|
||||||
kill -s KILL "$PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK" &>/dev/null
|
|
||||||
}
|
|
||||||
export -f pw_stop_progress_bar_cover_block
|
|
||||||
|
|
||||||
open_changelog () {
|
open_changelog () {
|
||||||
[[ "$LANGUAGE" == ru ]] && local PW_CHANGELOG_FILE="changelog_ru" || local PW_CHANGELOG_FILE="changelog_en"
|
[[ "$LANGUAGE" == ru ]] && local PW_CHANGELOG_FILE="changelog_ru" || local PW_CHANGELOG_FILE="changelog_en"
|
||||||
"${pw_yad}" --title="${translations[CHANGELOG]}" --no-buttons \
|
"${pw_yad}" --title="${translations[CHANGELOG]}" --no-buttons \
|
||||||
@ -4681,7 +4817,7 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate.]
|
|||||||
PW_LOCALE_SELECT="${PW_ADD_SETTINGS[9]}"
|
PW_LOCALE_SELECT="${PW_ADD_SETTINGS[9]}"
|
||||||
PW_MESA_VK_WSI_PRESENT_MODE="${PW_ADD_SETTINGS[10]}"
|
PW_MESA_VK_WSI_PRESENT_MODE="${PW_ADD_SETTINGS[10]}"
|
||||||
|
|
||||||
if [[ "${CPU_LIMIT}" =~ [0-9]+ ]] ; then
|
if [[ "${CPU_LIMIT}" =~ ^[0-9]+$ ]] ; then
|
||||||
PW_WINE_CPU_TOPOLOGY="${CPU_LIMIT}:$(seq -s, 0 $(( CPU_LIMIT - 1 )))"
|
PW_WINE_CPU_TOPOLOGY="${CPU_LIMIT}:$(seq -s, 0 $(( CPU_LIMIT - 1 )))"
|
||||||
else
|
else
|
||||||
PW_WINE_CPU_TOPOLOGY="disabled"
|
PW_WINE_CPU_TOPOLOGY="disabled"
|
||||||
@ -5684,7 +5820,8 @@ portwine_output_yad_shortcut () {
|
|||||||
|
|
||||||
export PW_NEW_DESKTOP="1"
|
export PW_NEW_DESKTOP="1"
|
||||||
|
|
||||||
if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then
|
if [[ "$PW_NO_RESTART_PPDB" != "1" ]] \
|
||||||
|
|| [[ -z ${LINKS[1]} ]] ; then
|
||||||
print_info "Restarting PP..."
|
print_info "Restarting PP..."
|
||||||
[[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
|
[[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
|
||||||
restart_pp
|
restart_pp
|
||||||
@ -5693,7 +5830,7 @@ portwine_output_yad_shortcut () {
|
|||||||
print_info "Restarting PP..."
|
print_info "Restarting PP..."
|
||||||
[[ -n $KEY_MENU ]] && unset portwine_exe
|
[[ -n $KEY_MENU ]] && unset portwine_exe
|
||||||
[[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
|
[[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
|
||||||
[[ -z $LINKS ]] && restart_pp
|
[[ -z ${LINKS[0]} ]] && restart_pp
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE
Executable file
26
data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Author: chal55rus
|
||||||
|
# type: games
|
||||||
|
# name: Chicken Invaders Universe
|
||||||
|
# image: chickeninvadersuniverse
|
||||||
|
# info_en:
|
||||||
|
# info_ru:
|
||||||
|
########################################################################
|
||||||
|
export PW_PREFIX_NAME="CHICKEN_INVADERS_UNIVERSE"
|
||||||
|
export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-")
|
||||||
|
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/ChickenInvadersUniverseInstaller.exe"
|
||||||
|
export PORTWINE_CREATE_SHORTCUT_NAME="Chicken Invaders Universe"
|
||||||
|
|
||||||
|
start_portwine
|
||||||
|
if try_download "https://universe.chickeninvaders.com/files/ChickenInvadersUniverseInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||||
|
then
|
||||||
|
pw_start_progress_bar_install_game "Chicken Invaders Universe."
|
||||||
|
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||||
|
portwine_exe="$WINEPREFIX/drive_c/Program Files (x86)/ChickenInvadersUniverse/CIU.exe"
|
||||||
|
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||||
|
try_remove_file "${portwine_exe}.ppdb"
|
||||||
|
kill_portwine
|
||||||
|
pw_stop_progress_bar
|
||||||
|
portwine_create_shortcut
|
||||||
|
fi
|
||||||
|
stop_portwine
|
26
data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN
Executable file
26
data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Author: chal55rus
|
||||||
|
# type: games
|
||||||
|
# name: Eldevin (ENG)
|
||||||
|
# image: eldevin
|
||||||
|
# info_en:
|
||||||
|
# info_ru:
|
||||||
|
########################################################################
|
||||||
|
export PW_PREFIX_NAME="ELDEVIN"
|
||||||
|
export LAUNCH_PARAMETERS=("/S")
|
||||||
|
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/eldevin_win64.exe"
|
||||||
|
export PORTWINE_CREATE_SHORTCUT_NAME="Eldevin"
|
||||||
|
|
||||||
|
start_portwine
|
||||||
|
if try_download "https://www.eldevin.com/cdn/files/eldevin_win64.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||||
|
then
|
||||||
|
pw_start_progress_bar_install_game "Eldevin."
|
||||||
|
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||||
|
portwine_exe="$WINEPREFIX/drive_c/Program Files/Eldevin/Eldevin.exe"
|
||||||
|
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||||
|
try_remove_file "${portwine_exe}.ppdb"
|
||||||
|
kill_portwine
|
||||||
|
pw_stop_progress_bar
|
||||||
|
portwine_create_shortcut
|
||||||
|
fi
|
||||||
|
stop_portwine
|
27
data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT
Executable file
27
data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Author: chal55rus
|
||||||
|
# type: games
|
||||||
|
# name: The World of Nifty Craft (ENG)
|
||||||
|
# image: theworldofniftycraft
|
||||||
|
# info_en:
|
||||||
|
# info_ru:
|
||||||
|
########################################################################
|
||||||
|
export PW_PREFIX_NAME="THE_WORLD_NIFTY_CRAFT"
|
||||||
|
export LAUNCH_PARAMETERS=("/S")
|
||||||
|
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/web_installer.exe"
|
||||||
|
export PORTWINE_CREATE_SHORTCUT_NAME="The World of Nifty Craft"
|
||||||
|
|
||||||
|
start_portwine
|
||||||
|
if try_download "https://installer.launcher.xsolla.com/xlauncher-builds/xsolla-launcher-update/9969/bin/web_installer.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||||
|
then
|
||||||
|
pw_start_progress_bar_install_game "The World of Nifty Craft."
|
||||||
|
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||||
|
portwine_exe="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/The World of Nifty Craft/launcher.exe"
|
||||||
|
pw_create_unique_exe "Nifty_Craft_launcher"
|
||||||
|
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||||
|
try_remove_file "${portwine_exe}.ppdb"
|
||||||
|
kill_portwine
|
||||||
|
pw_stop_progress_bar
|
||||||
|
portwine_create_shortcut
|
||||||
|
fi
|
||||||
|
stop_portwine
|
30
data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH
Executable file
30
data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Author: chal55rus
|
||||||
|
# type: games
|
||||||
|
# name: Toribash
|
||||||
|
# image: toribash
|
||||||
|
# info_en:
|
||||||
|
# info_ru:
|
||||||
|
########################################################################
|
||||||
|
URL_VER=$(curl https://www.toribash.com/downloads.php \
|
||||||
|
| awk -F"https://cache.toribash.com/Toribash-" '{print $2}' \
|
||||||
|
| awk -F"-Setup.exe" '{print $1}' | grep "5" | head -n1)
|
||||||
|
|
||||||
|
export PW_PREFIX_NAME="TORIBASH"
|
||||||
|
export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-")
|
||||||
|
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Toribash-${URL_VER}-Setup.exe"
|
||||||
|
export PORTWINE_CREATE_SHORTCUT_NAME="Toribash"
|
||||||
|
|
||||||
|
start_portwine
|
||||||
|
if try_download "https://cache.toribash.com/Toribash-${URL_VER}-Setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
|
||||||
|
then
|
||||||
|
pw_start_progress_bar_install_game "Toribash."
|
||||||
|
pw_run "${PW_AUTOINSTALL_EXE}"
|
||||||
|
portwine_exe="$WINEPREFIX/drive_c/Games/Toribash/toribash.exe"
|
||||||
|
try_remove_file "${PW_AUTOINSTALL_EXE}"
|
||||||
|
try_remove_file "${portwine_exe}.ppdb"
|
||||||
|
kill_portwine
|
||||||
|
pw_stop_progress_bar
|
||||||
|
portwine_create_shortcut
|
||||||
|
fi
|
||||||
|
stop_portwine
|
@ -49,26 +49,26 @@ MISSING_DESKTOP_FILE="0"
|
|||||||
|
|
||||||
unset PW_NO_RESTART_PPDB PW_DISABLED_CREATE_DB
|
unset PW_NO_RESTART_PPDB PW_DISABLED_CREATE_DB
|
||||||
|
|
||||||
if [[ "$1" == *.[Pp][Pp][Aa][Cc][Kk] ]] ; then
|
if [[ "${1,,}" =~ .ppack$ ]] ; then
|
||||||
export PW_NO_RESTART_PPDB="1"
|
export PW_NO_RESTART_PPDB="1"
|
||||||
export PW_DISABLED_CREATE_DB="1"
|
export PW_DISABLED_CREATE_DB="1"
|
||||||
portwine_exe="$1"
|
portwine_exe="$1"
|
||||||
elif [[ -f "$1" ]] ; then
|
elif [[ -f "$1" ]] ; then
|
||||||
portwine_exe="$(realpath -s "$1")"
|
portwine_exe="$(realpath -s "$1")"
|
||||||
elif [[ -f "$OLDPWD/$1" ]] \
|
elif [[ -f "$OLDPWD/$1" ]] \
|
||||||
&& [[ "$1" == *.[Ee][Xx][Ee] || "$1" == *.[Bb][Aa][Tt] || "$1" == *.[Rr][Ee][Gg] || "$1" == *.[Mm][Ss][Ii] ]]
|
&& [[ "${1,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]]
|
||||||
then
|
then
|
||||||
portwine_exe="$(realpath -s "$OLDPWD/$1")"
|
portwine_exe="$(realpath -s "$OLDPWD/$1")"
|
||||||
elif [[ "$1" == "--debug" ]] \
|
elif [[ "$1" =~ (^--debug$|^--launch$|^--edit-db$) ]] \
|
||||||
&& [[ -f "$2" ]]
|
&& [[ -f "$2" ]]
|
||||||
then
|
then
|
||||||
portwine_exe="$(realpath -s "$2")"
|
portwine_exe="$(realpath -s "$2")"
|
||||||
elif [[ "$1" == "--debug" ]] \
|
elif [[ "$1" =~ (^--debug$|^--launch$|^--edit-db$) ]] \
|
||||||
&& [[ -f "$OLDPWD/$2" ]] \
|
&& [[ -f "$OLDPWD/$2" ]] \
|
||||||
&& [[ "$2" == *.[Ee][Xx][Ee] || "$2" == *.[Bb][Aa][Tt] || "$2" == *.[Rr][Ee][Gg] || "$2" == *.[Mm][Ss][Ii] ]]
|
&& [[ "${2,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]]
|
||||||
then
|
then
|
||||||
portwine_exe="$(realpath -s "$OLDPWD/$2")"
|
portwine_exe="$(realpath -s "$OLDPWD/$2")"
|
||||||
elif [[ "$1" == *.[Ee][Xx][Ee] || "$1" == *.[Bb][Aa][Tt] || "$1" == *.[Mm][Ss][Ii] || "$1" == *.[Rr][Ee][Gg] ]]
|
elif [[ "${1,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]]
|
||||||
then
|
then
|
||||||
portwine_exe="$1"
|
portwine_exe="$1"
|
||||||
MISSING_DESKTOP_FILE="1"
|
MISSING_DESKTOP_FILE="1"
|
||||||
@ -128,7 +128,6 @@ popd 1>/dev/null || fatal
|
|||||||
|
|
||||||
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"
|
||||||
create_new_dir "${PORT_WINE_PATH}/data/prefixes/PROGRAMS"
|
|
||||||
try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${PORT_WINE_PATH}"
|
try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${PORT_WINE_PATH}"
|
||||||
|
|
||||||
pushd "${PORT_WINE_PATH}/data/prefixes/" 1>/dev/null || fatal
|
pushd "${PORT_WINE_PATH}/data/prefixes/" 1>/dev/null || fatal
|
||||||
@ -324,17 +323,23 @@ export SKIP_CHECK_UPDATES="1"
|
|||||||
|
|
||||||
[[ "$MISSING_DESKTOP_FILE" == "1" ]] && portwine_missing_shortcut
|
[[ "$MISSING_DESKTOP_FILE" == "1" ]] && portwine_missing_shortcut
|
||||||
|
|
||||||
if [[ $(basename "${portwine_exe}") =~ .[Pp][Pp][Aa][Cc][Kk]$ ]] ; then
|
if [[ $(basename "${portwine_exe,,}") =~ .ppack$ ]] ; then
|
||||||
unset PW_SANDBOX_HOME_PATH
|
unset PW_SANDBOX_HOME_PATH
|
||||||
pw_init_runtime
|
pw_init_runtime
|
||||||
if check_flatpak
|
if check_flatpak
|
||||||
then TMP_ALL_PATH=""
|
then TMP_ALL_PATH=""
|
||||||
else TMP_ALL_PATH="LD_LIBRARY_PATH=\"${PW_LD_LIBRARY_PATH}\""
|
else TMP_ALL_PATH="LD_LIBRARY_PATH=\"${PW_LD_LIBRARY_PATH}\""
|
||||||
fi
|
fi
|
||||||
PW_PREFIX_NAME=$(basename "$1" | awk -F'.' '{print $1}')
|
if check_selinux
|
||||||
|
then NO_XATTRS_NEED="-no-xattrs"
|
||||||
|
else NO_XATTRS_NEED=""
|
||||||
|
fi
|
||||||
|
PW_PREFIX_NAME=$(basename "${1,,}" .ppack)
|
||||||
|
PW_PREFIX_NAME="${PW_PREFIX_NAME^^}"
|
||||||
cat << EOF > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh
|
cat << EOF > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
${TMP_ALL_PATH} unsquashfs -f -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" "$1" \
|
${TMP_ALL_PATH} unsquashfs -f -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" "$1" \
|
||||||
|
${TMP_ALL_PATH} unsquashfs $NO_XATTRS_NEED -f -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" "$1" \
|
||||||
|| echo "ERROR" > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack_error
|
|| echo "ERROR" > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack_error
|
||||||
EOF
|
EOF
|
||||||
chmod u+x "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh
|
chmod u+x "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh
|
||||||
@ -360,7 +365,7 @@ fi
|
|||||||
|
|
||||||
### CLI ###
|
### CLI ###
|
||||||
|
|
||||||
case "${1}" in
|
case "$1" in
|
||||||
'--help' )
|
'--help' )
|
||||||
files_from_autoinstall=$(ls "${PORT_SCRIPTS_PATH}/pw_autoinstall")
|
files_from_autoinstall=$(ls "${PORT_SCRIPTS_PATH}/pw_autoinstall")
|
||||||
echo -e "
|
echo -e "
|
||||||
@ -413,6 +418,16 @@ use: [--repair] [--reinstall] [--autoinstall]
|
|||||||
|
|
||||||
'--update' )
|
'--update' )
|
||||||
gui_pw_update ;;
|
gui_pw_update ;;
|
||||||
|
|
||||||
|
'--launch' )
|
||||||
|
portwine_launch
|
||||||
|
stop_portwine ;;
|
||||||
|
|
||||||
|
'--edit-db' )
|
||||||
|
# --edit-db /полный/путь/до/файла.exe PW_MANGOHUD=1 PW_VKBASALT=0 (и т.д) для примера
|
||||||
|
set_several_variables ${@:3}
|
||||||
|
edit_db_from_gui $keys_all
|
||||||
|
exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
### GUI ###
|
### GUI ###
|
||||||
|
@ -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=2368
|
#SCRIPTS_NEXT_VERSION=2369
|
||||||
#SCRIPTS_STABLE_VERSION=2360
|
#SCRIPTS_STABLE_VERSION=2360
|
||||||
########################################################################
|
########################################################################
|
||||||
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"
|
||||||
@ -134,7 +134,6 @@ export PW_GS_MANGOAPP="0"
|
|||||||
###PREFIX_VERSION###
|
###PREFIX_VERSION###
|
||||||
export DOTPFX_VER="48v7"
|
export DOTPFX_VER="48v7"
|
||||||
export DEFPFX_VER="v1"
|
export DEFPFX_VER="v1"
|
||||||
export PROGPFX_VER="v1"
|
|
||||||
export PW_MUST_WINEDLLOVERRIDES="steam_api,steam_api64,steamclient,steamclient64=n;dotnetfx35.exe,dotnetfx35setup.exe=b;winemenubuilder.exe="
|
export PW_MUST_WINEDLLOVERRIDES="steam_api,steam_api64,steamclient,steamclient64=n;dotnetfx35.exe,dotnetfx35setup.exe=b;winemenubuilder.exe="
|
||||||
#################################################################
|
#################################################################
|
||||||
# Get our APi on https://www.steamgriddb.com/profile/preferences/api/
|
# Get our APi on https://www.steamgriddb.com/profile/preferences/api/
|
||||||
@ -148,7 +147,6 @@ pw_list_install_dll_in_prefix ()
|
|||||||
case $PW_PREFIX_NAME in
|
case $PW_PREFIX_NAME in
|
||||||
DEFAULT) export PW_MUST_HAVE_DLL="$STANDART_DLL" ;;
|
DEFAULT) export PW_MUST_HAVE_DLL="$STANDART_DLL" ;;
|
||||||
DOTNET) export PW_MUST_HAVE_DLL="dotnet48" ;;
|
DOTNET) export PW_MUST_HAVE_DLL="dotnet48" ;;
|
||||||
PROGRAMS) export PW_MUST_HAVE_DLL="riched20 msxml3 msxml4 msxml6" ;;
|
|
||||||
*) export PW_MUST_HAVE_DLL="sandbox" ;;
|
*) export PW_MUST_HAVE_DLL="sandbox" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user