From 7415dcbc016e0a0dd90b581b1249672566bf2768 Mon Sep 17 00:00:00 2001
From: castro-fidel <tergoevm@gmail.com>
Date: Wed, 25 Aug 2021 23:33:45 +0300
Subject: [PATCH] ###Scripts version 2001###

---
 data_from_portwine/changelog                |  5 +-
 data_from_portwine/scripts/functions_helper | 55 ++++++++++++++++++---
 data_from_portwine/scripts/start.sh         | 15 ++++--
 data_from_portwine/scripts/var              |  2 +-
 4 files changed, 63 insertions(+), 14 deletions(-)

diff --git a/data_from_portwine/changelog b/data_from_portwine/changelog
index 39860ffa..7fd648ac 100644
--- a/data_from_portwine/changelog
+++ b/data_from_portwine/changelog
@@ -9,6 +9,9 @@
 * добавить комментарии описывающие функционал скриптов
 * заниматься только развитием проекта за счет вашей подписки на https://boosty.to/portwine-linux.ru
 -----------------------------------------
+###Scripts version 2001###
+* добавлен графический интерфейс для настройки db файлов
+
 ###PortProton-94### 25.08.2021 ###Scripts version 2000###
 * добавлено автоматическое скачивание и обновление Proton GE 
 * db файлы создаются автоматически при запуске любого *.exe 
@@ -20,7 +23,7 @@ export PW_VKBASALT_FFX_CAS="0.7" - изменение резкости в игр
 PS: не забывает для активации добавить переменную: export ENABLE_VKBASALT=1 в db файл, или для глобального включения в user.conf
 * добавлены условия для правильного определения переменных LD_LIBRARY_PATH и LD_PRELOAD при автоматическом перезапуске скриптов
 * запуск нескольких приложений можно запустить только через один и тот же протон 
-* добавлена автоматическая очиста каталога Temp в преыиксе порта
+* добавлена автоматическая очиста каталога Temp в префиксе порта
 * создан новый скрипт functions_helper, в который перенесены все вспомогательные функции из runlib
 * создана новая ветка обновлений скриптов v.2XXX
 * упрощена структура скрипта runlib
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 0653ee2f..fbe16255 100644
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -588,15 +588,54 @@ pw_kill_autostart () {
 }
 
 edit_db_from_gui () {
-    if [ -z "`cat "${PORTWINE_DB_FILE}" | grep "export ${1}="`" ] ; then
-        echo "export ${1}=${!1}" >> "${PORTWINE_DB_FILE}"
-    elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${1}=" | grep -v "#"`" ] ; then
-        if [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${1}=" | grep -v "#"`" != "export ${1}=${!1}" ] ; then
-            sed -ri "s/^export ${1}=.*/export ${1}=${!1}/" "${PORTWINE_DB_FILE}"
+    for mod_db in $@ ; do 
+        echo "${mod_db}=${!mod_db}"
+        if [ -z "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}="`" ] ; then
+            echo "export ${mod_db}=${!mod_db}" >> "${PORTWINE_DB_FILE}"
+        elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}=" | grep -v "#"`" ] ; then
+            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}"
+            fi
+        elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${mod_db}="`" != "export ${mod_db}=${!mod_db}" ] ; then
+            sed -ri "s/.*export ${mod_db}=.*/export ${mod_db}=${!mod_db}/g" "${PORTWINE_DB_FILE}"
         fi
-    elif [ "`cat "${PORTWINE_DB_FILE}" | grep "export ${1}="`" != "export ${1}=${!1}" ] ; then
-        sed -ri "s/.*export ${1}=.*/export ${1}=${!1}/g" "${PORTWINE_DB_FILE}"
-    fi
+    done
+}
+
+pw_gui_for_edit_db () {
+    unset ADD_CHK_BOX_EDIT_DB
+    edit_db_field_add () {
+        for int_to_boole in $@ ; do
+            if [ "${!int_to_boole}" == "1" ] ; then
+                export ${int_to_boole}="TRUE"
+            else
+                export ${int_to_boole}="FALSE"
+            fi
+            ADD_CHK_BOX_EDIT_DB="${ADD_CHK_BOX_EDIT_DB} --field="${int_to_boole}:CHK" "${!int_to_boole}""
+        done
+    }
+    edit_db_field_add $@
+    output_yad_edit_db=`"${pw_yad}" --title "EDIT_DB" --text-align=center --text "Change settings in database file for ${PORTWINE_DB}\n" \
+    --columns=4 --form --separator=" " --borders=10 --center  ${ADD_CHK_BOX_EDIT_DB} `
+    YAD_STATUS="$?"
+    [ "$YAD_STATUS" == "1" ] && exit 0 
+    [ "$YAD_STATUS" == "252" ] && xdg-open "${PORTWINE_DB_FILE}" & exit 0
+    export output_yad_edit_db=($output_yad_edit_db)
+    export bool_from_yad=0
+    edit_db_field_read () {
+        for boole_to_int in $@ ; do
+            export ${boole_to_int}=${output_yad_edit_db[$bool_from_yad]}
+            if [ "${!boole_to_int}" == "TRUE" ] ; then
+                export ${boole_to_int}="1"
+            else
+                export ${boole_to_int}="0"
+            fi
+            export bool_from_yad=$(( ${bool_from_yad} + 1 ))
+        done
+    }
+    edit_db_field_read $@
+    edit_db_from_gui $@
+    return 0
 }
 
 pw_check_and_download_wine () {
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 6870bed8..be6c56ac 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -201,7 +201,11 @@ pw_winetricks () {
 }
 
 pw_edit_db () {
-    xdg-open "${PORTWINE_DB_FILE}"
+    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
+    [ "$?" == 0 ] && /bin/bash -c ${pw_full_command_line[*]} & 
+    exit 0
 }
 
 pw_autoinstall_from_db () {
@@ -249,7 +253,8 @@ if [ ! -z "${portwine_exe}" ]; then
         --button='CREATE SHORTCUT'!!"${loc_creat_shortcut}":100 \
         --button='DEBUG'!!"${loc_debug}":102 \
         --button='LAUNCH'!!"${loc_launch}":106 )
-        PW_YAD_SET="$?"
+        export PW_YAD_SET="$?" 
+        if [ "$PW_YAD_SET" == "1" ] || [ "$PW_YAD_SET" == "252" ] ; then exit 0 ; fi
         export VULKAN_MOD=`echo "${OUTPUT_START}" | grep \;\; | awk -F";" '{print $1}' | awk '{print $1}'`
         export PW_WINE_VER=`echo "${OUTPUT_START}" | grep \;\; | awk -F";" '{print $2}' | awk '{print $1}'`
     elif [ ! -z "${PORTWINE_DB_FILE}" ]; then
@@ -335,6 +340,8 @@ else
     "${pw_yad}" --key=$KEY --notebook --borders=10 --width=1000 --height=168 --no-buttons --text-align=center \
     --window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "$portname" --separator=";" \
     --tab-pos=right --tab="PORT_PROTON" --tab="AUTOINSTALL" --tab="    SETTINGS" --center
+    YAD_STATUS="$?"
+    if [ "$YAD_STATUS" == "1" ] || [ "$YAD_STATUS" == "252" ] ; then exit 0 ; fi
 
     if [ -f "${PORT_WINE_TMP_PATH}/tmp_yad_form" ] ; then
         export PW_YAD_SET=`cat "${PORT_WINE_TMP_PATH}/tmp_yad_form" | head -n 1 | awk '{print $1}'`
@@ -355,6 +362,7 @@ if [ ! -z "${VULKAN_MOD}" ] ; then
 fi
 
 init_wine_ver 
+
 if [ -z "${PW_DISABLED_CREAT_DB}" ] ; then 
     if [ ! -z "${PORTWINE_DB}" ] ; then
         PORTWINE_DB_FILE=`grep -il "\#${PORTWINE_DB}.exe" "${PORT_SCRIPTS_PATH}/portwine_db"/*`
@@ -367,8 +375,7 @@ if [ -z "${PW_DISABLED_CREAT_DB}" ] ; then
             export PORTWINE_DB_FILE="${PORT_SCRIPTS_PATH}/portwine_db/${PORTWINE_DB}"
         fi
 
-        edit_db_from_gui PW_VULKAN_USE
-        edit_db_from_gui PW_WINE_USE
+        edit_db_from_gui PW_VULKAN_USE PW_WINE_USE
 
         PW_DB_TMP=`cat "${PORTWINE_DB_FILE}"` 
         echo "${PW_DB_TMP}" | awk '! a[$0]++' > "${PORTWINE_DB_FILE}"
diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var
index 69aaab1d..4128754c 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=2000
+#SCRIPTS_NEXT_VERSION=2001
 ########################################################################
 export PW_MANGOHUD=1
 export MANGOHUD_CONFIG=font_size=24,position=top-left,toggle_hud=Shift_R+F12,no_display,resolution,wine,gpu_name,vulkan_driver,gpu_stats,vkbasalt