functions_helper 45.4 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
try_download () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
106
    PW_DOWNLOAD_FILE_NAME="$(basename $1)"
107
    set -o pipefail
Mikhail Tergoev's avatar
Mikhail Tergoev committed
108 109
    wget -O "$2" --read-timeout 300 --retry-connrefused --timeout 15 --tries 2 \
    --user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" "${1}" 2>&1 | \
110
    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./' | \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
111
    zenity --progress --percentage=0 --title="Download ${PW_DOWNLOAD_FILE_NAME}" --text=Starting... --auto-close --width=500 --height=90
112
    if [ "${PIPESTATUS[0]}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
113 114
        print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from GitHub."
        print_info "Try download ${PW_DOWNLOAD_FILE_NAME} from FTP"
115
        try_remove_file "$2"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
116 117 118 119 120 121 122 123 124
        wget -O "$2" --read-timeout 300 --retry-connrefused --timeout 15 --tries 2 \
        --user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" --ftp-user=anonymous "ftp://171.22.215.18/archives/${PW_DOWNLOAD_FILE_NAME}" 2>&1 | \
        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./' | \
        zenity --progress --percentage=0 --title="Download ${PW_DOWNLOAD_FILE_NAME}" --text=Starting... --auto-close --width=500 --height=90
        if [ "${PIPESTATUS[0]}" != 0 ] ; then
            print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from FTP."
            try_remove_file "$2"
            return 1   
        fi
125
    fi
126
    try_remove_file "${PORT_WINE_TMP_PATH}/download_log"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
127
    return 0
128 129
}

130 131
try_download_to_path () {
    set -o pipefail
132 133
    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 | \
134
    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./' | \
135
    zenity --progress --percentage=0 --title="Download $(basename $1)" --text=Starting... --auto-close --width=500 --height=90
136
    if [ "${PIPESTATUS[0]}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
137
        print_error "Failed to download $1."
138 139 140 141
        return 1 
    else 
        return 0
    fi
142 143
}

144
try_download_silent () {
145 146
    wget -O "$2" --read-timeout 300 --retry-connrefused --timeout 15 --tries 3 \
    --user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" "$1"
147
    if [ "${PIPESTATUS[0]}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
148
        print_error "Failed to download $1. Skipping."
149 150 151 152 153
        try_remove_file "$2"
        return 1 
    else 
        return 0
    fi
154 155 156 157 158 159
}

create_new_dir () {
    if [ ! -d "$1" ] ; then
        mkdir -p "$1"
    fi
160
    return 0
161 162 163 164 165 166 167
}

var_winedlloverride_update () {
    if [ ! -z "${WINEDLLOVERRIDES}" ]
    then export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}"
    else export WINEDLLOVERRIDES="${1}"
    fi
168
    return 0
169 170 171 172 173 174 175
}

var_vkd3d_config_update () {
    if [ ! -z "${VKD3D_CONFIG}" ]
    then export VKD3D_CONFIG="${1};${VKD3D_CONFIG}"
    else export VKD3D_CONFIG="${1}"
    fi
176
    return 0
177 178
}

Mikhail Tergoev's avatar
Mikhail Tergoev committed
179 180 181 182 183 184 185 186 187
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
188 189 190
    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
191 192 193 194
    fi
    return 0
}

Mikhail Tergoev's avatar
Mikhail Tergoev committed
195 196
unpack_tar_zst () {
    set -o pipefail
Mikhail Tergoev's avatar
Mikhail Tergoev committed
197 198 199 200 201 202 203 204
    unset PW_ZSTD_PORT
    if  [[ `which zstd` ]] &>/dev/null ; then
        tar -I zstd -xvf "$1" -C "$2" | sszen
        [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
    else
        env LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib" tar -I "${PW_WINELIB}/portable/bin/zstd" -xvf "$1" -C "$2" | sszen
        [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
205 206
}

207 208 209
unpack_tar_xz () {
    set -o pipefail
    tar -Jxvf "$1" -C "$2" | sszen
Mikhail Tergoev's avatar
Mikhail Tergoev committed
210
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
211 212 213 214 215
}

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

219 220 221
unpack_tar () {
    set -o pipefail
    tar -xvf "$1" -C "$2" | sszen
Mikhail Tergoev's avatar
Mikhail Tergoev committed
222
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
223 224
}

castro-fidel's avatar
castro-fidel committed
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
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"
257 258
    rm -f "${PORT_WINE_TMP_PATH}"/*.bin
    rm -f "${PORT_WINE_TMP_PATH}"/*.foz
259
    return 0
260 261
}

castro-fidel's avatar
castro-fidel committed
262 263 264 265 266 267 268 269 270 271 272 273 274
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
275
    try_remove_dir "${PORT_WINE_TMP_PATH}/VULKAN"
castro-fidel's avatar
castro-fidel committed
276 277 278 279 280 281 282 283 284
    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
}

285 286
check_user_conf () {
    if [ ! -f "${USER_CONF}" ]; then
287
        echo "#!/usr/bin/env bash" > "${USER_CONF}"
288 289 290
        echo "# User overides db and var settings..." >> "${USER_CONF}"
        chmod u+x "${USER_CONF}"
    fi
291
    return 0
292 293 294
}

init_wine_ver () {
castro-fidel's avatar
castro-fidel committed
295 296 297
    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
298
        else
castro-fidel's avatar
castro-fidel committed
299
            export PW_WINE_USE=PROTON_GE
300 301
        fi
    fi
castro-fidel's avatar
castro-fidel committed
302 303 304 305
    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}"
306
    fi
castro-fidel's avatar
castro-fidel committed
307 308 309 310
    [ ! -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}"
311 312 313
    export WINE="${WINEDIR}/bin/wine"
    export WINELOADER="${WINEDIR}/bin/wine"
    export WINESERVER="${WINEDIR}/bin/wineserver"
castro-fidel's avatar
castro-fidel committed
314 315 316 317

    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
318
    fi
319

320
    if [[ -d "${WINEDIR}/files" && ! -d "${WINEDIR}/dist" ]] ; then
321 322 323 324 325
        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"
326 327 328 329 330 331
    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"
332 333 334 335 336 337
    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
338
    if [[ -d "${WINEDIR}" ]] ; then
castro-fidel's avatar
castro-fidel committed
339
        [[ ! -f "${WINEDIR}/version" ]] && echo "${PW_WINE_USE}" > "${WINEDIR}/version"
340

castro-fidel's avatar
castro-fidel committed
341 342 343 344 345
        # if [[ -d "${WINEDIR}/lib32/" ]] ; then
        #     mv -f "${WINEDIR}/lib" "${WINEDIR}/lib64"
        #     mv -f "${WINEDIR}/lib32" "${WINEDIR}/lib"
        # fi

346 347 348 349 350
        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
351

Mikhail Tergoev's avatar
Mikhail Tergoev committed
352 353 354
        try_remove_file "${WINEDIR}/lib/libsteam_api.so"
        try_remove_file "${WINEDIR}/lib64/libsteam_api.so"
        
355
        for mono_gecko_chk in "mono" "gecko" ; do
Mikhail Tergoev's avatar
Mikhail Tergoev committed
356 357 358
            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
359
                try_copy_dir "${WINEDIR}/share/wine/${mono_gecko_chk}" "${PORT_WINE_TMP_PATH}" | sszen
360 361
                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
362 363 364 365 366
                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."
367 368
            fi
        done
castro-fidel's avatar
castro-fidel committed
369

Mikhail Tergoev's avatar
Mikhail Tergoev committed
370
        grep 'Global,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' "${WINEDIR}/share/wine/wine.inf" &> /dev/null
castro-fidel's avatar
castro-fidel committed
371 372 373
        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
374 375
            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
376
        fi
377
    fi
378
    return 0
379 380
}

castro-fidel's avatar
castro-fidel committed
381
pw_init_runtime () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
382

Mikhail Tergoev's avatar
Mikhail Tergoev committed
383
    if [[ -n "$(grep "ROSA Fresh" "/etc/os-release")" ]] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
384
        export LOCPATH="/run/host/usr/share/locale/"
castro-fidel's avatar
castro-fidel committed
385 386
    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
387
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
388

castro-fidel's avatar
castro-fidel committed
389 390
    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
391

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

Mikhail Tergoev's avatar
Mikhail Tergoev committed
394 395 396 397 398
    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
399 400 401 402 403
    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
404 405
        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
406 407
        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
408 409 410 411 412 413 414 415 416 417
        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
418 419
    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
420
        --unshare-home \
castro-fidel's avatar
castro-fidel committed
421 422
        --home="${PW_SANDBOX_HOME_PATH}" \
        ${PW_ADD_TO_ARGS_IN_RUNTIME} --"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
423
    else
castro-fidel's avatar
castro-fidel committed
424
        export pw_runtime="${PW_WINELIB}/pressure-vessel/bin/pressure-vessel-unruntime \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
425
        --share-home \
castro-fidel's avatar
castro-fidel committed
426
        ${PW_ADD_TO_ARGS_IN_RUNTIME} --"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
427
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
428

Mikhail Tergoev's avatar
Mikhail Tergoev committed
429
    export PRESSURE_VESSEL_IMPORT_VULKAN_LAYERS=0
Mikhail Tergoev's avatar
Mikhail Tergoev committed
430
    export PRESSURE_VESSEL_GRAPHICS_PROVIDER="/"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
431 432

    unset PRESSURE_VESSEL_RUNTIME_ARCHIVE
Mikhail Tergoev's avatar
Mikhail Tergoev committed
433 434
    export PRESSURE_VESSEL_COPY_RUNTIME=1
    export PRESSURE_VESSEL_GC_LEGACY_RUNTIMES=1
Mikhail Tergoev's avatar
Mikhail Tergoev committed
435
    export PRESSURE_VESSEL_RUNTIME=runtime
castro-fidel's avatar
castro-fidel committed
436 437 438
    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
439 440

    unset PRESSURE_VESSEL_FILESYSTEMS_RO PRESSURE_VESSEL_FILESYSTEMS_RW
castro-fidel's avatar
castro-fidel committed
441
    for PWRTMRO in ${PW_RT_MOUNT_RO[*]} ; do
Mikhail Tergoev's avatar
Mikhail Tergoev committed
442 443 444 445 446
        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
447
    for PWRTMRW in ${PW_RT_MOUNT_RW[*]} ; do
Mikhail Tergoev's avatar
Mikhail Tergoev committed
448 449 450 451 452 453
        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
454 455
}

castro-fidel's avatar
castro-fidel committed
456 457 458
pw_mangohud_check () {
    if [[ "${PW_MANGOHUD}" == "1" ]] ; then
        export PW_MANGOHUD_SLR='MANGOHUD=1'
Mikhail Tergoev's avatar
Mikhail Tergoev committed
459
        MANGOHUD_LIB_NAME="libMangoHud.so"
castro-fidel's avatar
castro-fidel committed
460
        if [[ "${PW_VULKAN_USE}" = "0" ]] ; then 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
461 462
	        MANGOHUD_LIB_NAME="libMangoHud_dlsym.so:${MANGOHUD_LIB_NAME}"
        fi
castro-fidel's avatar
castro-fidel committed
463 464 465
        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
466
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
467
        var_vk_istance_layers_config_update "VK_LAYER_MANGOHUD_overlay64:VK_LAYER_MANGOHUD_overlay32"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
468 469
        print_info "MANGOHUD is enabled"
    else
castro-fidel's avatar
castro-fidel committed
470
        export PW_MANGOHUD_SLR='DISABLE_MANGOHUD=1'
Mikhail Tergoev's avatar
Mikhail Tergoev committed
471 472 473 474 475
        print_info "MANGOHUD is disabled"
    fi
    return 0
}

castro-fidel's avatar
castro-fidel committed
476 477 478 479
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
480
        fi
castro-fidel's avatar
castro-fidel committed
481 482 483
        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
484
        fi
castro-fidel's avatar
castro-fidel committed
485
        sed -ri "s/casSharpness .*/casSharpness = ${PW_VKBASALT_FFX_CAS}/g" "${PORT_WINE_PATH}/data/vkBasalt.conf"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
486
        export VKBASALT_CONFIG_FILE="${PORT_WINE_PATH}/data/vkBasalt.conf"
castro-fidel's avatar
castro-fidel committed
487
        # sed -i s/'> = 0.05;'/'> = 0.035;'/ "${PW_WINELIB}/pressure-vessel/reshade/shaders/FilmGrain2.fx"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
488
        var_vk_istance_layers_config_update "VK_LAYER_VKBASALT_post_processing32:VK_LAYER_VKBASALT_post_processing64"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
489 490 491 492 493 494 495 496 497
        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
498 499 500 501 502 503 504
    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
}

505
regdlloverrides () {
castro-fidel's avatar
castro-fidel committed
506 507 508 509 510 511 512 513 514
    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="" ;;
515
    esac
castro-fidel's avatar
castro-fidel committed
516
    grep 'HKCU,Software\\Wine\\AppDefaults\\'"${PW_DLL_EXE}"'\\DllOverrides,'\"${PW_DLL_LIB}\",0x2,\"${PW_DLL_IN_REG}\" "${WINEDIR}/share/wine/wine.inf"
517
    if [[ "$?" != "0" ]] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
518 519
        grep "ProtonOverrides" "${WINEDIR}/share/wine/wine.inf"
        if [[ "$?" == "0" ]] ; then
castro-fidel's avatar
castro-fidel committed
520
            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
521
        else
castro-fidel's avatar
castro-fidel committed
522
            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
523
        fi
524 525 526
    fi
}

527 528 529 530
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
531
    return 0
532
}
533
export -f wait_wineserver
534 535

kill_portwine () {
536
    wine_pids="`ls -l /proc/*/exe 2>/dev/null | grep -ie ${portname} | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}'`"
537
    if  [ ! -z "${wine_pids}" ] ; then
castro-fidel's avatar
castro-fidel committed
538 539 540
        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  
541 542 543
            fi
        done
    fi
544 545
    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
546 547 548
        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
549 550
            fi
        done
551
    fi
552
    return 0
553 554 555
}
export -f kill_portwine

castro-fidel's avatar
castro-fidel committed
556
pw_kill_autostart () {
castro-fidel's avatar
castro-fidel committed
557 558 559 560
    if [[ -z "${2}" ]]
    then SWAIT=5
    else SWAIT="${2}"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
561 562 563 564 565
    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
566
            sleep "${SWAIT}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
567
        else
castro-fidel's avatar
castro-fidel committed
568
            sleep "${SWAIT}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
569 570 571 572 573
            kill_portwine 
            break
        fi
    done

castro-fidel's avatar
castro-fidel committed
574 575
    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
576
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
577

578
    return 0
579
}
castro-fidel's avatar
castro-fidel committed
580
export -f pw_kill_autostart
581

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

castro-fidel's avatar
castro-fidel committed
605 606 607
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}`
608 609 610
        do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}"
        done
    fi
castro-fidel's avatar
castro-fidel committed
611 612
    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" ]] ;
613
    then
614
        print_info "Download and install libraries..."
castro-fidel's avatar
castro-fidel committed
615 616 617
        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"
618
            else
castro-fidel's avatar
castro-fidel committed
619 620 621
                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
622 623
            fi
        else
castro-fidel's avatar
castro-fidel committed
624
            zenity_error_download && pw_download_libs
625 626
        fi
    fi
castro-fidel's avatar
castro-fidel committed
627 628 629 630
    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"
631 632
    if [ -x "`which xterm 2>/dev/null`" ]; then
        export SYS_XTERM=`which xterm`
castro-fidel's avatar
castro-fidel committed
633
        export PW_XTERM="${SYS_XTERM} -geometry 159x37 -e"
634
    else
castro-fidel's avatar
castro-fidel committed
635
        export PW_XTERM="${PW_WINELIB}/runtime/files/bin/xterm -geometry 159x37 -e"
636
    fi
637
    return 0
638 639
}

castro-fidel's avatar
castro-fidel committed
640
pw_check_and_download_wine () {
641
    [ ! -d "${PORT_WINE_PATH}/data/dist/" ] && create_new_dir "${PORT_WINE_PATH}/data/dist"
castro-fidel's avatar
castro-fidel committed
642
    if [[ "${PW_WINE_USE}" == "GET-OTHER-WINE" ]] ; then
643 644
        gui_proton_downloader
    fi
castro-fidel's avatar
castro-fidel committed
645 646 647 648 649 650 651 652 653 654 655 656
    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}"
657
            else
castro-fidel's avatar
castro-fidel committed
658 659 660
                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}"
661

castro-fidel's avatar
castro-fidel committed
662
                zenity_error_download && pw_check_and_download_wine
663 664
            fi
        else
castro-fidel's avatar
castro-fidel committed
665
            zenity_error_download && pw_check_and_download_wine
666 667
        fi
    fi
668
    return 0
669 670
}

Mikhail Tergoev's avatar
Mikhail Tergoev committed
671 672 673 674 675
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}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
676 677 678 679 680 681 682 683 684 685
            if try_download "https://github.com/Castro-Fidel/vulkan/releases/download/dxvk-${DXVK_VAR_VER}/dxvk-${DXVK_VAR_VER}.tar.xz" "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.xz" ; then
                if unpack_tar_xz "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.xz" "${PW_VULKAN_DIR}" ; then
                    try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.xz"
                else
                    try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.xz"
                    try_remove_dir dxvk-${DXVK_VAR_VER}

                    zenity_error_download && pw_check_and_download_dxvk_and_vkd3d
                fi
            elif 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
Mikhail Tergoev's avatar
Mikhail Tergoev committed
686 687 688 689 690 691 692 693 694 695 696 697 698 699
                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

Mikhail Tergoev's avatar
Mikhail Tergoev committed
700
    #Download stable and git version VKD3D
Mikhail Tergoev's avatar
Mikhail Tergoev committed
701 702 703
    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}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
704 705 706 707 708 709 710 711 712 713
            if try_download "https://github.com/Castro-Fidel/vulkan/releases/download/vkd3d-proton-${VKD3D_VAR_VER}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz" "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz" ; then
                if unpack_tar_xz "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz" "${PW_VULKAN_DIR}" ; then
                    try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz"
                else
                    try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz"
                    try_remove_dir vkd3d-proton-${VKD3D_VAR_VER}

                    zenity_error_download && pw_check_and_download_dxvk_and_vkd3d
                fi
            elif 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
Mikhail Tergoev's avatar
Mikhail Tergoev committed
714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729
                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
730 731 732
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}`
733 734 735
        do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
        done
    fi
castro-fidel's avatar
castro-fidel committed
736
    if [[ ! -d "${PW_PLUGINS_PATH}/BattlEye_Runtime" || ! -d "${PW_PLUGINS_PATH}/fake_dlss" \
castro-fidel's avatar
castro-fidel committed
737
    || ! -d "${PW_PLUGINS_PATH}/nvapi" || ! -d "${PW_PLUGINS_PATH}/nvml" ]]
738
    then
castro-fidel's avatar
castro-fidel committed
739 740 741 742
        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" 
743
            else
castro-fidel's avatar
castro-fidel committed
744 745
                try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
                try_remove_dir "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
746

castro-fidel's avatar
castro-fidel committed
747
                zenity_error_download && pw_check_and_download_wine
748 749
            fi
        else
castro-fidel's avatar
castro-fidel committed
750
            zenity_error_download && pw_check_and_download_wine
751 752
        fi
    fi
753
    return 0
754 755
}

castro-fidel's avatar
castro-fidel committed
756
pw_init_db () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
757
    if [[ ! -z "${portwine_exe}" ]] ; then
758
        export PORTWINE_DB=`echo "${portwine_exe}" | awk -F '/' 'NF>1{print $NF}' | sed s/".exe"/""/gi`
Mikhail Tergoev's avatar
Mikhail Tergoev committed
759
        if [[ -f "${portwine_exe}".ppdb ]] && [[ "${PORTWINE_DB}" != "RiotClientServices" ]] ; then
760
            export PORTWINE_DB_FILE="${portwine_exe}".ppdb
castro-fidel's avatar
castro-fidel committed
761
            sed -i 's/ PP_/ PW_/g' "${PORTWINE_DB_FILE}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
762
            . "${PORTWINE_DB_FILE}"
castro-fidel's avatar
castro-fidel committed
763 764 765
            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
766
            fi
767 768 769
        else
            orig_IFS="$IFS"
            IFS=$'\n'
castro-fidel's avatar
castro-fidel committed
770 771
            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
772
                unset ADD_CB_DBFILE
castro-fidel's avatar
castro-fidel committed
773
                for PW_CHECK_DB_FILE in $PW_FIND_DB_FILE ; do
774
                    if [[ -z "${ADD_CB_DBFILE}" ]] ; then
castro-fidel's avatar
castro-fidel committed
775
                        export ADD_CB_DBFILE="${PW_CHECK_DB_FILE}"
776
                    else
castro-fidel's avatar
castro-fidel committed
777
                        export ADD_CB_DBFILE="${PW_CHECK_DB_FILE}!${ADD_CB_DBFILE}"
778 779
                    fi
                done
castro-fidel's avatar
castro-fidel committed
780 781
                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="" \
782 783
                --field="DB FILE: :CB" "${ADD_CB_DBFILE}"`
                if [[ "$?" == "1" || "$?" == "252" ]] ; then exit 0 ; fi
castro-fidel's avatar
castro-fidel committed
784 785 786 787
                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}"
788 789
            fi
            IFS="$orig_IFS"
castro-fidel's avatar
castro-fidel committed
790 791
            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
792
                export PORTWINE_DB_FILE="${portwine_exe}".ppdb
Mikhail Tergoev's avatar
Mikhail Tergoev committed
793 794 795 796
            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
797 798
                export PW_PREFIX_NAME=`echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}'`
                edit_db_from_gui PW_PREFIX_NAME
799
            fi
800
        fi
801 802
        if [ ! -z "${PORTWINE_DB_FILE}" ]; then
            . "${PORTWINE_DB_FILE}"
803
            init_wine_ver &&
804
            print_info "Use ${PORTWINE_DB_FILE} db file."
805
        fi
806 807 808
        if [ -z "$PATH_TO_GAME" ] ; then
            export PATH_TO_GAME="$( cd "$( dirname "${portwine_exe}" )" >/dev/null 2>&1 && pwd )"
        fi
809
    fi
810
    return 0
811 812
}

castro-fidel's avatar
castro-fidel committed
813
pw_port_update () {
814
    ###SCRIPTS UPDATE###
815
    if [ ! -f "${PORT_WINE_TMP_PATH}/scripts_ver" ] ; then
816
        echo "2022" > "${PORT_WINE_TMP_PATH}/scripts_ver"
817 818
    fi
    export scripts_install_ver=`cat "${PORT_WINE_TMP_PATH}/scripts_ver" | head -n 1`
819
    curl -s --list-only https://raw.githubusercontent.com/Castro-Fidel/PortWINE/master/data_from_portwine/scripts/var > "${PORT_WINE_TMP_PATH}/curent_var_ver"
820 821 822 823 824 825 826
    [[ ! -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
827 828 829
            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
830
                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
831
                xcsd=`"${pw_yad_new}" --title "${scripts_upd2} v.${scripts_current_ver}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
832 833 834 835 836 837 838
                --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
839
                xcsd=`zenity --title  "${scripts_upd1}" --text "${scripts_upd2}" --list --radiolist --height=240 --column="${inst_set}" --column "${scripts_upd3}" \
840 841 842
                TRUE "${scripts_upd4}" \
                FALSE "${scripts_upd5}" \
                FALSE "${scripts_upd6}"`
843 844 845 846 847 848
            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
849
                    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
850 851 852 853 854 855
                        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
856 857 858 859
                            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
860
                            if [[ -z "${pw_yad_new}" ]] ; then
861
                                zenity --title="Changelog" --text-info --width=1200 --height=550 \
castro-fidel's avatar
castro-fidel committed
862 863 864
                                --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}"
                            fi 
                            [ "$?" == 0 ] && echo "Restarting PP after update..." && /usr/bin/env bash -c ${pw_full_command_line[*]} &
865 866 867
                            exit 0
                        fi
                    else
castro-fidel's avatar
castro-fidel committed
868
                        zenity_error_download && pw_scripts_update
869 870 871 872
                    fi ;;
                "${scripts_upd5}")
                    echo " " ;;
                "${scripts_upd6}")
Mikhail Tergoev's avatar
Mikhail Tergoev committed
873
                    echo "0" > "${PORT_WINE_TMP_PATH}/scripts_update_notifier" ;;
874
            esac
875 876
        fi
    fi
877
    try_remove_file "${PORT_WINE_TMP_PATH}/curent_var_ver"
878
    return 0
879 880
}

881 882

update_winetricks () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
883
    W_TRX_URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
884 885 886 887 888 889 890 891 892 893
    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
894
    fi
895 896 897 898 899 900 901
    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"

902
    fi
903
    return 0
904 905 906
}

edit_db_from_gui () {
907
    echo "edit_db_from_gui PORTWINE_DB_FILE=$PORTWINE_DB_FILE"
908
    for mod_db in $@ ; do
909 910
        echo "${mod_db}=${!mod_db}"
        if [ -z "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}="`" ] ; then
911
            echo "export ${mod_db}=\"${!mod_db}\"" >> "${PORTWINE_DB_FILE}"
912
        elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}=" | grep -v "#"`" ] ; then
913 914
            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}"
915 916
            fi
        elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}="`" != "export ${mod_db}=${!mod_db}" ] ; then
917
            sed -ri "s/.*export ${mod_db}=.*/export ${mod_db}=\"${!mod_db}\"/g" "${PORTWINE_DB_FILE}"
918
        fi
919
    done
920
    return 0
921
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
922

castro-fidel's avatar
castro-fidel committed
923
pw_create_gui_png () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
924 925 926 927 928
    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
929
    PW_RESIZE_TO=128
Mikhail Tergoev's avatar
Mikhail Tergoev committed
930
    try_remove_file "${PORT_WINE_PATH}/data/img/setup.png"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
931 932 933 934
    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
935
        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
936 937
        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
938 939 940
            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
941
            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
942
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
943 944
        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
945
    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
946
       [[ -x "`which "convert" 2>/dev/null`" ]] && [[ -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then
castro-fidel's avatar
castro-fidel committed
947
        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
948
    fi
castro-fidel's avatar
castro-fidel committed
949 950 951
    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" 
952
        else
castro-fidel's avatar
castro-fidel committed
953
            export PW_ICON_FOR_YAD="${PW_GUI_ICON_PATH}/port_proton.png"
954
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
955 956
    fi
}