From 0449899d6f476e8e03c9d7fc7061ef24f705b787 Mon Sep 17 00:00:00 2001
From: castro-fidel <tergoevm@gmail.com>
Date: Tue, 5 Oct 2021 13:16:27 +0300
Subject: [PATCH] ###Scripts version 2015###

---
 data_from_portwine/changelog                  |  9 ++++++-
 data_from_portwine/scripts/functions_helper   | 26 ++++++++++++++++++-
 .../scripts/portwine_db/default               |  2 +-
 .../scripts/portwine_db/witcher3              |  2 +-
 data_from_portwine/scripts/runlib             | 25 ++++++++----------
 data_from_portwine/scripts/start.sh           |  2 +-
 data_from_portwine/scripts/var                |  6 ++---
 7 files changed, 50 insertions(+), 22 deletions(-)

diff --git a/data_from_portwine/changelog b/data_from_portwine/changelog
index a1be14f0..0e6bf485 100755
--- a/data_from_portwine/changelog
+++ b/data_from_portwine/changelog
@@ -1,10 +1,17 @@
 История изменений и дальнейшие планы:
 -----------------------------------------
-В планах:
+В планах: 
 * добавить проверку количества db файлов на один exe
+* добавить GUI для выбора версии WINE из интернета 
 * добавить комментарии описывающие функционал скриптов и db файлов
 * заниматься только развитием проекта за счет вашей подписки на https://boosty.to/portwine-linux.ru
 -----------------------------------------
+###Scripts version 2015###
+* расширty функционал проверки существования mono и gecko
+* добавлена новая функция check_symlink
+* временно возвращено использование libs_v17
+* в EDIT_DB добавлена возможность отключения winegstreamer 
+
 ###Scripts version 2014###
 * обновлен WINE PROTON_STEAM до версии 6.3-7 совместно с DXVK и VKD3D
 * реализован запуск League Of Legends (необходимо запускать с версией wine: https://github.com/Castro-Fidel/wine_builds/releases/download/WINE_LOL_GE_6.16-2/WINE_LOL_GE_6.16-2.tar.xz )
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index a6ae7c0c..ca7da297 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -66,6 +66,20 @@ try_force_link_file () {
     return 1
 }
 
+check_symlink () {
+    if [ ! -z `file "$1" | grep "symbolic link to" | grep -v "broken"` ] ; then
+        `file "$1"`
+        return 0
+    elif [ ! -z `file "$1" | grep "broken symbolic link to"` ] ; then
+        `file "$1"`
+        print_info "remove broken symlink: $1"
+        rm -fr "$1"
+        return 1
+    else
+        return 1
+    fi
+}
+
 try_force_link_dir () {
     if [ ! -d "$1" ] ; then	print_info "directory $1 not found for link"
     elif [ -z "$2" ] ; then	print_error "no way to link directory $1"
@@ -216,7 +230,6 @@ init_wine_ver () {
     [ ! -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}"
-    export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib64/gstreamer-1.0:${WINEDIR}/lib/gstreamer-1.0"
     export WINE="${WINEDIR}/bin/wine"
     export WINELOADER="${WINEDIR}/bin/wine"
     export WINESERVER="${WINEDIR}/bin/wineserver"
@@ -259,6 +272,17 @@ init_wine_ver () {
             try_copy_dir "${PORT_WINE_PATH}/data/dist/PROTON_STEAM/lib64/wine/${copy_proton_dll}" "${WINEDIR}/lib64/wine/"
         fi
     done
+    
+    for mono_gecko_chk in "mono" "gecko" ; do
+        if [ ! -d "${WINEDIR}/share/wine/${mono_gecko_chk}" ] ; then
+            try_remove_dir "${WINEDIR}/share/wine/${mono_gecko_chk}"
+            try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine/
+        elif [ -d "${WINEDIR}/share/wine/${mono_gecko_chk}" ] && [ ! `check_symlink "${WINEDIR}/share/wine/${mono_gecko_chk}"` ] ; then  
+            cp -fr "${WINEDIR}/share/wine/${mono_gecko_chk}" "${PORT_WINE_TMP_PATH}"
+            rm -fr "${WINEDIR}/share/wine/${mono_gecko_chk}"
+            try_force_link_dir "${PORT_WINE_TMP_PATH}/${mono_gecko_chk}" "${WINEDIR}"/share/wine/
+        fi
+    done
 }
 
 cabextract_fix () {
diff --git a/data_from_portwine/scripts/portwine_db/default b/data_from_portwine/scripts/portwine_db/default
index e20e42df..5fd6d8b7 100755
--- a/data_from_portwine/scripts/portwine_db/default
+++ b/data_from_portwine/scripts/portwine_db/default
@@ -27,7 +27,7 @@
 
 ##export PW_NO_FSYNC=1                            # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support.
 ##export PW_NO_ESYNC=0                            # Do not use eventfd-based in-process synchronization primitives
-
+##export PW_USE_GSTREAMER=1                       # 0 - disabled use winegstreamer 
 ##export PULSE_LATENCY_MSEC=60                    # Fix crackling audio in games
 
 ##export PW_NO_WRITE_WATCH=1                      # Disable support for memory write watches in ntdll. This is a very dangerous hack and should only be applied if you have verified that the game can operate without write watches. This improves performance for some very specific games (e.g. CoreRT-based games).
diff --git a/data_from_portwine/scripts/portwine_db/witcher3 b/data_from_portwine/scripts/portwine_db/witcher3
index 19e84301..de0e61e3 100755
--- a/data_from_portwine/scripts/portwine_db/witcher3
+++ b/data_from_portwine/scripts/portwine_db/witcher3
@@ -19,7 +19,7 @@ export PW_HIDE_NVIDIA_GPU=0
 export PW_FORCE_USE_VSYNC=0
 export PW_VIRTUAL_DESKTOP=0
 ##export VKD3D_CONFIG=force_bindless_texel_buffer,multi_queue
-export ENABLE_VKBASALT=1
+##export ENABLE_VKBASALT=1
 export PW_VKBASALT_FFX_CAS="0.5"
 export PW_NO_FSYNC=0
 export PW_NO_ESYNC=1
diff --git a/data_from_portwine/scripts/runlib b/data_from_portwine/scripts/runlib
index 3b7f961f..bc775f4e 100755
--- a/data_from_portwine/scripts/runlib
+++ b/data_from_portwine/scripts/runlib
@@ -33,20 +33,19 @@ start_portwine () {
 
     pw_start_progress_bar_cs "Start ${portname}... Please wait..."
 
-    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
+    if [ "${PW_USE_GSTREAMER}" = 1 ] ; then 
+        export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib64/gstreamer-1.0:${WINEDIR}/lib/gstreamer-1.0"
+        export GST_DEBUG="WARNING:0"
+        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
     export STAGING_SHARED_MEMORY=1
     export PW_FORCE_LARGE_ADDRESS_AWARE=1
-    export WINEDLLPATH="${WINEDIR}/lib64/wine:${WINEDIR}/lib/wine"
-
-    create_new_dir "${WINEDIR}/share/wine/"
-    try_remove_dir "${WINEDIR}"/share/wine/gecko
-    try_remove_dir "${WINEDIR}"/share/wine/mono
-    try_force_link_dir "${PORT_WINE_TMP_PATH}/gecko" "${WINEDIR}"/share/wine/
-    try_force_link_dir "${PORT_WINE_TMP_PATH}/mono" "${WINEDIR}"/share/wine/
 
     if [ "${PW_USE_RUNTIME}" = 0 ] ; then
         export pw_runtime=""
@@ -103,7 +102,6 @@ start_portwine () {
         export VKD3D_DEBUG="none"
         export DXVK_LOG_PATH="none"
     fi
-    export GST_DEBUG="WARNING:0"
 
     #default wine-mono override for FNA games
     export WINE_MONO_OVERRIDES="Microsoft.Xna.Framework.*,Gac=n"
@@ -466,7 +464,6 @@ fi
 . "${PORT_SCRIPTS_PATH}"/lang
 
 export urlg="https://portwine-linux.ru/portwine-faq/"
-export PW_FTP_URL="https://portwine-linux.ru/ftp"
 export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
 export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
 export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1`
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 0483c5a0..1fbffc04 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -204,7 +204,7 @@ pw_winetricks () {
 pw_edit_db () {
     pw_gui_for_edit_db ENABLE_VKBASALT PW_NO_ESYNC PW_NO_FSYNC PW_DXR_ON PW_VULKAN_NO_ASYNC PW_USE_NVAPI \
     PW_OLD_GL_STRING PW_HIDE_NVIDIA_GPU PW_FORCE_USE_VSYNC PW_VIRTUAL_DESKTOP PW_WINEDBG_DISABLE PW_USE_TERMINAL \
-    PW_WINE_ALLOW_XIM PW_HEAP_DELAY_FREE PW_NO_WRITE_WATCH PW_GUI_DISABLED_CS 
+    PW_WINE_ALLOW_XIM PW_HEAP_DELAY_FREE PW_NO_WRITE_WATCH PW_GUI_DISABLED_CS PW_USE_GSTREAMER 
     if [ "$?" == 0 ] ; then
         /bin/bash -c ${pw_full_command_line[*]} &
         exit 0
diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var
index df218872..23a432a8 100755
--- a/data_from_portwine/scripts/var
+++ b/data_from_portwine/scripts/var
@@ -1,6 +1,6 @@
 #!/bin/bash
 #Author: Castro-Fidel (PortWINE-Linux.ru)
-#SCRIPTS_NEXT_VERSION=2014
+#SCRIPTS_NEXT_VERSION=2015
 #PORT_NEXT_VERSION=97
 ########################################################################
 export PW_MANGOHUD=1
@@ -25,10 +25,10 @@ export PW_MUST_HAVE_DLL="d3dx9_43 physx mfc42 vcrun2019 d3dcompiler_42 d3dcompil
 export PW_WINEDBG_DISABLE=1
 export PW_WINDOWS_VER="10"
 export WINEARCH="win64"
-export PW_LIBS_VER="_v18"
+export PW_LIBS_VER="_v17"
 export PORTWINE_URL="http://portwine-linux.ru/"
 export GDK_BACKEND="x11"
-
+export PW_USE_GSTREAMER="1"
 export PW_PROTON_STEAM_VER="PROTON_STEAM_6.3-7"
 export PW_PROTON_GE_VER="PROTON_GE_6.16-1"
 export PW_MONO_VER="6.3.0"