functions_helper 43.1 KB
Newer Older
Mikhail Tergoev's avatar
Mikhail Tergoev committed
1
#!/usr/bin/env bash
castro-fidel's avatar
castro-fidel committed
2
# Author: Castro-Fidel (linux-gaming.ru)
3
########################################################################
castro-fidel's avatar
castro-fidel committed
4
pw_ping_test () {
5 6 7 8 9 10 11
    ping -w3 -c1 github.com &> /dev/null
    [ "$?" == "0" ] && return 0 || return 1
}

print_error () {
    echo "ERROR: $@"
}
12
export -f print_error
13 14 15 16

print_info () {
    echo "INFO: $@"
}
17
export -f print_info
18 19 20 21

print_var () {
    for vp in $@ ; do echo "${vp}=${!vp}" ; done
}
22
export -f print_var
23 24 25 26 27 28 29 30

try_copy_file () {
    if [ ! -f "$1" ] ; then	print_info "file $1 not found for copy" && return 1
    elif [ -z "$2" ] ; then	print_error "no way to copy file $1" && return 1
    else
        cp -f "$1" "$2"
        if [ "$?" != 0 ]
        then print_error "failed to copy file $1 to $2" || return 1
31
        else return 0
32 33 34
        fi
    fi
}
35
export -f try_copy_file
36 37 38 39 40 41 42 43 44 45

try_copy_dir () {
    if [ ! -d "$1" ] ; then	print_info "directory $1 not found for copy"
    elif [ -z "$2" ] ; then	print_error "no way to copy directory $1"
    else
        cp -fr "$1" "$2"
        [ "$?" != 0 ] && print_error "failed to copy directory $1 to $2" || return 0
    fi
    return 1
}
46
export -f try_copy_dir
47 48 49 50

try_remove_file () {
    if [ -f "$1" ] ; then
        rm -f "$1"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
51
        [ "$?" == 0 ] && return 0 || return 1
52 53
    fi
}
54
export -f try_remove_file
55 56 57 58

try_remove_dir () {
    if [ -d "$1" ] ; then
        rm -fr "$1"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
59
        [ "$?" == 0 ] && return 0 || return 1
60 61
    fi
}
62
export -f try_remove_dir
63 64

try_force_link_file () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
65
    if [ ! -f "$1" ] ; then :
66
    elif [ -z "$2" ] ; then	print_error "no way to link file $1"
67 68 69 70 71 72
    else
        ln -sf "$1" "$2"
        [ "$?" != 0 ] && print_error "failed to link file $1 to $2" || return 0
    fi
    return 1
}
73
export -f try_force_link_file
74

75
check_symlink () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
76 77
    CHK_SYMLINK_FILE="`file "$1"`"
    if [[ ! -z "`echo "$CHK_SYMLINK_FILE" | grep -v "broken" | grep "symbolic link to" | awk '{print $1}'`" ]] ; then
78
        return 0
Mikhail Tergoev's avatar
Mikhail Tergoev committed
79
    elif [[ ! -z "`echo "$CHK_SYMLINK_FILE" | grep "broken symbolic link to" | awk '{print $1}'`" ]] ; then
80 81
        print_error "remove broken symlink: $CHK_SYMLINK_FILE"
        rm -fr "$CHK_SYMLINK_FILE"
82 83 84 85 86
        return 1
    else
        return 1
    fi
}
87
export -f check_symlink
88

89
try_force_link_dir () {
90 91
    if [ ! -d "$1" ] ; then	print_info "directory $1 not found for link"
    elif [ -z "$2" ] ; then	print_error "no way to link directory $1"
92 93 94 95 96 97
    else
        ln -sf "$1" "$2"
        [ "$?" != 0 ] && print_error "failed to link directory $1 to $2" || return 0
    fi
    return 1
}
98
export -f try_force_link_dir
99

100 101 102
check_process () {
    [ ! -n "`ps cax | grep "$1" | awk '{print $1}'`" ] && return 0 || return 1 
}
103
export -f check_process
104

105 106
try_download () {
    set -o pipefail
107 108
    wget -O "$2" --read-timeout 300 --retry-connrefused --timeout 15 --tries 3 \
    --user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" "$1" 2>&1 | \
109
    tr '\r' '\n' | sed -u 's/.* \([0-9]\+%\)\ \+\([0-9,.]\+.\) \(.*\)/\1\n#Downloading at \1\/, \2\/s, ETA \3/; s/^20[0-9][0-9].*/#Done./' | \
110
    zenity --progress --percentage=0 --title="Download $(basename $1)" --text=Starting... --auto-close --width=500 --height=90
111
    if [ "${PIPESTATUS[0]}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
112
        print_error "Failed to download $1."
113 114
        try_remove_file "$2"
        return 1 
115
    else
116 117
        return 0
    fi
118
    try_remove_file "${PORT_WINE_TMP_PATH}/download_log"
119 120
}

121 122
try_download_to_path () {
    set -o pipefail
123 124
    wget --directory-prefix="$2" --read-timeout 300 --retry-connrefused --timeout 15 --tries 3 \
    --user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" "$1" 2>&1 | \
125
    tr '\r' '\n' | sed -u 's/.* \([0-9]\+%\)\ \+\([0-9,.]\+.\) \(.*\)/\1\n#Downloading at \1\/, \2\/s, ETA \3/; s/^20[0-9][0-9].*/#Done./' | \
126
    zenity --progress --percentage=0 --title="Download $(basename $1)" --text=Starting... --auto-close --width=500 --height=90
127
    if [ "${PIPESTATUS[0]}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
128
        print_error "Failed to download $1."
129 130 131 132
        return 1 
    else 
        return 0
    fi
133 134
}

135
try_download_silent () {
136 137
    wget -O "$2" --read-timeout 300 --retry-connrefused --timeout 15 --tries 3 \
    --user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" "$1"
138
    if [ "${PIPESTATUS[0]}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
139
        print_error "Failed to download $1. Skipping."
140 141 142 143 144
        try_remove_file "$2"
        return 1 
    else 
        return 0
    fi
145 146 147 148 149 150
}

create_new_dir () {
    if [ ! -d "$1" ] ; then
        mkdir -p "$1"
    fi
151
    return 0
152 153 154 155 156 157 158
}

var_winedlloverride_update () {
    if [ ! -z "${WINEDLLOVERRIDES}" ]
    then export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}"
    else export WINEDLLOVERRIDES="${1}"
    fi
159
    return 0
160 161 162 163 164 165 166
}

var_vkd3d_config_update () {
    if [ ! -z "${VKD3D_CONFIG}" ]
    then export VKD3D_CONFIG="${1};${VKD3D_CONFIG}"
    else export VKD3D_CONFIG="${1}"
    fi
167
    return 0
168 169
}

Mikhail Tergoev's avatar
Mikhail Tergoev committed
170 171 172 173 174 175 176 177 178
var_radv_perftest_config_update () {
    if [ ! -z "${RADV_PERFTEST}" ]
    then export RADV_PERFTEST="${1};${RADV_PERFTEST}"
    else export RADV_PERFTEST="${1}"
    fi
    return 0
}

var_vk_istance_layers_config_update () {
castro-fidel's avatar
castro-fidel committed
179 180 181
    if [ ! -z "${PW_VK_INSTANCE_LAYERS}" ]
    then export PW_VK_INSTANCE_LAYERS="${1}:${PW_VK_INSTANCE_LAYERS}"
    else export PW_VK_INSTANCE_LAYERS="${1}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
182 183 184 185
    fi
    return 0
}

Mikhail Tergoev's avatar
Mikhail Tergoev committed
186 187 188 189 190 191 192

unpack_tar_zst () {
    set -o pipefail
    tar -I zstd -xvf "$1" -C "$2" | sszen
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
}

193 194 195
unpack_tar_xz () {
    set -o pipefail
    tar -Jxvf "$1" -C "$2" | sszen
Mikhail Tergoev's avatar
Mikhail Tergoev committed
196
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
197 198 199 200 201
}

unpack_tar_gz () {
    set -o pipefail
    tar -xzvf "$1" -C "$2" | sszen
Mikhail Tergoev's avatar
Mikhail Tergoev committed
202
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
203 204
}

205 206 207
unpack_tar () {
    set -o pipefail
    tar -xvf "$1" -C "$2" | sszen
Mikhail Tergoev's avatar
Mikhail Tergoev committed
208
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
209 210
}

castro-fidel's avatar
castro-fidel committed
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
pw_clear_pfx () {
    try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/system.reg"
    try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/user.reg"
    try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/userdef.reg"
    try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
    try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.update-timestamp"
    try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/.windows-serial"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/windows/"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Setup"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Windows"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/WindowsTask"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Package Cache"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/Public/Local Settings/Application Data/Microsoft"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/Public/Local Settings/Application Data/Temp"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/Public/Local Settings/Temporary Internet Files"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/Public/Application Data/Microsoft"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/Public/Application Data/wine_gecko"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/Public/Temp"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/Local Settings/Application Data/Microsoft"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/Local Settings/Application Data/Temp"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/Local Settings/Temporary Internet Files"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/Application Data/Microsoft"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/Application Data/wine_gecko"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/Temp"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files/Internet Explorer"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files/Windows Media Player"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files/Windows NT"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files/Common Files"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files (x86)/Internet Explorer"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files (x86)/Common Files"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files (x86)/Windows Media Player"
    try_remove_dir "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/Program Files (x86)/Windows NT"
243 244
    rm -f "${PORT_WINE_TMP_PATH}"/*.bin
    rm -f "${PORT_WINE_TMP_PATH}"/*.foz
245
    return 0
246 247
}

castro-fidel's avatar
castro-fidel committed
248 249 250 251 252 253 254 255 256 257 258 259 260
pw_reinstall_pp () {
    if [[ "${PW_REINSTALL_FROM_TERMINAL}" == 1 ]] ; then
        read -p "Do you want to reinstall PortProton? (Y,y - Yes):   " -n 1 -r
        if [[ ! $REPLY =~ ^[Yy]$ ]]
        then
            echo
            exit 1
        fi
    elif ! gui_question "${port_reinstall}" 
    then exit 1
    fi
    pw_clear_pfx
    try_remove_dir "${PORT_WINE_PATH}/data/dist"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
261
    try_remove_dir "${PORT_WINE_TMP_PATH}/VULKAN"
castro-fidel's avatar
castro-fidel committed
262 263 264 265 266 267 268 269 270
    try_remove_file "${PORT_WINE_TMP_PATH}/scripts_update_notifier"
    try_remove_file "${PORT_WINE_PATH}/data/user.conf"
    echo 1000 > "${PORT_WINE_TMP_PATH}/scripts_ver"
    echo
    echo "Restarting PP for reinstall files..."
    /usr/bin/env bash -c ${pw_full_command_line[*]} &
    exit 0
}

271 272
check_user_conf () {
    if [ ! -f "${USER_CONF}" ]; then
273
        echo "#!/usr/bin/env bash" > "${USER_CONF}"
274 275 276
        echo "# User overides db and var settings..." >> "${USER_CONF}"
        chmod u+x "${USER_CONF}"
    fi
277
    return 0
278 279 280
}

init_wine_ver () {
castro-fidel's avatar
castro-fidel committed
281 282 283
    if [[ -z `ls "${PORT_WINE_PATH}/data/dist/" | grep "${PW_WINE_USE}"` ]] ; then
        if [[ ! -z `echo "${PW_WINE_USE}" | grep "PROTON_LG"` ]] ; then
            export PW_WINE_USE=PROTON_LG
284
        else
castro-fidel's avatar
castro-fidel committed
285
            export PW_WINE_USE=PROTON_GE
286 287
        fi
    fi
castro-fidel's avatar
castro-fidel committed
288 289 290 291
    if [[ ! -z `echo "${PW_WINE_USE}" | grep "^PROTON_LG$"` ]] 
    then export PW_WINE_USE="${PW_PROTON_LG_VER}"
    elif [[ ! -z `echo "${PW_WINE_USE}" | grep "^PROTON_GE$"` ]]
    then export PW_WINE_USE="${PW_PROTON_GE_VER}"
292
    fi
castro-fidel's avatar
castro-fidel committed
293 294 295 296
    [ ! -z "${PW_WINE_VER}" ] && export PW_WINE_USE=`echo "${PW_WINE_VER}" | tr [[:lower:]] [[:upper:]]`
    [ ! -z "${PW_WINE_USE}" ] && export PW_WINE_USE=`echo "${PW_WINE_USE}" | tr [[:lower:]] [[:upper:]]`
    unset PW_WINE_VER
    export WINEDIR="${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}"
297 298 299
    export WINE="${WINEDIR}/bin/wine"
    export WINELOADER="${WINEDIR}/bin/wine"
    export WINESERVER="${WINEDIR}/bin/wineserver"
castro-fidel's avatar
castro-fidel committed
300 301 302 303

    export WINEDLLPATH="${WINEDIR}/lib64/wine:${WINEDIR}/lib/wine"
    if [[ ! -z "${PATH_TO_GAME}" ]] ; then
        export WINEDLLPATH+=":${PATH_TO_GAME}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
304
    fi
305

306
    if [[ -d "${WINEDIR}/files" && ! -d "${WINEDIR}/dist" ]] ; then
307 308 309 310 311
        for clear_dist_files in `ls "${WINEDIR}" | sed -e "s/^files$//g" | sed -e "s/^version$//g"` ; do 
            rm -fr "${WINEDIR}/$clear_dist_files"
        done
        mv -f "${WINEDIR}/files"/* "${WINEDIR}/"
        rm -fr "${WINEDIR}/files"
312 313 314 315 316 317
    elif [[ ! -d "${WINEDIR}/files" && -d "${WINEDIR}/dist" ]] ; then
        for clear_dist_files in `ls "${WINEDIR}" | sed -e "s/^dist$//g" | sed -e "s/^version$//g"` ; do 
            rm -fr "${WINEDIR}/$clear_dist_files"
        done
        mv -f "${WINEDIR}/dist"/* "${WINEDIR}/"
        rm -fr "${WINEDIR}/dist"
318 319 320 321 322 323
    elif [ -f "${WINEDIR}/proton_dist.tar" ] ; then
        unpack_tar "${WINEDIR}/proton_dist.tar" "${WINEDIR}/"
        for clear_dist_files in `ls "${WINEDIR}" | sed -e "s/^bin$//g" | sed -e "s/^lib$//g" | sed -e "s/^lib64$//g" | sed -e "s/^share$//g" | sed -e "s/^version$//g"` ; do 
            rm -fr "${WINEDIR}/$clear_dist_files"
        done
    fi
324
    if [[ -d "${WINEDIR}" ]] ; then
castro-fidel's avatar
castro-fidel committed
325
        [[ ! -f "${WINEDIR}/version" ]] && echo "${PW_WINE_USE}" > "${WINEDIR}/version"
326

castro-fidel's avatar
castro-fidel committed
327 328 329 330 331
        # if [[ -d "${WINEDIR}/lib32/" ]] ; then
        #     mv -f "${WINEDIR}/lib" "${WINEDIR}/lib64"
        #     mv -f "${WINEDIR}/lib32" "${WINEDIR}/lib"
        # fi

332 333 334 335 336
        if [[ ! -d "${WINEDIR}/lib64/" && -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
            create_new_dir "${WINEDIR}/lib64/wine"
            mv -f "${WINEDIR}/lib/wine/x86_64-unix" "${WINEDIR}/lib64/wine/"
            mv -f "${WINEDIR}/lib/wine/x86_64-windows" "${WINEDIR}/lib64/wine/"
        fi
castro-fidel's avatar
castro-fidel committed
337

Mikhail Tergoev's avatar
Mikhail Tergoev committed
338 339 340
        try_remove_file "${WINEDIR}/lib/libsteam_api.so"
        try_remove_file "${WINEDIR}/lib64/libsteam_api.so"
        
341
        for mono_gecko_chk in "mono" "gecko" ; do
Mikhail Tergoev's avatar
Mikhail Tergoev committed
342 343 344
            if check_symlink "${WINEDIR}/share/wine/${mono_gecko_chk}" ; then
                echo "${WINEDIR}/share/wine/${mono_gecko_chk} is symlink. OK."
            elif [[ -d "${WINEDIR}/share/wine/${mono_gecko_chk}" ]] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
345
                try_copy_dir "${WINEDIR}/share/wine/${mono_gecko_chk}" "${PORT_WINE_TMP_PATH}" | sszen
346 347
                try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
                try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine/
Mikhail Tergoev's avatar
Mikhail Tergoev committed
348 349 350 351 352
                echo "Copy ${WINEDIR}/share/wine/${mono_gecko_chk} to tmp and create symlink to ${WINEDIR}/share/wine/. OK."
            else
                try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
                try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine
                echo "${WINEDIR}/share/wine/${mono_gecko_chk} is broken symlink. Repair... OK."
353 354
            fi
        done
castro-fidel's avatar
castro-fidel committed
355

Mikhail Tergoev's avatar
Mikhail Tergoev committed
356
        grep 'Global,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' "${WINEDIR}/share/wine/wine.inf" &> /dev/null
castro-fidel's avatar
castro-fidel committed
357 358 359
        if [[ "$?" != "0" ]] ; then
            echo 'HKLM,Software\NVIDIA Corporation\Global,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' >> "${WINEDIR}/share/wine/wine.inf"
            echo 'HKLM,System\ControlSet001\Services\nvlddmkm,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' >> "${WINEDIR}/share/wine/wine.inf"
castro-fidel's avatar
castro-fidel committed
360 361
            sed -i '/Steam.exe/d' "${WINEDIR}/share/wine/wine.inf"
            sed -i '/\\Valve\\Steam/d' "${WINEDIR}/share/wine/wine.inf"
castro-fidel's avatar
castro-fidel committed
362
        fi
363
    fi
364
    return 0
365 366
}

castro-fidel's avatar
castro-fidel committed
367
pw_init_runtime () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
368

Mikhail Tergoev's avatar
Mikhail Tergoev committed
369
    if [[ -n "$(grep "ROSA Fresh" "/etc/os-release")" ]] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
370
        export LOCPATH="/run/host/usr/share/locale/"
castro-fidel's avatar
castro-fidel committed
371 372
    elif [[ -n "$(grep "altlinux" "/etc/os-release")" ]] ; then
        export LIBGL_DRIVERS_PATH="/usr/lib/X11/modules/dri:/usr/lib64/X11/modules/dri"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
373
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
374

castro-fidel's avatar
castro-fidel committed
375 376
    PW_PV_OVERRIDES="/usr/lib/pressure-vessel/overrides/lib" 
    export PW_LD_LIBRARY_PATH="${WINEDIR}/lib64:${WINEDIR}/lib:${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib32:${PW_PV_OVERRIDES}/x86_64-linux-gnu/aliases:${PW_PV_OVERRIDES}/i386-linux-gnu/aliases"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
377

castro-fidel's avatar
castro-fidel committed
378
    export PW_VK_LAYER_PATH="${PW_WINELIB}/portable/share/vulkan/implicit_layer.d"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
379 380 381

    export DISABLE_VK_LAYER_VALVE_steam_fossilize_1=1
    export DISABLE_VK_LAYER_VALVE_steam_overlay_1=1
Mikhail Tergoev's avatar
Mikhail Tergoev committed
382

Mikhail Tergoev's avatar
Mikhail Tergoev committed
383 384 385 386 387
    if [ ! -z ${PATH_TMP} ]
    then export PATH="${PATH_TMP}"
    else export PATH_TMP="${PATH}"
    fi
    if [ ! -z "${PATH}" ]
castro-fidel's avatar
castro-fidel committed
388 389 390 391 392
    then export PATH="${WINEDIR}/bin:${PATH}:${PW_WINELIB}/portable/bin"
    else export PATH="${WINEDIR}/bin:${PW_WINELIB}/portable/bin"
    fi

    if [ "${PW_USE_GSTREAMER}" = 1 ] ; then 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
393 394
        if [ -d "${WINEDIR}/lib64/gstreamer-1.0" ] ; then
            export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib64/gstreamer-1.0:${WINEDIR}/lib/gstreamer-1.0"
castro-fidel's avatar
castro-fidel committed
395 396
        elif [ -d "${PW_WINELIB}/portable/lib/lib64/gstreamer-1.0" ] ; then
            export GST_PLUGIN_SYSTEM_PATH_1_0="${PW_WINELIB}/portable/lib/lib64/gstreamer-1.0:${PW_WINELIB}/portable/lib/lib32/gstreamer-1.0"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
397 398 399 400 401 402 403 404 405 406
        fi
        export WINE_GST_REGISTRY_DIR="${PORT_WINE_TMP_PATH}"
        export MEDIACONV_AUDIO_DUMP_FILE="${PORT_WINE_TMP_PATH}"/audio.foz
        export MEDIACONV_AUDIO_TRANSCODED_FILE="${PORT_WINE_TMP_PATH}"/transcoded_audio.foz
        export MEDIACONV_VIDEO_DUMP_FILE="${PORT_WINE_TMP_PATH}"/video.foz
        export MEDIACONV_VIDEO_TRANSCODED_FILE="${PORT_WINE_TMP_PATH}"/transcoded_video.foz
    else
        var_winedlloverride_update "winegstreamer="
    fi

castro-fidel's avatar
castro-fidel committed
407 408
    if [[ ! -z "${PW_SANDBOX_HOME_PATH}" && -d "${PW_SANDBOX_HOME_PATH}" ]] ; then
        export pw_runtime="${PW_WINELIB}/pressure-vessel/bin/pressure-vessel-unruntime \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
409
        --unshare-home \
castro-fidel's avatar
castro-fidel committed
410
        --home="${PW_SANDBOX_HOME_PATH}" \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
411
        --no-gc-runtimes \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
412
        --gc-legacy-runtimes \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
413 414
        --copy-runtime \
        --remove-game-overlay \
castro-fidel's avatar
castro-fidel committed
415
        ${PW_ADD_TO_ARGS_IN_RUNTIME} --"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
416
    else
castro-fidel's avatar
castro-fidel committed
417
        export pw_runtime="${PW_WINELIB}/pressure-vessel/bin/pressure-vessel-unruntime \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
418
        --share-home \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
419
        --no-gc-runtimes \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
420
        --gc-legacy-runtimes \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
421 422
        --copy-runtime \
        --remove-game-overlay \
castro-fidel's avatar
castro-fidel committed
423
        ${PW_ADD_TO_ARGS_IN_RUNTIME} --"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
424
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
425

Mikhail Tergoev's avatar
Mikhail Tergoev committed
426 427
    export PRESSURE_VESSEL_IMPORT_VULKAN_LAYERS=0
    # export PRESSURE_VESSEL_GRAPHICS_PROVIDER=""
Mikhail Tergoev's avatar
Mikhail Tergoev committed
428 429 430

    unset PRESSURE_VESSEL_RUNTIME_ARCHIVE
    export PRESSURE_VESSEL_RUNTIME=runtime
castro-fidel's avatar
castro-fidel committed
431 432 433
    export PRESSURE_VESSEL_RUNTIME_BASE="${PW_WINELIB}"
    export PRESSURE_VESSEL_VARIABLE_DIR="${PW_WINELIB}/var"
    export PRESSURE_VESSEL_PREFIX="${PW_WINELIB}/pressure-vessel"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
434 435

    unset PRESSURE_VESSEL_FILESYSTEMS_RO PRESSURE_VESSEL_FILESYSTEMS_RW
castro-fidel's avatar
castro-fidel committed
436
    for PWRTMRO in ${PW_RT_MOUNT_RO[*]} ; do
Mikhail Tergoev's avatar
Mikhail Tergoev committed
437 438 439 440 441
        if [ ! -z "${PRESSURE_VESSEL_FILESYSTEMS_RO}" ]
        then export PRESSURE_VESSEL_FILESYSTEMS_RO="${PRESSURE_VESSEL_FILESYSTEMS_RO}:${PWRTMRO}"
        else export PRESSURE_VESSEL_FILESYSTEMS_RO="${PWRTMRO}"
        fi
    done
castro-fidel's avatar
castro-fidel committed
442
    for PWRTMRW in ${PW_RT_MOUNT_RW[*]} ; do
Mikhail Tergoev's avatar
Mikhail Tergoev committed
443 444 445 446 447 448
        if [ ! -z "${PRESSURE_VESSEL_FILESYSTEMS_RW}" ]
        then export PRESSURE_VESSEL_FILESYSTEMS_RW="${PRESSURE_VESSEL_FILESYSTEMS_RW}:${PWRTMRW}"
        else export PRESSURE_VESSEL_FILESYSTEMS_RW="${PWRTMRW}"
        fi
    done
    echo "RUNTIME is enabled"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
449 450
}

castro-fidel's avatar
castro-fidel committed
451 452 453
pw_mangohud_check () {
    if [[ "${PW_MANGOHUD}" == "1" ]] ; then
        export PW_MANGOHUD_SLR='MANGOHUD=1'
Mikhail Tergoev's avatar
Mikhail Tergoev committed
454
        MANGOHUD_LIB_NAME="libMangoHud.so"
castro-fidel's avatar
castro-fidel committed
455
        if [[ "${PW_VULKAN_USE}" = "0" ]] ; then 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
456 457
	        MANGOHUD_LIB_NAME="libMangoHud_dlsym.so:${MANGOHUD_LIB_NAME}"
        fi
castro-fidel's avatar
castro-fidel committed
458 459 460
        if [[ ! -z "${PW_LD_PRELOAD}" ]]
        then export PW_LD_PRELOAD="${PW_LD_PRELOAD}:${MANGOHUD_LIB_NAME}"
        else export PW_LD_PRELOAD="${MANGOHUD_LIB_NAME}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
461
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
462
        var_vk_istance_layers_config_update "VK_LAYER_MANGOHUD_overlay64:VK_LAYER_MANGOHUD_overlay32"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
463 464
        print_info "MANGOHUD is enabled"
    else
castro-fidel's avatar
castro-fidel committed
465
        export PW_MANGOHUD_SLR='DISABLE_MANGOHUD=1'
Mikhail Tergoev's avatar
Mikhail Tergoev committed
466 467 468 469 470
        print_info "MANGOHUD is disabled"
    fi
    return 0
}

castro-fidel's avatar
castro-fidel committed
471 472 473 474
pw_vkbasalt_check () {
    if [[ "${ENABLE_VKBASALT}" == 1 ]] && [[ "${PW_VULKAN_USE}" != "0" ]] && [[ "${PW_VULKAN_USE}" != "3" ]] ; then
        if [[ -z "${PW_VKBASALT_EFFECTS}" ]] ; then
            export PW_VKBASALT_EFFECTS="Curves:cas" 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
475
        fi
castro-fidel's avatar
castro-fidel committed
476 477 478
        sed -ri "s/effects = .*/effects = ${PW_VKBASALT_EFFECTS}/g" "${PORT_WINE_PATH}/data/vkBasalt.conf"
        if [[ -z "${PW_VKBASALT_FFX_CAS}" ]] ; then
            export PW_VKBASALT_FFX_CAS="0.7" 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
479
        fi
castro-fidel's avatar
castro-fidel committed
480
        sed -ri "s/casSharpness .*/casSharpness = ${PW_VKBASALT_FFX_CAS}/g" "${PORT_WINE_PATH}/data/vkBasalt.conf"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
481
        export VKBASALT_CONFIG_FILE="${PORT_WINE_PATH}/data/vkBasalt.conf"
castro-fidel's avatar
castro-fidel committed
482
        # sed -i s/'> = 0.05;'/'> = 0.035;'/ "${PW_WINELIB}/pressure-vessel/reshade/shaders/FilmGrain2.fx"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
483
        var_vk_istance_layers_config_update "VK_LAYER_VKBASALT_post_processing32:VK_LAYER_VKBASALT_post_processing64"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
484 485 486 487 488 489 490 491 492
        print_info "vkBasalt is enabled"
    else
        export DISABLE_VKBASALT=1
        print_info "vkBasalt is disabled"
    fi
    return 0
}

check_nvidia_vk_icd_file () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
493 494 495 496 497 498 499
    if [[ -f "/usr/share/vulkan/icd.d/nvidia_icd.json" ]] ; then
        export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json"
    elif [[ -f "/etc/vulkan/icd.d/nvidia_icd.json" ]] ; then
        export VK_ICD_FILENAMES="/etc/vulkan/icd.d/nvidia_icd.json"
    fi
}

500
regdlloverrides () {
castro-fidel's avatar
castro-fidel committed
501 502 503 504 505 506 507 508 509
    PW_DLL_EXE=`echo $@ | awk -F: '{print $1}'`
    PW_DLL_LIB=`echo $@ | awk -F: '{print $2}' | awk -F= '{print $1}'`
    PW_DLL_SET=`echo $@ | awk -F= '{print $NF}'`
    case "${PW_DLL_SET}" in
        "n,b") PW_DLL_IN_REG="native,builtin" ;;
        "b,n") PW_DLL_IN_REG="builtin,native" ;;
            "n") PW_DLL_IN_REG="native" ;;
            "b") PW_DLL_IN_REG="builtin" ;;
            *) PW_DLL_IN_REG="" ;;
510
    esac
castro-fidel's avatar
castro-fidel committed
511
    grep 'HKCU,Software\\Wine\\AppDefaults\\'"${PW_DLL_EXE}"'\\DllOverrides,'\"${PW_DLL_LIB}\",0x2,\"${PW_DLL_IN_REG}\" "${WINEDIR}/share/wine/wine.inf"
512
    if [[ "$?" != "0" ]] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
513 514
        grep "ProtonOverrides" "${WINEDIR}/share/wine/wine.inf"
        if [[ "$?" == "0" ]] ; then
castro-fidel's avatar
castro-fidel committed
515
            sed -i "/\[ProtonOverrides\]/a HKCU,Software\\\Wine\\\AppDefaults\\\\${PW_DLL_EXE}\\\DllOverrides,\"${PW_DLL_LIB}\",0x2,\"${PW_DLL_IN_REG}\"" "${WINEDIR}/share/wine/wine.inf"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
516
        else
castro-fidel's avatar
castro-fidel committed
517
            sed -i "/\[SteamClient.ntamd64\]/a HKCU,Software\\\Wine\\\AppDefaults\\\\${PW_DLL_EXE}\\\DllOverrides,\"${PW_DLL_LIB}\",0x2,\"${PW_DLL_IN_REG}\"" "${WINEDIR}/share/wine/wine.inf"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
518
        fi
519 520 521
    fi
}

522 523 524 525
wait_wineserver () {
    while [ ! -z "$(ls -l /proc/*/exe 2>/dev/null | grep -ie ${portname} | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}')" ] ; do
        sleep 1
    done
526
    return 0
527
}
528
export -f wait_wineserver
529 530

kill_portwine () {
531
    wine_pids="`ls -l /proc/*/exe 2>/dev/null | grep -ie ${portname} | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}'`"
532
    if  [ ! -z "${wine_pids}" ] ; then
castro-fidel's avatar
castro-fidel committed
533 534 535
        for pw_kill_pids in ${wine_pids} ; do
            if [ "`ps cax | grep ${pw_kill_pids}`" ] ; then
                kill -n 9 ${pw_kill_pids} > /dev/null 2>&1  
536 537 538
            fi
        done
    fi
539 540
    bwrap_pids="`pgrep -a wrap | grep ${portname} | head -n 1 | awk '{print $1}'`"
    if  [ ! -z "${bwrap_pids}" ] ; then
castro-fidel's avatar
castro-fidel committed
541 542 543
        for pw_kill_pids in ${bwrap_pids} ; do
            if [ "`ps cax | grep ${pw_kill_pids}`" ] ; then
                kill -n 9 ${pw_kill_pids} > /dev/null 2>&1
544 545
            fi
        done
546
    fi
547
    return 0
548 549 550
}
export -f kill_portwine

castro-fidel's avatar
castro-fidel committed
551
pw_kill_autostart () {
castro-fidel's avatar
castro-fidel committed
552 553 554 555
    if [[ -z "${2}" ]]
    then SWAIT=5
    else SWAIT="${2}"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
556 557 558 559 560
    sleep 5
    
    while true ; do
        if  [[ -z "`ps aux | grep -m 1 "$1" | grep -v grep | awk '{print $2}'`" ]] && [[ ! -z "`ps aux | grep wrap | grep -v grep | grep -i ${portname} | head -n 1`" ]] ; then
            echo -e "PID "$1" not found"
castro-fidel's avatar
castro-fidel committed
561
            sleep "${SWAIT}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
562
        else
castro-fidel's avatar
castro-fidel committed
563
            sleep "${SWAIT}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
564 565 566 567 568
            kill_portwine 
            break
        fi
    done

castro-fidel's avatar
castro-fidel committed
569 570
    if [[ ! -z "`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
571
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
572

573
    return 0
574
}
castro-fidel's avatar
castro-fidel committed
575
export -f pw_kill_autostart
576

577
stop_portwine () { 
578 579 580
    if [ "$int_xneur" = "1"  ]; then
        xneur &
    fi
castro-fidel's avatar
castro-fidel committed
581 582
    if [ ! -z ${PW_XKBD} ]; then
        setxkbmap ${PW_XKBD}
583
    fi
castro-fidel's avatar
castro-fidel committed
584
    pw_stop_progress_bar
585 586
    try_remove_file "${PORT_SCRIPTS_PATH}/0"
    try_remove_file "${PORT_SCRIPTS_PATH}/1"
587
    kill_portwine &&
castro-fidel's avatar
castro-fidel committed
588 589
    try_remove_dir "${PW_WINELIB}/var"
    find "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/" -maxdepth 1 -type f -name "*.tmp" -delete
590
    if [ ! -z "`pgrep -a yad_new | grep "\-\-notification" | awk '{print $1}'`" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
591
        kill -s SIGUSR1 "`pgrep -a yad_new | grep "\-\-notification" | awk '{print $1}'`" 2>/dev/null
592
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
593
    add_in_stop_portwine &>/dev/null
594
    kill -n 9 `pgrep -a start.sh | grep -i '/PortProton/' | awk '{print $1}'` > /dev/null 2>&1
Mikhail Tergoev's avatar
Mikhail Tergoev committed
595
    killall yad_new &>/dev/null
596
    exit 0
597
}
598
export -f stop_portwine
599

castro-fidel's avatar
castro-fidel committed
600 601 602
pw_download_libs () {
    if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep libs_v | grep -v libs${PW_LIBS_VER}`" ] ; then
        for RM_LIBS in `ls ${PORT_WINE_TMP_PATH} | grep libs_v | grep -v libs${PW_LIBS_VER}`
603 604 605
        do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}"
        done
    fi
castro-fidel's avatar
castro-fidel committed
606 607
    if [[ ! -e "${PW_WINELIB}/portable/bin/yad" || ! -e "${PW_WINELIB}/portable/lib/p7zip/7z" \
    || ! -e "${PW_WINELIB}/runtime/files/bin/vkcube" || -e "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ]] ;
608
    then
609
        print_info "Download and install libraries..."
castro-fidel's avatar
castro-fidel committed
610 611 612
        if try_download "github.com/Castro-Fidel/PortWINE/releases/download/libs${PW_LIBS_VER}/libs${PW_LIBS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ; then
            if unpack_tar_xz "${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"
613
            else
castro-fidel's avatar
castro-fidel committed
614 615 616
                try_remove_dir "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
                try_remove_file "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz"
                zenity_error_download && pw_download_libs
617 618
            fi
        else
castro-fidel's avatar
castro-fidel committed
619
            zenity_error_download && pw_download_libs
620 621
        fi
    fi
castro-fidel's avatar
castro-fidel committed
622 623 624 625
    export pw_yad="${PW_WINELIB}/portable/bin/yad"
    export pw_yad_new="${PW_WINELIB}/portable/bin/yad_new"
    export pw_zstd="${PW_WINELIB}/portable/bin/zstd"
    export pw_7z="${PW_WINELIB}/portable/lib/p7zip/7z"
626 627
    if [ -x "`which xterm 2>/dev/null`" ]; then
        export SYS_XTERM=`which xterm`
castro-fidel's avatar
castro-fidel committed
628
        export PW_XTERM="${SYS_XTERM} -geometry 159x37 -e"
629
    else
castro-fidel's avatar
castro-fidel committed
630
        export PW_XTERM="${PW_WINELIB}/runtime/files/bin/xterm -geometry 159x37 -e"
631
    fi
632
    return 0
633 634
}

castro-fidel's avatar
castro-fidel committed
635
pw_check_and_download_wine () {
636
    [ ! -d "${PORT_WINE_PATH}/data/dist/" ] && create_new_dir "${PORT_WINE_PATH}/data/dist"
castro-fidel's avatar
castro-fidel committed
637
    if [[ "${PW_WINE_USE}" == "GET-OTHER-WINE" ]] ; then
638 639
        gui_proton_downloader
    fi
castro-fidel's avatar
castro-fidel committed
640 641 642 643 644 645 646 647 648 649 650 651
    if [[ ! -z `echo "${PW_WINE_USE}" | grep "^PROTON_LG$"` ]] 
    then export PW_WINE_USE="${PW_PROTON_LG_VER}"
    elif [[ ! -z `echo "${PW_WINE_USE}" | grep "^PROTON_GE$"` ]]
    then export PW_WINE_USE="${PW_PROTON_GE_VER}"
    fi
    if [ ! -d "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" ] ; then
        print_info "Download and install ${PW_WINE_USE}..."
        if try_download "github.com/Castro-Fidel/wine_builds/releases/download/${PW_WINE_USE}/${PW_WINE_USE}.tar.xz" "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" ; then
            if unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" "${PORT_WINE_PATH}/data/dist/" ; then
                echo "${PW_WINE_USE}" > "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}/version"
                try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz"
                try_remove_dir "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}"
652
            else
castro-fidel's avatar
castro-fidel committed
653 654 655
                try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz"
                try_remove_dir "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}"
                try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}"
656

castro-fidel's avatar
castro-fidel committed
657
                zenity_error_download && pw_check_and_download_wine
658 659
            fi
        else
castro-fidel's avatar
castro-fidel committed
660
            zenity_error_download && pw_check_and_download_wine
661 662
        fi
    fi
663
    return 0
664 665
}

Mikhail Tergoev's avatar
Mikhail Tergoev committed
666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706
pw_check_and_download_dxvk_and_vkd3d () {
    #Download stable and git version DXVK
    for DXVK_VAR_VER in "${DXVK_STABLE_VER}" "${DXVK_GIT_VER}" ; do
        if [ ! -d "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}" ] ; then
            print_info "Download and install DXVK v.${DXVK_VAR_VER}"
            if try_download "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VAR_VER}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" ; then
                if unpack_tar_gz "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}" ; then
                    try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz"
                else
                    try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz"
                    try_remove_dir dxvk-${DXVK_VAR_VER}

                    zenity_error_download && pw_check_and_download_dxvk_and_vkd3d
                fi
            else
                zenity_error_download && pw_check_and_download_dxvk_and_vkd3d
            fi
        fi
    done

    #Download stamle and git version VKD3D
    for VKD3D_VAR_VER in "${VKD3D_STABLE_VER}" "${VKD3D_GIT_VER}" ; do
        if [ ! -d "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}" ] ; then
            print_info "Download and install VKD3D-PROTON v.${VKD3D_VAR_VER}"
            if try_download "https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v${VKD3D_VAR_VER}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" ; then
                if unpack_tar_zst "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}" ; then
                    try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst"
                else
                    try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst"
                    try_remove_dir vkd3d-proton-${VKD3D_VAR_VER}

                    zenity_error_download && pw_check_and_download_dxvk_and_vkd3d
                fi
            else
                zenity_error_download && pw_check_and_download_dxvk_and_vkd3d
            fi
        fi
    done
    return 0
}

castro-fidel's avatar
castro-fidel committed
707 708 709
pw_check_and_download_plugins () {
    if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`" ] ; then
        for RM_PLUGINS in `ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`
710 711 712
        do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
        done
    fi
castro-fidel's avatar
castro-fidel committed
713
    if [[ ! -d "${PW_PLUGINS_PATH}/BattlEye_Runtime" || ! -d "${PW_PLUGINS_PATH}/fake_dlss" \
castro-fidel's avatar
castro-fidel committed
714
    || ! -d "${PW_PLUGINS_PATH}/nvapi" || ! -d "${PW_PLUGINS_PATH}/nvml" ]]
715
    then
castro-fidel's avatar
castro-fidel committed
716 717 718 719
        print_info "Download and install plugins${PW_PLUGINS_VER}..."
        if try_download "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" ; then
            if unpack_tar_xz "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then
                try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" 
720
            else
castro-fidel's avatar
castro-fidel committed
721 722
                try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
                try_remove_dir "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
723

castro-fidel's avatar
castro-fidel committed
724
                zenity_error_download && pw_check_and_download_wine
725 726
            fi
        else
castro-fidel's avatar
castro-fidel committed
727
            zenity_error_download && pw_check_and_download_wine
728 729
        fi
    fi
730
    return 0
731 732
}

castro-fidel's avatar
castro-fidel committed
733
pw_init_db () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
734
    if [[ ! -z "${portwine_exe}" ]] ; then
735
        export PORTWINE_DB=`echo "${portwine_exe}" | awk -F '/' 'NF>1{print $NF}' | sed s/".exe"/""/gi`
Mikhail Tergoev's avatar
Mikhail Tergoev committed
736
        if [[ -f "${portwine_exe}".ppdb ]] && [[ "${PORTWINE_DB}" != "RiotClientServices" ]] ; then
737
            export PORTWINE_DB_FILE="${portwine_exe}".ppdb
castro-fidel's avatar
castro-fidel committed
738
            sed -i 's/ PP_/ PW_/g' "${PORTWINE_DB_FILE}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
739
            . "${PORTWINE_DB_FILE}"
castro-fidel's avatar
castro-fidel committed
740 741 742
            if [[ -z "`ls -p "${PORT_WINE_PATH}/prefixes/" | grep -e "^${PW_PREFIX_NAME}/"`" ]] ; then
                export PW_PREFIX_NAME=`echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}'`
                edit_db_from_gui PW_PREFIX_NAME
Mikhail Tergoev's avatar
Mikhail Tergoev committed
743
            fi
744 745 746
        else
            orig_IFS="$IFS"
            IFS=$'\n'
castro-fidel's avatar
castro-fidel committed
747 748
            PW_FIND_DB_FILE=`grep -ilw "#${PORTWINE_DB}.exe" "${PORT_SCRIPTS_PATH}/portwine_db"/* | sed s/".exe"/""/gi`
            if [[ `echo "$PW_FIND_DB_FILE" | wc -l` -gt 1 ]] ; then
749
                unset ADD_CB_DBFILE
castro-fidel's avatar
castro-fidel committed
750
                for PW_CHECK_DB_FILE in $PW_FIND_DB_FILE ; do
751
                    if [[ -z "${ADD_CB_DBFILE}" ]] ; then
castro-fidel's avatar
castro-fidel committed
752
                        export ADD_CB_DBFILE="${PW_CHECK_DB_FILE}"
753
                    else
castro-fidel's avatar
castro-fidel committed
754
                        export ADD_CB_DBFILE="${PW_CHECK_DB_FILE}!${ADD_CB_DBFILE}"
755 756
                    fi
                done
castro-fidel's avatar
castro-fidel committed
757 758
                PORTWINE_DB_FILE=`"${pw_yad_new}" --text-align=center --text "${PW_SELECTION_DB_LOC}" --borders=15 --form --center  \
                --title "Database file selection..." --window-icon="$PW_GUI_ICON_PATH/port_proton.png"  --form --separator="" \
759 760
                --field="DB FILE: :CB" "${ADD_CB_DBFILE}"`
                if [[ "$?" == "1" || "$?" == "252" ]] ; then exit 0 ; fi
castro-fidel's avatar
castro-fidel committed
761 762 763 764
                sed -i 's/ PP_/ PW_/g' "${PORTWINE_DB_FILE}"
            elif [[ `echo "$PW_FIND_DB_FILE" | wc -l` -eq 1 ]] ; then
                PORTWINE_DB_FILE="${PW_FIND_DB_FILE}"
                sed -i 's/ PP_/ PW_/g' "${PORTWINE_DB_FILE}"
765 766
            fi
            IFS="$orig_IFS"
castro-fidel's avatar
castro-fidel committed
767 768
            if [[ -f "${PW_FIND_DB_FILE}" ]] && [[ -z `grep "^export PW_DISABLED_CREATE_DB=1" "${PW_FIND_DB_FILE}"` ]] ; then
                try_copy_file "${PW_FIND_DB_FILE}" "${portwine_exe}".ppdb
Mikhail Tergoev's avatar
Mikhail Tergoev committed
769
                export PORTWINE_DB_FILE="${portwine_exe}".ppdb
Mikhail Tergoev's avatar
Mikhail Tergoev committed
770 771 772 773
            fi
            if [[ ! -z `echo "${portwine_exe}" | grep "/data/prefixes/"` ]] && \
                [[ -z `echo "${portwine_exe}" | grep "/data/prefixes/DEFAULT/"` ]]
            then 
castro-fidel's avatar
castro-fidel committed
774 775
                export PW_PREFIX_NAME=`echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}'`
                edit_db_from_gui PW_PREFIX_NAME
776
            fi
777
        fi
778 779
        if [ ! -z "${PORTWINE_DB_FILE}" ]; then
            . "${PORTWINE_DB_FILE}"
780
            init_wine_ver &&
781
            print_info "Use ${PORTWINE_DB_FILE} db file."
782
        fi
783 784 785
        if [ -z "$PATH_TO_GAME" ] ; then
            export PATH_TO_GAME="$( cd "$( dirname "${portwine_exe}" )" >/dev/null 2>&1 && pwd )"
        fi
786
    fi
787
    return 0
788 789
}

castro-fidel's avatar
castro-fidel committed
790
pw_port_update () {
791
    ###SCRIPTS UPDATE###
792
    if [ ! -f "${PORT_WINE_TMP_PATH}/scripts_ver" ] ; then
793
        echo "2022" > "${PORT_WINE_TMP_PATH}/scripts_ver"
794 795
    fi
    export scripts_install_ver=`cat "${PORT_WINE_TMP_PATH}/scripts_ver" | head -n 1`
796
    curl -s --list-only https://raw.githubusercontent.com/Castro-Fidel/PortWINE/master/data_from_portwine/scripts/var > "${PORT_WINE_TMP_PATH}/curent_var_ver"
797 798 799 800 801 802 803
    [[ ! -f "${PORT_WINE_TMP_PATH}/scripts_update_notifier" ]] && echo "1" > "${PORT_WINE_TMP_PATH}/scripts_update_notifier"
    read "scripts_update_not" < "${PORT_WINE_TMP_PATH}/scripts_update_notifier"
    if [[ "${scripts_update_not}" == "1" ]] ; then
        export scripts_current_ver=`cat "${PORT_WINE_TMP_PATH}/curent_var_ver" | grep SCRIPTS_NEXT_VERSION | awk -F "=" '{print $2}'`
        print_info "Scripts version in github = ${scripts_current_ver}"
        print_info "Scripts version local = ${scripts_install_ver}"
        if [[ ! -z "${scripts_current_ver}" ]] &&  [[ "${scripts_current_ver}" -gt "${scripts_install_ver}" ]] ; then
castro-fidel's avatar
castro-fidel committed
804 805 806
            if [[ -f "${PW_WINELIB}/portable/bin/yad_new" ]] ; then
                export pw_yad_new="${PW_WINELIB}/portable/bin/yad_new"
                curl -s --list-only "https://raw.githubusercontent.com/Castro-Fidel/PortWINE/master/data_from_portwine/${PW_CHANGELOG_FILE}" | tee "${PORT_WINE_TMP_PATH}/curent_var_ver" | sszen
807
                CHANGLOG_NEWS=`cat "${PORT_WINE_TMP_PATH}/curent_var_ver" | sed "/Scripts version ${scripts_install_ver}/,$ d" | sed '1,/---/ d' `
castro-fidel's avatar
castro-fidel committed
808
                xcsd=`"${pw_yad_new}" --title "${scripts_upd2} v.${scripts_current_ver}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
809 810 811 812 813 814 815
                --borders=5 --form --separator='%%%' --width=1000 --height=350 --center \
                --field=":TXT" "${CHANGLOG_NEWS}" \
                --field="   ${scripts_upd3} :CB" "${scripts_upd4}!${scripts_upd5}!${scripts_upd6}" `
                YAD_STATUS="$?"
                if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi
                xcsd=`echo "${xcsd}" | awk -F'%%%' '{print $2}'`
            else
816
                xcsd=`zenity --title  "${scripts_upd1}" --text "${scripts_upd2}" --list --radiolist --height=240 --column="${inst_set}" --column "${scripts_upd3}" \
817 818 819
                TRUE "${scripts_upd4}" \
                FALSE "${scripts_upd5}" \
                FALSE "${scripts_upd6}"`
820 821 822 823 824 825
            fi
            case $xcsd in
                "${scripts_upd4}")
                    echo "######################################################"
                    print_info "Update scripts..."
                    try_remove_file "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
826
                    if try_download "github.com/Castro-Fidel/PortWINE/archive/refs/heads/master.tar.gz" "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
827 828 829 830 831 832
                        if unpack_tar_gz "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" "${PORT_WINE_TMP_PATH}"
                        then
                            create_new_dir "${PORT_WINE_TMP_PATH}/scripts_backup"
                            cd "${PORT_WINE_PATH}/data/"
                            tar -czpf "${PORT_WINE_TMP_PATH}/scripts_backup/scripts_v.${scripts_install_ver}.tar.gz" ./scripts ./img \
                            ./changelog* ./dxvk.conf ./vkBasalt.conf ./tmp/scripts_ver
833 834 835 836
                            cp -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/data_from_portwine/"* "${PORT_WINE_PATH}/data/"
                            try_remove_file "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
                            try_remove_dir "${PORT_WINE_TMP_PATH}/PortWINE-master/"
                            echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver"
castro-fidel's avatar
castro-fidel committed
837
                            if [[ -z "${pw_yad_new}" ]] ; then
838
                                zenity --title="Changelog" --text-info --width=1200 --height=550 \
castro-fidel's avatar
castro-fidel committed
839 840 841
                                --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}"
                            fi 
                            [ "$?" == 0 ] && echo "Restarting PP after update..." && /usr/bin/env bash -c ${pw_full_command_line[*]} &
842 843 844
                            exit 0
                        fi
                    else
castro-fidel's avatar
castro-fidel committed
845
                        zenity_error_download && pw_scripts_update
846 847 848 849
                    fi ;;
                "${scripts_upd5}")
                    echo " " ;;
                "${scripts_upd6}")
Mikhail Tergoev's avatar
Mikhail Tergoev committed
850
                    echo "0" > "${PORT_WINE_TMP_PATH}/scripts_update_notifier" ;;
851
            esac
852 853
        fi
    fi
854
    try_remove_file "${PORT_WINE_TMP_PATH}/curent_var_ver"
855
    return 0
856 857
}

858 859

update_winetricks () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
860
    W_TRX_URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
861 862 863 864 865 866 867 868 869 870
    W_TRX_EXT_VER="$(curl -s --list-only ${W_TRX_URL} | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
    print_info "Version winetricks on server: ${W_TRX_EXT_VER}"
    W_TRX_INT_VER="$(cat "${PORT_WINE_TMP_PATH}/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
    print_info "Version winetricks in port: ${W_TRX_INT_VER}"
    if [[ ! -f "${PORT_WINE_TMP_PATH}/winetricks" && ! -z "$W_TRX_EXT_VER" ]] || [[ "$W_TRX_INT_VER" != "$W_TRX_EXT_VER" && ! -z "$W_TRX_EXT_VER" ]]; then
        if try_download "${W_TRX_URL}" "${PORT_WINE_TMP_PATH}/winetricks_new" ; then
            mv -f "${PORT_WINE_TMP_PATH}/winetricks_new" "${PORT_WINE_TMP_PATH}/winetricks"
            W_TRX_INT_VER="$(cat "${PORT_WINE_TMP_PATH}/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')" && print_info "Winetricks version in port has been updated (${W_TRX_INT_VER})" 
            chmod u+x "${PORT_WINE_TMP_PATH}/winetricks"
        fi
871
    fi
872 873 874 875 876 877 878
    if  [ -f "${PORT_WINE_TMP_PATH}/winetricks" ] ; then
        sed -i 's/w_metadata vcrun2015 dlls \\/w_metadata !dont_use_2015! dlls \\/' "${PORT_WINE_TMP_PATH}/winetricks"
        sed -i 's/w_metadata vcrun2017 dlls \\/w_metadata !dont_use_2017! dlls \\/' "${PORT_WINE_TMP_PATH}/winetricks"
        #HOTFIX SHA256SUM FOR VC_RUN2019
        sed -i 's/vc_redist.x86.exe 1acd8d5ea1cdc3eb2eb4c87be3ab28722d0825c15449e5c9ceef95d897de52fa/vc_redist.x86.exe 80c7969f4e05002a0cd820b746e0acb7406d4b85e52ef096707315b390927824/g' "${PORT_WINE_TMP_PATH}/winetricks"
        sed -i 's/vc_redist.x64.exe 003063723b2131da23f40e2063fb79867bae275f7b5c099dbd1792e25845872b/vc_redist.x64.exe 9b9dd72c27ab1db081de56bb7b73bee9a00f60d14ed8e6fde45dab3e619b5f04/g' "${PORT_WINE_TMP_PATH}/winetricks"

879
    fi
880
    return 0
881 882 883
}

edit_db_from_gui () {
884
    echo "edit_db_from_gui PORTWINE_DB_FILE=$PORTWINE_DB_FILE"
885
    for mod_db in $@ ; do
886 887
        echo "${mod_db}=${!mod_db}"
        if [ -z "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}="`" ] ; then
888
            echo "export ${mod_db}=\"${!mod_db}\"" >> "${PORTWINE_DB_FILE}"
889
        elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}=" | grep -v "#"`" ] ; then
890 891
            if [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}=" | grep -v "#"`" != "export ${mod_db}=\"${!mod_db}\"" ] ; then
                sed -ri "s/^export ${mod_db}=.*/export ${mod_db}=\"${!mod_db}\"/" "${PORTWINE_DB_FILE}"
892 893
            fi
        elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}="`" != "export ${mod_db}=${!mod_db}" ] ; then
894
            sed -ri "s/.*export ${mod_db}=.*/export ${mod_db}=\"${!mod_db}\"/g" "${PORTWINE_DB_FILE}"
895
        fi
896
    done
897
    return 0
898
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
899

castro-fidel's avatar
castro-fidel committed
900
pw_create_gui_png () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
901 902 903 904 905
    if [ ! -z "${PORTWINE_CREATE_SHORTCUT_NAME}" ] ; then
        export PORTPROTON_NAME="${PORTWINE_CREATE_SHORTCUT_NAME}"
    else
        export PORTPROTON_NAME="$(basename "${portwine_exe}" | sed s/".exe"/""/gi )"
    fi
castro-fidel's avatar
castro-fidel committed
906
    PW_RESIZE_TO=128
Mikhail Tergoev's avatar
Mikhail Tergoev committed
907
    try_remove_file "${PORT_WINE_PATH}/data/img/setup.png"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
908 909 910 911
    if [[ -x "`which wrestool 2>/dev/null`" ]] && [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then
        try_remove_dir "${PORT_WINE_TMP_PATH}/tmp_img"
        create_new_dir "${PORT_WINE_TMP_PATH}/tmp_img"
        wrestool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "${portwine_exe}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
912
        cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".ico" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
castro-fidel's avatar
castro-fidel committed
913 914
        icotool -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
        if [[ ! -f "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}")" ]] ; then 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
915 916 917
            icotool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
            cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png"
        else
castro-fidel's avatar
castro-fidel committed
918
            cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
919
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
920 921
        cp -f "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png"
    fi
castro-fidel's avatar
castro-fidel committed
922
    if [[ -z "`file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}"`" ]] && \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
923
       [[ -x "`which "convert" 2>/dev/null`" ]] && [[ -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then
castro-fidel's avatar
castro-fidel committed
924
        convert "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" -resize ${PW_RESIZE_TO}x${PW_RESIZE_TO} "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
925
    fi
castro-fidel's avatar
castro-fidel committed
926 927 928
    if [[ -z "${PW_ICON_FOR_YAD}" ]] ; then
        if [[ ! -z "`file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}"`" ]] ; then
            export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" 
929
        else
castro-fidel's avatar
castro-fidel committed
930
            export PW_ICON_FOR_YAD="${PW_GUI_ICON_PATH}/port_proton.png"
931
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
932 933
    fi
}