From 28e69c77f2cf051a1f91d5c3c4bf659175c2f53e Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Fri, 4 Oct 2024 13:38:45 +0500
Subject: [PATCH 01/28] To sort need to use AI_TOP_GAMES

---
 .../{PW_004_BATTLE_NET => PW_BATTLE_NET}      |  0
 .../pw_autoinstall/{PW_003_EPIC => PW_EPIC}   |  0
 .../pw_autoinstall/{PW_001_LGC => PW_LGC}     |  0
 .../scripts/pw_autoinstall/PW_RETROARCH       |  2 +-
 .../{PW_002_VKPLAY => PW_VKPLAY}              |  0
 data_from_portwine/scripts/start.sh           | 53 ++++++++++++-------
 6 files changed, 36 insertions(+), 19 deletions(-)
 rename data_from_portwine/scripts/pw_autoinstall/{PW_004_BATTLE_NET => PW_BATTLE_NET} (100%)
 rename data_from_portwine/scripts/pw_autoinstall/{PW_003_EPIC => PW_EPIC} (100%)
 rename data_from_portwine/scripts/pw_autoinstall/{PW_001_LGC => PW_LGC} (100%)
 rename data_from_portwine/scripts/pw_autoinstall/{PW_002_VKPLAY => PW_VKPLAY} (100%)

diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_004_BATTLE_NET b/data_from_portwine/scripts/pw_autoinstall/PW_BATTLE_NET
similarity index 100%
rename from data_from_portwine/scripts/pw_autoinstall/PW_004_BATTLE_NET
rename to data_from_portwine/scripts/pw_autoinstall/PW_BATTLE_NET
diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_003_EPIC b/data_from_portwine/scripts/pw_autoinstall/PW_EPIC
similarity index 100%
rename from data_from_portwine/scripts/pw_autoinstall/PW_003_EPIC
rename to data_from_portwine/scripts/pw_autoinstall/PW_EPIC
diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_001_LGC b/data_from_portwine/scripts/pw_autoinstall/PW_LGC
similarity index 100%
rename from data_from_portwine/scripts/pw_autoinstall/PW_001_LGC
rename to data_from_portwine/scripts/pw_autoinstall/PW_LGC
diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_RETROARCH b/data_from_portwine/scripts/pw_autoinstall/PW_RETROARCH
index 6d7bea28..cbac43a0 100755
--- a/data_from_portwine/scripts/pw_autoinstall/PW_RETROARCH
+++ b/data_from_portwine/scripts/pw_autoinstall/PW_RETROARCH
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 # Author: chal55rus (Sergey P.)
-# type: games
+# type: emulators
 # name: RetroArch
 # image: retroarch
 # info_en:
diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_002_VKPLAY b/data_from_portwine/scripts/pw_autoinstall/PW_VKPLAY
similarity index 100%
rename from data_from_portwine/scripts/pw_autoinstall/PW_002_VKPLAY
rename to data_from_portwine/scripts/pw_autoinstall/PW_VKPLAY
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 4a067ed1..1b799108 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -697,39 +697,56 @@ else
     --field="   ${translations[Command line]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine cmd]}":"FBTN" '@bash -c "button_click --normal WINECMD"' \
     --field="   ${translations[Regedit]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine regedit]}":"FBTN" '@bash -c "button_click --normal WINEREG"' 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null &
 
-    AI_AMOUNT_GAMES="0"
-    AI_AMOUNT_EMULS="0"
+    AI_AMOUNT_GAMES="0" && AI_AMOUNT_EMULS="0" && AI_AMOUNT_ARRAY="0"
+    AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET"
     for ai_file in "$PORT_SCRIPTS_PATH"/pw_autoinstall/* ; do
-        AI_FILE="${ai_file//"$PORT_SCRIPTS_PATH/pw_autoinstall/"/}"
         while IFS= read -r line ; do
             [[ $line =~ "##########" ]] && break
-            [[ $line =~ "# type: " ]] && AI_TYPE="${line//# type: /}"
-            [[ $line =~ "# name: " ]] && AI_NAME="${line//# name: /}"
-            [[ $line =~ "# image: " ]] && AI_IMAGE="${line//# image: /}"
+            [[ $line =~ "# type: " ]] && AI_TYPE["$AI_AMOUNT_ARRAY"]="${line//# type: /}"
+            [[ $line =~ "# name: " ]] && AI_NAME["$AI_AMOUNT_ARRAY"]="${line//# name: /}"
+            [[ $line =~ "# image: " ]] && AI_IMAGE["$AI_AMOUNT_ARRAY"]="${line//# image: /}"
             if [[ "$LANGUAGE" == ru ]] ; then
-                [[ $line =~ "# info_ru: " ]] && AI_INFO="${line//# info_ru: /}"
+                [[ $line =~ "# info_ru: " ]] && AI_INFO["$AI_AMOUNT_ARRAY"]="${line//# info_ru: /}"
             else
-                [[ $line =~ "# info_en: " ]] && AI_INFO="${line//# info_en: /}"
+                [[ $line =~ "# info_en: " ]] && AI_INFO["$AI_AMOUNT_ARRAY"]="${line//# info_en: /}"
             fi
         done < "$ai_file"
+        AI_FILE="${ai_file//"$PORT_SCRIPTS_PATH/pw_autoinstall/"/}"
+        AI_FILE_CHECK="$AI_FILE=$AI_AMOUNT_ARRAY"
+        AI_FILE_ARRAY+=($AI_FILE)
+        if [[ $AI_TOP_GAMES =~ ${AI_FILE_CHECK//=*/} ]] ; then
+            AI_TRUE_FILE+=($AI_FILE_CHECK)
+        else
+            AI_FILE_UNSORTED+=($AI_AMOUNT_ARRAY)
+        fi
+        (( AI_AMOUNT_ARRAY++ ))
+    done
 
-        IFS=$'\n'
-        [[ -z "$AI_NAME" ]] && yad_error "Line: \"name\" not found in file $AI_FILE."
-        case $AI_TYPE in
-            games) 
-                PW_GENERATE_BUTTONS_GAMES+="--field=   $AI_NAME!$PW_GUI_ICON_PATH/$AI_IMAGE.png!$AI_INFO:FBTNR%@bash -c \"button_click --normal $AI_FILE\"%"
+    unset AI_FILE_SORTED
+    for ai_sort in $AI_TOP_GAMES ; do
+        if [[ ${AI_TRUE_FILE[*]} =~ $ai_sort ]] ; then
+            AI_TRUE_FILE_NEW=(${AI_TRUE_FILE[@]//$ai_sort=/})
+            AI_FILE_SORTED+=(${AI_TRUE_FILE_NEW[@]//*=*/})
+        fi
+    done
+
+    IFS=$'\n'
+    for ai in "${AI_FILE_SORTED[@]}" "${AI_FILE_UNSORTED[@]}" ; do
+        case ${AI_TYPE[$ai]} in
+            games)
+                PW_GENERATE_BUTTONS_GAMES+="--field=   ${AI_NAME[$ai]}!$PW_GUI_ICON_PATH/${AI_IMAGE[$ai]}.png!${AI_INFO[$ai]}:FBTNR%@bash -c \"button_click --normal ${AI_FILE_ARRAY[$ai]}\"%"
                 (( AI_AMOUNT_GAMES++ ))
                 ;;
-            emulators) 
-                PW_GENERATE_BUTTONS_EMULS+="--field=   $AI_NAME!$PW_GUI_ICON_PATH/$AI_IMAGE.png!$AI_INFO:FBTNR%@bash -c \"button_click --normal $AI_FILE\"%"
+            emulators)
+                PW_GENERATE_BUTTONS_EMULS+="--field=   ${AI_NAME[$ai]}!$PW_GUI_ICON_PATH/${AI_IMAGE[$ai]}.png!${AI_INFO[$ai]}:FBTNR%@bash -c \"button_click --normal ${AI_FILE_ARRAY[$ai]}\"%"
                 (( AI_AMOUNT_EMULS++ ))
                 ;;
-            *)
-                yad_error "Line: \"type\" not found in file $AI_FILE or misspelled."
+                *)
+                yad_error "Line: \"type\" not found in file ${AI_FILE_ARRAY[$ai]} or misspelled."
                 ;;
         esac
-        [[ -z $PW_DEBUG ]] && unset AI_FILE AI_TYPE AI_NAME AI_IMAGE AI_INFO
     done
+    unset AI_FILE_ARRAY AI_TYPE AI_NAME AI_IMAGE AI_INFO
     MAIN_GUI_ROWS_GAMES="$(( AI_AMOUNT_GAMES / MAIN_GUI_COLUMNS + 1 ))"
     MAIN_GUI_ROWS_EMULS="$(( AI_AMOUNT_EMULS / MAIN_GUI_COLUMNS + 1 ))"
 

From 6bb1c63e6f2d95ce8de6ae341fa4386cc1819dbb Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Fri, 4 Oct 2024 15:05:25 +0500
Subject: [PATCH 02/28] added AI_SKIP

---
 data_from_portwine/scripts/start.sh | 97 +++++++++++++++--------------
 1 file changed, 49 insertions(+), 48 deletions(-)

diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 1b799108..96d288f0 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -697,65 +697,66 @@ else
     --field="   ${translations[Command line]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine cmd]}":"FBTN" '@bash -c "button_click --normal WINECMD"' \
     --field="   ${translations[Regedit]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine regedit]}":"FBTN" '@bash -c "button_click --normal WINEREG"' 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null &
 
-    AI_AMOUNT_GAMES="0" && AI_AMOUNT_EMULS="0" && AI_AMOUNT_ARRAY="0"
-    AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET"
-    for ai_file in "$PORT_SCRIPTS_PATH"/pw_autoinstall/* ; do
-        while IFS= read -r line ; do
-            [[ $line =~ "##########" ]] && break
-            [[ $line =~ "# type: " ]] && AI_TYPE["$AI_AMOUNT_ARRAY"]="${line//# type: /}"
-            [[ $line =~ "# name: " ]] && AI_NAME["$AI_AMOUNT_ARRAY"]="${line//# name: /}"
-            [[ $line =~ "# image: " ]] && AI_IMAGE["$AI_AMOUNT_ARRAY"]="${line//# image: /}"
-            if [[ "$LANGUAGE" == ru ]] ; then
-                [[ $line =~ "# info_ru: " ]] && AI_INFO["$AI_AMOUNT_ARRAY"]="${line//# info_ru: /}"
+    if [[ $AI_SKIP != 1 ]] ; then
+        AI_AMOUNT_GAMES="0" && AI_AMOUNT_EMULS="0" && AI_AMOUNT_ARRAY="0"
+        AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET"
+        for ai_file in "$PORT_SCRIPTS_PATH"/pw_autoinstall/* ; do
+            while IFS= read -r line ; do
+                [[ $line =~ "##########" ]] && break
+                [[ $line =~ "# type: " ]] && AI_TYPE["$AI_AMOUNT_ARRAY"]="${line//# type: /}"
+                [[ $line =~ "# name: " ]] && AI_NAME["$AI_AMOUNT_ARRAY"]="${line//# name: /}"
+                [[ $line =~ "# image: " ]] && AI_IMAGE["$AI_AMOUNT_ARRAY"]="${line//# image: /}"
+                if [[ "$LANGUAGE" == ru ]] ; then
+                    [[ $line =~ "# info_ru: " ]] && AI_INFO["$AI_AMOUNT_ARRAY"]="${line//# info_ru: /}"
+                else
+                    [[ $line =~ "# info_en: " ]] && AI_INFO["$AI_AMOUNT_ARRAY"]="${line//# info_en: /}"
+                fi
+            done < "$ai_file"
+            AI_FILE="${ai_file//"$PORT_SCRIPTS_PATH/pw_autoinstall/"/}"
+            AI_FILE_CHECK="$AI_FILE=$AI_AMOUNT_ARRAY"
+            AI_FILE_ARRAY+=($AI_FILE)
+            if [[ $AI_TOP_GAMES =~ ${AI_FILE_CHECK//=*/} ]] ; then
+                AI_TRUE_FILE+=($AI_FILE_CHECK)
             else
-                [[ $line =~ "# info_en: " ]] && AI_INFO["$AI_AMOUNT_ARRAY"]="${line//# info_en: /}"
+                AI_FILE_UNSORTED+=($AI_AMOUNT_ARRAY)
             fi
-        done < "$ai_file"
-        AI_FILE="${ai_file//"$PORT_SCRIPTS_PATH/pw_autoinstall/"/}"
-        AI_FILE_CHECK="$AI_FILE=$AI_AMOUNT_ARRAY"
-        AI_FILE_ARRAY+=($AI_FILE)
-        if [[ $AI_TOP_GAMES =~ ${AI_FILE_CHECK//=*/} ]] ; then
-            AI_TRUE_FILE+=($AI_FILE_CHECK)
-        else
-            AI_FILE_UNSORTED+=($AI_AMOUNT_ARRAY)
-        fi
-        (( AI_AMOUNT_ARRAY++ ))
-    done
+            (( AI_AMOUNT_ARRAY++ ))
+        done
 
-    unset AI_FILE_SORTED
-    for ai_sort in $AI_TOP_GAMES ; do
-        if [[ ${AI_TRUE_FILE[*]} =~ $ai_sort ]] ; then
-            AI_TRUE_FILE_NEW=(${AI_TRUE_FILE[@]//$ai_sort=/})
-            AI_FILE_SORTED+=(${AI_TRUE_FILE_NEW[@]//*=*/})
-        fi
-    done
+        for ai_sort in $AI_TOP_GAMES ; do
+            if [[ ${AI_TRUE_FILE[*]} =~ $ai_sort ]] ; then
+                AI_TRUE_FILE_NEW=(${AI_TRUE_FILE[@]//$ai_sort=/})
+                AI_FILE_SORTED+=(${AI_TRUE_FILE_NEW[@]//*=*/})
+            fi
+        done
 
-    IFS=$'\n'
-    for ai in "${AI_FILE_SORTED[@]}" "${AI_FILE_UNSORTED[@]}" ; do
-        case ${AI_TYPE[$ai]} in
-            games)
-                PW_GENERATE_BUTTONS_GAMES+="--field=   ${AI_NAME[$ai]}!$PW_GUI_ICON_PATH/${AI_IMAGE[$ai]}.png!${AI_INFO[$ai]}:FBTNR%@bash -c \"button_click --normal ${AI_FILE_ARRAY[$ai]}\"%"
-                (( AI_AMOUNT_GAMES++ ))
-                ;;
-            emulators)
-                PW_GENERATE_BUTTONS_EMULS+="--field=   ${AI_NAME[$ai]}!$PW_GUI_ICON_PATH/${AI_IMAGE[$ai]}.png!${AI_INFO[$ai]}:FBTNR%@bash -c \"button_click --normal ${AI_FILE_ARRAY[$ai]}\"%"
-                (( AI_AMOUNT_EMULS++ ))
-                ;;
+        IFS=$'\n'
+        for ai in "${AI_FILE_SORTED[@]}" "${AI_FILE_UNSORTED[@]}" ; do
+            case ${AI_TYPE[$ai]} in
+                games)
+                    export PW_GENERATE_BUTTONS_GAMES+="--field=   ${AI_NAME[$ai]}!$PW_GUI_ICON_PATH/${AI_IMAGE[$ai]}.png!${AI_INFO[$ai]}:FBTNR%@bash -c \"button_click --normal ${AI_FILE_ARRAY[$ai]}\"%"
+                    (( AI_AMOUNT_GAMES++ ))
+                    ;;
+                emulators)
+                    export PW_GENERATE_BUTTONS_EMULS+="--field=   ${AI_NAME[$ai]}!$PW_GUI_ICON_PATH/${AI_IMAGE[$ai]}.png!${AI_INFO[$ai]}:FBTNR%@bash -c \"button_click --normal ${AI_FILE_ARRAY[$ai]}\"%"
+                    (( AI_AMOUNT_EMULS++ ))
+                    ;;
                 *)
-                yad_error "Line: \"type\" not found in file ${AI_FILE_ARRAY[$ai]} or misspelled."
-                ;;
-        esac
-    done
-    unset AI_FILE_ARRAY AI_TYPE AI_NAME AI_IMAGE AI_INFO
-    MAIN_GUI_ROWS_GAMES="$(( AI_AMOUNT_GAMES / MAIN_GUI_COLUMNS + 1 ))"
-    MAIN_GUI_ROWS_EMULS="$(( AI_AMOUNT_EMULS / MAIN_GUI_COLUMNS + 1 ))"
+                    yad_error "Line: \"type\" not found in file ${AI_FILE_ARRAY[$ai]} or misspelled."
+                    ;;
+            esac
+        done
+        export MAIN_GUI_ROWS_GAMES="$(( AI_AMOUNT_GAMES / MAIN_GUI_COLUMNS + 1 ))"
+        export MAIN_GUI_ROWS_EMULS="$(( AI_AMOUNT_EMULS / MAIN_GUI_COLUMNS + 1 ))"
+
+        export AI_SKIP="1"
+    fi
 
     IFS="%"
     "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[1]}" --form --columns="$MAIN_GUI_ROWS_EMULS" --align-buttons --scroll --homogeneous-column \
     --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" --separator=" " ${PW_GENERATE_BUTTONS_EMULS} 2>/dev/null &
     "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[0]}" --form --columns="$MAIN_GUI_ROWS_GAMES" --align-buttons --scroll --homogeneous-column \
     --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" --separator=" " ${PW_GENERATE_BUTTONS_GAMES} 2>/dev/null &
-    unset PW_GENERATE_BUTTONS_GAMES PW_GENERATE_BUTTONS_EMULS
     IFS="$orig_IFS"
 
     export START_FROM_PP_GUI="1"

From 8781ca6e3b949bcef64d71981a6c19394aec885f Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 02:02:28 +0500
Subject: [PATCH 03/28] Rewrite PW_DESKTOP_FILES

---
 data_from_portwine/scripts/start.sh | 59 ++++++++++++++++++-----------
 1 file changed, 36 insertions(+), 23 deletions(-)

diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 96d288f0..67b83d9d 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -602,35 +602,42 @@ if [[ -f "${portwine_exe}" ]] ; then
         portwine_launch
     fi
 else
-    PW_ALL_DF="$(ls "${PORT_WINE_PATH}"/ | grep .desktop | grep -vE '(PortProton|readme)')"
-    if [[ -z "${PW_ALL_DF}" ]]
-    then export PW_GUI_SORT_TABS=(1 2 3 4 5)
-    else export PW_GUI_SORT_TABS=(2 3 4 5 1)
-    fi
     if [[ "$RESTART_PP_USED" == "userconf" ]] ; then
         unset RESTART_PP_USED
         gui_userconf
     fi
 
-    export KEY_MENU="$RANDOM"
+    AMOUNT_GENERATE_BUTTONS="0"
+    for desktop_file in "${PORT_WINE_PATH}"/* ; do
+        if [[ $desktop_file =~ .desktop ]] ; then
+            if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
+                while IFS= read -r line ; do
+                    [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
+                    [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
+                done < "$desktop_file"
+                desktop_file="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file}"
+                DESKTOP_FILE_ARRAY+=($AMOUNT_GENERATE_BUTTONS)
+                (( AMOUNT_GENERATE_BUTTONS++ ))
+            fi
+        fi
+    done
 
     IFS=$'\n'
-    AMOUNT_GENERATE_BUTTONS="1"
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
-    for PW_DESKTOP_FILES in ${PW_ALL_DF} ; do
-        if check_flatpak ; then
-            PW_NAME_D_ICON="$(grep Exec "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F'=' '{print $2}' |
-            sed -e 's|flatpak run ru.linux_gaming.PortProton||' -e 's|"||g' -e 's|^[ \t]*||')"
-        else
-            PW_NAME_D_ICON="$(grep Exec "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F"=env " '{print $2}' |
-            sed -e "s|${PORT_SCRIPTS_PATH}/start.sh||" -e 's|"||g' -e 's|^[ \t]*||')"
-        fi
-        PW_ICON_PATH="$(grep Icon "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F= '{print $2}')"
-        PW_NAME_D_ICON_48="${PW_ICON_PATH%.png}_48"
-        PW_NAME_D_ICON_128="${PW_ICON_PATH%.png}"
-        if [[ -f "${PW_NAME_D_ICON}" ]] ; then
-            resize_png "${PW_NAME_D_ICON}" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
-            resize_png "${PW_NAME_D_ICON}" "${PW_NAME_D_ICON_128//"${PORT_WINE_PATH}/data/img/"/}" "128"
+    for df in "${DESKTOP_FILE_ARRAY[@]}" ; do
+        PW_DESKTOP_FILES="${PW_ALL_DF[$df]}"
+        if [[ -n ${PW_NAME_D_ICON[$df]} ]] ; then
+            PW_NAME_D_ICON_48="${PW_ICON_PATH[$df]%.png}_48"
+            PW_NAME_D_ICON_128="${PW_ICON_PATH[$df]%.png}"
+            if check_flatpak ; then
+                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[$df]//flatpak run ru.linux_gaming.PortProton /}
+            else
+                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[$df]//"${PORT_SCRIPTS_PATH}/start.sh" /}
+            fi
+            PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON_NEW//\"/}"
+            resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
+            resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_128//"${PORT_WINE_PATH}/data/img/"/}" "128"
         fi
         if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then
             export PW_DESKTOP_FILES_REGEX="1"
@@ -658,9 +665,15 @@ else
             PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES}"
         fi
         PW_GENERATE_BUTTONS+="--field=   $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_NAME_D_ICON_48}.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%"
-        (( AMOUNT_GENERATE_BUTTONS++ ))
     done
-    MAIN_GUI_ROWS="$(( AMOUNT_GENERATE_BUTTONS / MAIN_GUI_COLUMNS + 1 ))"
+    MAIN_GUI_ROWS="$(( ( AMOUNT_GENERATE_BUTTONS + 1 ) / MAIN_GUI_COLUMNS + 1 ))"
+
+    if [[ -z "${PW_ALL_DF[0]}" ]]
+    then export PW_GUI_SORT_TABS=(1 2 3 4 5)
+    else export PW_GUI_SORT_TABS=(2 3 4 5 1)
+    fi
+
+    KEY_MENU="$RANDOM"
 
     IFS="%"
     "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[4]}" --form --columns="$MAIN_GUI_ROWS" --homogeneous-column \

From ceaa7da2a037323e0038cd1cc338bca3d8c2a60a Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 04:18:01 +0500
Subject: [PATCH 04/28] Update PW_DESKTOP_FILES_REGEX

---
 data_from_portwine/scripts/functions_helper | 21 ++++--------
 data_from_portwine/scripts/start.sh         | 37 ++++++++-------------
 2 files changed, 20 insertions(+), 38 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 08ec756d..2e5838b7 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -5851,21 +5851,12 @@ button_click () {
         --desktop)
             kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY_MENU}" | awk '{print $1}') > /dev/null 2>&1
             PW_YAD_SET="${PORT_WINE_PATH}/${PW_YAD_SET//#@_@#/ }"
-            if [[ $PW_DESKTOP_FILES_REGEX == "1" ]] ; then
-                PW_YAD_SET="${PW_YAD_SET//#+_1#/\(}"
-                PW_YAD_SET="${PW_YAD_SET//#+_2#/\)}"
-                PW_YAD_SET="${PW_YAD_SET//#+_3#/\!}"
-                PW_YAD_SET="${PW_YAD_SET//#+_4#/\$}"
-                PW_YAD_SET="${PW_YAD_SET//#+_5#/\%}"
-                PW_YAD_SET="${PW_YAD_SET//#+_6#/\&}"
-                PW_YAD_SET="${PW_YAD_SET//#+_7#/\`}"
-                PW_YAD_SET="${PW_YAD_SET//#+_8#/\'}"
-                PW_YAD_SET="${PW_YAD_SET//#+_9#/\"}"
-                PW_YAD_SET="${PW_YAD_SET//#+_10#/\>}"
-                PW_YAD_SET="${PW_YAD_SET//#+_11#/\<}"
-                PW_YAD_SET="${PW_YAD_SET//#+_12#/\\}"
-                PW_YAD_SET="${PW_YAD_SET//#+_13#/\|}"
-                PW_YAD_SET="${PW_YAD_SET//#+_14#/\;}"
+            if [[ -n $PW_DESKTOP_FILES_REGEX ]] ; then
+                count=1
+                for y in ${PW_DESKTOP_FILES_REGEX[@]} ; do
+                    PW_YAD_SET="${PW_YAD_SET//#+_$count#/$y}"
+                    (( count++ ))
+                done
             fi
             if check_flatpak
             then PW_EXEC_FROM_DESKTOP="$(grep Exec "$PW_YAD_SET" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 67b83d9d..12c102b9 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -639,30 +639,21 @@ else
             resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
             resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_128//"${PORT_WINE_PATH}/data/img/"/}" "128"
         fi
-        if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then
-            export PW_DESKTOP_FILES_REGEX="1"
-            PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES//\!/}"
-            PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//\%/}"
-            PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//\$/}"
-            PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//\&/}"
-            PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//\</}"
 
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\(/#+_1#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\)/#+_2#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\!/#+_3#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\$/#+_4#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\%/#+_5#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\&/#+_6#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\`/#+_7#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\'/#+_8#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\"/#+_9#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\>/#+_10#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\</#+_11#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\\/#+_12#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\|/#+_13#}"
-            PW_DESKTOP_FILES="${PW_DESKTOP_FILES//\;/#+_14#}"
-        else
-            PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES}"
+        PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES}"
+        if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then
+            PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
+            PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;)
+
+            for i in ${PW_DESKTOP_FILES_SHOW_REGEX[@]} ; do
+                PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//$i/}"
+            done
+
+            count=1
+            for j in ${PW_DESKTOP_FILES_REGEX[@]} ; do
+                PW_DESKTOP_FILES="${PW_DESKTOP_FILES//$j/#+_$count#}"
+                (( count++ ))
+            done
         fi
         PW_GENERATE_BUTTONS+="--field=   $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_NAME_D_ICON_48}.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%"
     done

From 1d1ccdfb81470e0c2854fce65af2ccb818d77d73 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 05:49:46 +0500
Subject: [PATCH 05/28] Update debug_timer

---
 data_from_portwine/scripts/functions_helper | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 2e5838b7..bf119e09 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -744,12 +744,15 @@ debug_timer () {
         START=$(date +%s%N)
     elif [[ "$1" == "--end" ]] ; then
         END=$(date +%s%N)
-        DIFF=$((( END - START )/1000000))
         if [[ -n "$2" ]] ; then
-            if [[ "$2" != "-s" ]] ; then
+            if [[ "$2" == "-s" ]] ; then
+                export "$3"=$((( END - START )/1000000 ))
+            else
+                DIFF=$((( END - START )/1000000 ))
                 print_warning "It took $DIFF milliseconds for $2"
             fi
         else
+            DIFF=$((( END - START )/1000000 ))
             print_warning "It took $DIFF milliseconds"
         fi
     fi
@@ -1761,8 +1764,7 @@ pw_port_update () {
             print_warning "https://gitlab.eterfund.ru/ broken. Skip it..."
             UPDATE_SKIP_ETERFUND="1"
         fi
-        debug_timer --end -s
-        UPDATE_ETERFUND="$DIFF"
+        debug_timer --end -s "UPDATE_ETERFUND"
 
         debug_timer --start
         if ! timeout 2 curl -f -s --list-only "$URL_GITHUB" > "${PORT_WINE_TMP_PATH}/curent_var_ver"
@@ -1770,8 +1772,7 @@ pw_port_update () {
             print_warning "https://raw.githubusercontent.com/ broken. Skip it..."
             UPDATE_SKIP_GITHUB="1"
         fi
-        debug_timer --end -s
-        UPDATE_GITHUB="$DIFF"
+        debug_timer --end -s "UPDATE_GITHUB"
 
         if [[ "$UPDATE_SKIP_ETERFUND" == "1" ]] \
         && [[ "$UPDATE_SKIP_GITHUB" == "1" ]] ; then

From bb84ba2f67e5db18d34cc9a1fb7c1849d2b3a0aa Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 08:12:40 +0500
Subject: [PATCH 06/28] Added Time= in desktop file

---
 data_from_portwine/scripts/functions_helper | 43 +++++++++++++++++++--
 data_from_portwine/scripts/start.sh         | 24 +++++++-----
 2 files changed, 54 insertions(+), 13 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index bf119e09..87399e64 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -742,11 +742,29 @@ unpack () {
 debug_timer () {
     if [[ "$1" == "--start" ]] ; then
         START=$(date +%s%N)
+        if [[ "$2" == "-s" ]] ; then
+            case $3 in
+                PW_TIME_IN_GAME)
+                    START_PW_TIME_IN_GAME=$START ;;
+                UPDATE_ETERFUND)
+                    START_UPDATE_ETERFUND=$START ;;
+                UPDATE_GITHUB)
+                    START_UPDATE_GITHUB=$START ;;
+            esac
+        fi
     elif [[ "$1" == "--end" ]] ; then
         END=$(date +%s%N)
         if [[ -n "$2" ]] ; then
             if [[ "$2" == "-s" ]] ; then
-                export "$3"=$((( END - START )/1000000 ))
+                case $3 in
+                    PW_TIME_IN_GAME)
+                        START=$START_PW_TIME_IN_GAME ;;
+                    UPDATE_ETERFUND)
+                        START=$START_UPDATE_ETERFUND ;;
+                    UPDATE_GITHUB)
+                        START=$START_UPDATE_GITHUB ;;
+                esac
+                export "$3"="$((( END - START )/1000000 ))"
             else
                 DIFF=$((( END - START )/1000000 ))
                 print_warning "It took $DIFF milliseconds for $2"
@@ -1301,6 +1319,23 @@ stop_portwine () {
     pw_exit_tray
     pw_auto_create_shortcut
     add_in_stop_portwine
+
+    debug_timer --end -s "PW_TIME_IN_GAME"
+    while IFS= read -r line ; do
+        if [[ $line =~ ^Time= ]] ; then
+            export SKIP_GAME_TIME="1"
+            TIME_CURRENT=${line//Time=/}
+            TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
+        fi
+    done < "$LAST_DESKTOP_FILE"
+    IFS="$orig_IFS"
+    if [[ $SKIP_GAME_TIME != 1 ]] ; then
+        echo "Time=$PW_TIME_IN_GAME" >> "$LAST_DESKTOP_FILE"
+    else
+        sed -i '/^Time=/d' "$LAST_DESKTOP_FILE"
+        echo "Time=$TIME_TOTAL" >> "$LAST_DESKTOP_FILE"
+    fi
+
     case "$1" in
         --restart)
             restart_pp ;;
@@ -1758,7 +1793,7 @@ pw_port_update () {
     URL_GITHUB="https://raw.githubusercontent.com/Castro-Fidel/PortWINE/${BRANCH}/data_from_portwine/scripts/var"
 
     pw_check_update () {
-        debug_timer --start
+        debug_timer --start -s "UPDATE_ETERFUND"
         if ! timeout 2 curl -f -s --list-only "$URL_ETERFUND" > "${PORT_WINE_TMP_PATH}/curent_var_ver"
         then
             print_warning "https://gitlab.eterfund.ru/ broken. Skip it..."
@@ -1766,7 +1801,7 @@ pw_port_update () {
         fi
         debug_timer --end -s "UPDATE_ETERFUND"
 
-        debug_timer --start
+        debug_timer --start -s "UPDATE_GITHUB"
         if ! timeout 2 curl -f -s --list-only "$URL_GITHUB" > "${PORT_WINE_TMP_PATH}/curent_var_ver"
         then
             print_warning "https://raw.githubusercontent.com/ broken. Skip it..."
@@ -3532,6 +3567,7 @@ portwine_launch () {
         PW_VD_TMP=(explorer "/desktop=PortProton,${PW_SCREEN_RESOLUTION}")
     fi
 
+    debug_timer --start -s "PW_TIME_IN_GAME"
     case "$portwine_exe" in
         *.[Ee][Xx][Ee])
             pw_run ${PW_VD_TMP[@]} ${WINE_WIN_START} "$portwine_exe"
@@ -5859,6 +5895,7 @@ button_click () {
                     (( count++ ))
                 done
             fi
+            export LAST_DESKTOP_FILE="$PW_YAD_SET"
             if check_flatpak
             then PW_EXEC_FROM_DESKTOP="$(grep Exec "$PW_YAD_SET" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')"
             else PW_EXEC_FROM_DESKTOP="$(grep Exec "$PW_YAD_SET" | head -n 1 | awk -F"=env " '{print $2}')"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 12c102b9..a0bc0224 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -607,17 +607,20 @@ else
         gui_userconf
     fi
 
+    debug_timer --start
     AMOUNT_GENERATE_BUTTONS="0"
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
+
         if [[ $desktop_file =~ .desktop ]] ; then
             if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
                 while IFS= read -r line ; do
                     [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
                     [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
+                    [[ $line =~ ^Time= ]] && PW_GAME_TIME["${line//Time=/}"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
                 done < "$desktop_file"
-                desktop_file="${desktop_file//"${PORT_WINE_PATH}"\//}"
-                PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file}"
-                DESKTOP_FILE_ARRAY+=($AMOUNT_GENERATE_BUTTONS)
+                if [[ -z ${PW_GAME_TIME["${line//Time=/}"]} ]] ; then
+                    PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                fi
                 (( AMOUNT_GENERATE_BUTTONS++ ))
             fi
         fi
@@ -625,15 +628,14 @@ else
 
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
-    for df in "${DESKTOP_FILE_ARRAY[@]}" ; do
-        PW_DESKTOP_FILES="${PW_ALL_DF[$df]}"
-        if [[ -n ${PW_NAME_D_ICON[$df]} ]] ; then
-            PW_NAME_D_ICON_48="${PW_ICON_PATH[$df]%.png}_48"
-            PW_NAME_D_ICON_128="${PW_ICON_PATH[$df]%.png}"
+    for PW_DESKTOP_FILES in "${PW_GAME_TIME[@]}" "${PW_ALL_DF[@]}" ; do
+        if [[ -n ${PW_NAME_D_ICON} ]] ; then
+            PW_NAME_D_ICON_48="${PW_ICON_PATH%.png}_48"
+            PW_NAME_D_ICON_128="${PW_ICON_PATH%.png}"
             if check_flatpak ; then
-                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[$df]//flatpak run ru.linux_gaming.PortProton /}
+                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON//flatpak run ru.linux_gaming.PortProton /}
             else
-                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[$df]//"${PORT_SCRIPTS_PATH}/start.sh" /}
+                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON//"${PORT_SCRIPTS_PATH}/start.sh" /}
             fi
             PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON_NEW//\"/}"
             resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
@@ -657,6 +659,7 @@ else
         fi
         PW_GENERATE_BUTTONS+="--field=   $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_NAME_D_ICON_48}.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%"
     done
+
     MAIN_GUI_ROWS="$(( ( AMOUNT_GENERATE_BUTTONS + 1 ) / MAIN_GUI_COLUMNS + 1 ))"
 
     if [[ -z "${PW_ALL_DF[0]}" ]]
@@ -755,6 +758,7 @@ else
 
         export AI_SKIP="1"
     fi
+    debug_timer --end
 
     IFS="%"
     "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[1]}" --form --columns="$MAIN_GUI_ROWS_EMULS" --align-buttons --scroll --homogeneous-column \

From 477bc8071f4a94baec7397ccf5ce6956d8caac4b Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 10:53:22 +0500
Subject: [PATCH 07/28] Use PW_DESKTOP_FILES

---
 data_from_portwine/scripts/functions_helper |  1 +
 data_from_portwine/scripts/start.sh         | 20 ++++++++++++--------
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 87399e64..dca8a221 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1321,6 +1321,7 @@ stop_portwine () {
     add_in_stop_portwine
 
     debug_timer --end -s "PW_TIME_IN_GAME"
+    PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 ))
     while IFS= read -r line ; do
         if [[ $line =~ ^Time= ]] ; then
             export SKIP_GAME_TIME="1"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index a0bc0224..af24e625 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -90,7 +90,7 @@ unset MANGOHUD MANGOHUD_DLSYM PW_NO_ESYNC PW_NO_FSYNC PW_VULKAN_USE WINEDLLOVERR
 unset PW_CHECK_AUTOINSTALL PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PORTWINE_DB PORTWINE_DB_FILE RADV_PERFTEST
 unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_TO_GAME PW_START_DEBUG PORTPROTON_NAME PW_PATH
 unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR AMD_VULKAN_ICD PW_WINE_CPU_TOPOLOGY
-unset PW_NAME_D_NAME PW_NAME_D_ICON PW_NAME_D_EXEC PW_EXEC_FROM_DESKTOP PW_ALL_DF PW_GENERATE_BUTTONS PW_NAME_D_ICON PW_NAME_D_ICON_48
+unset PW_NAME_D_NAME PW_NAME_D_ICON PW_NAME_D_EXEC PW_EXEC_FROM_DESKTOP PW_GENERATE_BUTTONS PW_NAME_D_ICON PW_NAME_D_ICON_48
 unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR
 unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT
 unset PW_DESKTOP_FILES_REGEX PW_TERM
@@ -616,11 +616,15 @@ else
                 while IFS= read -r line ; do
                     [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
                     [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
-                    [[ $line =~ ^Time= ]] && PW_GAME_TIME["${line//Time=/}"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                    if [[ $line =~ ^Time= ]] ; then
+                        PW_GAME_TIME["${line//Time=/}"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                        WITH_TIME="1"
+                    fi
                 done < "$desktop_file"
-                if [[ -z ${PW_GAME_TIME["${line//Time=/}"]} ]] ; then
+                if [[ $WITH_TIME != 1 ]] ; then
                     PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
                 fi
+                unset WITH_TIME
                 (( AMOUNT_GENERATE_BUTTONS++ ))
             fi
         fi
@@ -662,7 +666,7 @@ else
 
     MAIN_GUI_ROWS="$(( ( AMOUNT_GENERATE_BUTTONS + 1 ) / MAIN_GUI_COLUMNS + 1 ))"
 
-    if [[ -z "${PW_ALL_DF[0]}" ]]
+    if [[ -z $PW_DESKTOP_FILES ]]
     then export PW_GUI_SORT_TABS=(1 2 3 4 5)
     else export PW_GUI_SORT_TABS=(2 3 4 5 1)
     fi
@@ -772,7 +776,7 @@ else
         export TAB_MAIN_MENU="1"
     fi
 
-    if [[ -z "${PW_ALL_DF}" ]] ; then
+    if [[ -z $PW_DESKTOP_FILES ]] ; then
         "${pw_yad}" --key=$KEY_MENU --notebook --expand \
         --gui-type="settings-notebook" --active-tab="${TAB_MAIN_MENU}" \
         --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons \
@@ -826,7 +830,7 @@ fi
     128|gui_pw_update|gui_rm_portproton|\
     change_loc|gui_open_scripts_from_backup|\
     gui_credits|pw_start_cont_xterm)
-        if [[ -z "${PW_ALL_DF}" ]] ; then
+        if [[ -z $PW_DESKTOP_FILES ]] ; then
             export TAB_MAIN_MENU="4"
         else
             export TAB_MAIN_MENU="5"
@@ -836,14 +840,14 @@ fi
     116|pw_create_prefix_backup|\
     gui_clear_pfx|WINEREG|WINECMD|\
     WINEFILE|WINECFG|gui_wine_uninstaller)
-        if [[ -z "${PW_ALL_DF}" ]] ; then
+        if [[ -z $PW_DESKTOP_FILES ]] ; then
             export TAB_MAIN_MENU="3"
         else
             export TAB_MAIN_MENU="4"
         fi
         ;;
     pw_find_exe)
-        if [[ -z "${PW_ALL_DF}" ]] ; then
+        if [[ -z $PW_DESKTOP_FILES ]] ; then
             export TAB_MAIN_MENU="5"
         else
             export TAB_MAIN_MENU="1"

From 006f5645f149872f02a7eb934ef2a8fba8d1332b Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 11:43:23 +0500
Subject: [PATCH 08/28] Added sort with time for desktop file in menu

---
 data_from_portwine/scripts/functions_helper |  3 ++-
 data_from_portwine/scripts/start.sh         | 19 ++++++++++++++++---
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index dca8a221..ee149cfb 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1321,7 +1321,8 @@ stop_portwine () {
     add_in_stop_portwine
 
     debug_timer --end -s "PW_TIME_IN_GAME"
-    PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 ))
+    #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 )) так в минутах
+    PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 ))
     while IFS= read -r line ; do
         if [[ $line =~ ^Time= ]] ; then
             export SKIP_GAME_TIME="1"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index af24e625..b7e67a60 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -610,14 +610,14 @@ else
     debug_timer --start
     AMOUNT_GENERATE_BUTTONS="0"
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
-
         if [[ $desktop_file =~ .desktop ]] ; then
             if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
                 while IFS= read -r line ; do
                     [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
                     [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
                     if [[ $line =~ ^Time= ]] ; then
-                        PW_GAME_TIME["${line//Time=/}"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                        PW_ALL_DF_WITH_TIME["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//Time=/}"
                         WITH_TIME="1"
                     fi
                 done < "$desktop_file"
@@ -630,9 +630,22 @@ else
         fi
     done
 
+    for i in "${!PW_GAME_TIME[@]}" ; do
+        for j in "${!PW_GAME_TIME[@]}" ; do
+            if [[ ${PW_GAME_TIME[$i]} -gt ${PW_GAME_TIME[$j]} ]]; then
+                tmp=${PW_GAME_TIME[$i]}
+                tmp_new=${PW_ALL_DF_WITH_TIME[$i]}
+                PW_GAME_TIME[$i]=${PW_GAME_TIME[$j]}
+                PW_ALL_DF_WITH_TIME[$i]=${PW_ALL_DF_WITH_TIME[$j]}
+                PW_GAME_TIME[$j]=$tmp
+                PW_ALL_DF_WITH_TIME[$j]=$tmp_new
+            fi
+        done
+    done
+
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
-    for PW_DESKTOP_FILES in "${PW_GAME_TIME[@]}" "${PW_ALL_DF[@]}" ; do
+    for PW_DESKTOP_FILES in "${PW_ALL_DF_WITH_TIME[@]}" "${PW_ALL_DF[@]}" ; do
         if [[ -n ${PW_NAME_D_ICON} ]] ; then
             PW_NAME_D_ICON_48="${PW_ICON_PATH%.png}_48"
             PW_NAME_D_ICON_128="${PW_ICON_PATH%.png}"

From f6879176925b945c71aa5b33d445124f5a8571c2 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 12:49:43 +0500
Subject: [PATCH 09/28] Fixed bugs

---
 data_from_portwine/scripts/functions_helper | 13 +++-----
 data_from_portwine/scripts/start.sh         | 37 +++++++++++++--------
 2 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index ee149cfb..323ab50e 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1321,22 +1321,17 @@ stop_portwine () {
     add_in_stop_portwine
 
     debug_timer --end -s "PW_TIME_IN_GAME"
-    #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 )) так в минутах
-    PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 ))
+    #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 )) # в минутах
+    PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
     while IFS= read -r line ; do
         if [[ $line =~ ^Time= ]] ; then
-            export SKIP_GAME_TIME="1"
             TIME_CURRENT=${line//Time=/}
             TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
         fi
     done < "$LAST_DESKTOP_FILE"
     IFS="$orig_IFS"
-    if [[ $SKIP_GAME_TIME != 1 ]] ; then
-        echo "Time=$PW_TIME_IN_GAME" >> "$LAST_DESKTOP_FILE"
-    else
-        sed -i '/^Time=/d' "$LAST_DESKTOP_FILE"
-        echo "Time=$TIME_TOTAL" >> "$LAST_DESKTOP_FILE"
-    fi
+    sed -i '/^Time=/d' "$LAST_DESKTOP_FILE"
+    echo "Time=$TIME_TOTAL" >> "$LAST_DESKTOP_FILE"
 
     case "$1" in
         --restart)
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index b7e67a60..e908c72c 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -616,15 +616,17 @@ else
                     [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
                     [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
                     if [[ $line =~ ^Time= ]] ; then
-                        PW_ALL_DF_WITH_TIME["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
                         PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//Time=/}"
                         WITH_TIME="1"
                     fi
                 done < "$desktop_file"
+                PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
                 if [[ $WITH_TIME != 1 ]] ; then
-                    PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                    echo "Time=0" >> "$desktop_file"
+                    PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="0"
                 fi
                 unset WITH_TIME
+                PW_ALL_DF_ARRAY+=($AMOUNT_GENERATE_BUTTONS)
                 (( AMOUNT_GENERATE_BUTTONS++ ))
             fi
         fi
@@ -633,26 +635,35 @@ else
     for i in "${!PW_GAME_TIME[@]}" ; do
         for j in "${!PW_GAME_TIME[@]}" ; do
             if [[ ${PW_GAME_TIME[$i]} -gt ${PW_GAME_TIME[$j]} ]]; then
-                tmp=${PW_GAME_TIME[$i]}
-                tmp_new=${PW_ALL_DF_WITH_TIME[$i]}
+                tmp_0=${PW_GAME_TIME[$i]}
+                tmp_1=${PW_ALL_DF[$i]}
+                tmp_2=${PW_NAME_D_ICON[$i]}
+                tmp_4=${PW_ICON_PATH[$i]}
+
                 PW_GAME_TIME[$i]=${PW_GAME_TIME[$j]}
-                PW_ALL_DF_WITH_TIME[$i]=${PW_ALL_DF_WITH_TIME[$j]}
-                PW_GAME_TIME[$j]=$tmp
-                PW_ALL_DF_WITH_TIME[$j]=$tmp_new
+                PW_ALL_DF[$i]=${PW_ALL_DF[$j]}
+                PW_NAME_D_ICON[$i]=${PW_NAME_D_ICON[$j]}
+                PW_ICON_PATH[$i]=${PW_ICON_PATH[$j]}
+
+                PW_GAME_TIME[$j]=$tmp_0
+                PW_ALL_DF[$j]=$tmp_1
+                PW_NAME_D_ICON[$j]=$tmp_2
+                PW_ICON_PATH[$j]=$tmp_4
             fi
         done
     done
 
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
-    for PW_DESKTOP_FILES in "${PW_ALL_DF_WITH_TIME[@]}" "${PW_ALL_DF[@]}" ; do
-        if [[ -n ${PW_NAME_D_ICON} ]] ; then
-            PW_NAME_D_ICON_48="${PW_ICON_PATH%.png}_48"
-            PW_NAME_D_ICON_128="${PW_ICON_PATH%.png}"
+    for dp in "${PW_ALL_DF_ARRAY[@]}" ; do
+        PW_DESKTOP_FILES="${PW_ALL_DF[$dp]}"
+        if [[ -n ${PW_NAME_D_ICON[dp]} ]] ; then
+            PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]%.png}_48"
+            PW_NAME_D_ICON_128="${PW_ICON_PATH[dp]%.png}"
             if check_flatpak ; then
-                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON//flatpak run ru.linux_gaming.PortProton /}
+                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[dp]//flatpak run ru.linux_gaming.PortProton /}
             else
-                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON//"${PORT_SCRIPTS_PATH}/start.sh" /}
+                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[dp]//env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
             fi
             PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON_NEW//\"/}"
             resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"

From baaede8fe4ca037020cab92f4835b2d788fc3bf1 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 13:05:17 +0500
Subject: [PATCH 10/28] Revert SKIP_GAME_TIME

---
 data_from_portwine/scripts/functions_helper | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 323ab50e..11abe1b2 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1325,13 +1325,19 @@ stop_portwine () {
     PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
     while IFS= read -r line ; do
         if [[ $line =~ ^Time= ]] ; then
+            SKIP_GAME_TIME="1"
             TIME_CURRENT=${line//Time=/}
             TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
         fi
     done < "$LAST_DESKTOP_FILE"
     IFS="$orig_IFS"
-    sed -i '/^Time=/d' "$LAST_DESKTOP_FILE"
-    echo "Time=$TIME_TOTAL" >> "$LAST_DESKTOP_FILE"
+
+    if [[ $SKIP_GAME_TIME != 1 ]] ; then
+        echo "Time=$PW_TIME_IN_GAME" >> "$LAST_DESKTOP_FILE"
+    else
+        sed -i '/^Time=/d' "$LAST_DESKTOP_FILE"
+        echo "Time=$TIME_TOTAL" >> "$LAST_DESKTOP_FILE"
+    fi
 
     case "$1" in
         --restart)

From e3079c77438f388bbce0c326cdc915f02dee8f5f Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 13:24:52 +0500
Subject: [PATCH 11/28] Fixes..

---
 data_from_portwine/scripts/functions_helper | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 11abe1b2..f8842270 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1323,21 +1323,23 @@ stop_portwine () {
     debug_timer --end -s "PW_TIME_IN_GAME"
     #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 )) # в минутах
     PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
+
+    if [[ -z "${PORTPROTON_NAME}" ]] ; then
+        name_desktop="$(basename "$portwine_exe")"
+    else
+        name_desktop="${PORTPROTON_NAME}"
+    fi
+
     while IFS= read -r line ; do
         if [[ $line =~ ^Time= ]] ; then
-            SKIP_GAME_TIME="1"
             TIME_CURRENT=${line//Time=/}
             TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
         fi
-    done < "$LAST_DESKTOP_FILE"
+    done < "${PORT_WINE_PATH}/${name_desktop}.desktop"
     IFS="$orig_IFS"
 
-    if [[ $SKIP_GAME_TIME != 1 ]] ; then
-        echo "Time=$PW_TIME_IN_GAME" >> "$LAST_DESKTOP_FILE"
-    else
-        sed -i '/^Time=/d' "$LAST_DESKTOP_FILE"
-        echo "Time=$TIME_TOTAL" >> "$LAST_DESKTOP_FILE"
-    fi
+    sed -i '/^Time=/d' "${PORT_WINE_PATH}/${name_desktop}.desktop"
+    echo "Time=$TIME_TOTAL" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
 
     case "$1" in
         --restart)
@@ -5312,6 +5314,7 @@ portwine_create_shortcut () {
             echo "StartupNotify=true"
             echo "Path=${PORT_SCRIPTS_PATH}/"
             echo "Icon=${PORT_WINE_PATH}/data/img/${name_desktop_png}.png"
+            echo "Time=0"
         } >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
         chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
 
@@ -5898,7 +5901,6 @@ button_click () {
                     (( count++ ))
                 done
             fi
-            export LAST_DESKTOP_FILE="$PW_YAD_SET"
             if check_flatpak
             then PW_EXEC_FROM_DESKTOP="$(grep Exec "$PW_YAD_SET" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')"
             else PW_EXEC_FROM_DESKTOP="$(grep Exec "$PW_YAD_SET" | head -n 1 | awk -F"=env " '{print $2}')"

From 89df756124bcadcc49959f9e70a714485ad56a7a Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 19:56:48 +0500
Subject: [PATCH 12/28] Added function for detected .desktop files

---
 data_from_portwine/scripts/functions_helper | 43 ++++++++++++++-------
 data_from_portwine/scripts/start.sh         |  4 +-
 2 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index f8842270..7be0f973 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1324,23 +1324,37 @@ stop_portwine () {
     #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 )) # в минутах
     PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
 
-    if [[ -z "${PORTPROTON_NAME}" ]] ; then
-        name_desktop="$(basename "$portwine_exe")"
-    else
-        name_desktop="${PORTPROTON_NAME}"
-    fi
-
-    while IFS= read -r line ; do
-        if [[ $line =~ ^Time= ]] ; then
-            TIME_CURRENT=${line//Time=/}
-            TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
+    for desktop_file in "${PORT_WINE_PATH}"/* ; do
+        if [[ $desktop_file =~ .desktop ]] ; then
+            if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
+                while IFS= read -r line ; do
+                    if [[ $line =~ ^Exec= ]] ; then
+                        if check_flatpak ; then
+                            EXEC_DESKTOP=${line//Exec=flatpak run ru.linux_gaming.PortProton /}
+                        else
+                            EXEC_DESKTOP=${line//Exec=env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
+                        fi
+                        EXEC_DESKTOP_NEW="${EXEC_DESKTOP//\"/}"
+                    fi
+                    if [[ $line =~ ^Time= ]] ; then
+                        WITH_TIME="1"
+                        TIME_CURRENT=${line//Time=/}
+                        TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
+                    fi
+                done < "$desktop_file"
+                if [[ $WITH_TIME != 1 ]] ; then
+                    echo "Time=0" >> "$desktop_file"
+                fi
+                unset WITH_TIME
+                if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
+                    sed -i '/^Time=/d' "$desktop_file"
+                    echo "Time=$TIME_TOTAL" >> "$desktop_file"
+                fi
+            fi
         fi
-    done < "${PORT_WINE_PATH}/${name_desktop}.desktop"
+    done
     IFS="$orig_IFS"
 
-    sed -i '/^Time=/d' "${PORT_WINE_PATH}/${name_desktop}.desktop"
-    echo "Time=$TIME_TOTAL" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
-
     case "$1" in
         --restart)
             restart_pp ;;
@@ -5314,7 +5328,6 @@ portwine_create_shortcut () {
             echo "StartupNotify=true"
             echo "Path=${PORT_SCRIPTS_PATH}/"
             echo "Icon=${PORT_WINE_PATH}/data/img/${name_desktop_png}.png"
-            echo "Time=0"
         } >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
         chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
 
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index e908c72c..90382dda 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -616,14 +616,14 @@ else
                     [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
                     [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
                     if [[ $line =~ ^Time= ]] ; then
-                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//Time=/}"
                         WITH_TIME="1"
+                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//Time=/}"
                     fi
                 done < "$desktop_file"
                 PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
                 if [[ $WITH_TIME != 1 ]] ; then
                     echo "Time=0" >> "$desktop_file"
-                    PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="0"
+                    PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="9999999999999999999999"
                 fi
                 unset WITH_TIME
                 PW_ALL_DF_ARRAY+=($AMOUNT_GENERATE_BUTTONS)

From d9d30ddc4c0401e15ee5d21950d556cc69b8628c Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 20:06:00 +0500
Subject: [PATCH 13/28] Added comments

---
 data_from_portwine/scripts/functions_helper | 1 +
 data_from_portwine/scripts/start.sh         | 9 +++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 7be0f973..ebe0b382 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1324,6 +1324,7 @@ stop_portwine () {
     #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 )) # в минутах
     PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
 
+    # Поиск нужного .desktop файла по $portwine_exe, чтобы внести изменения в него.
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
         if [[ $desktop_file =~ .desktop ]] ; then
             if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 90382dda..01158c9f 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -607,7 +607,9 @@ else
         gui_userconf
     fi
 
-    debug_timer --start
+    debug_timer --start # дропнуть и debug_timer --end ниже тоже
+
+    # Поиск .desktop файлов
     AMOUNT_GENERATE_BUTTONS="0"
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
         if [[ $desktop_file =~ .desktop ]] ; then
@@ -632,6 +634,7 @@ else
         fi
     done
 
+    # Переопределение массивов в зависимости от PW_GAME_TIME, от большего значения к меньшему.
     for i in "${!PW_GAME_TIME[@]}" ; do
         for j in "${!PW_GAME_TIME[@]}" ; do
             if [[ ${PW_GAME_TIME[$i]} -gt ${PW_GAME_TIME[$j]} ]]; then
@@ -653,6 +656,7 @@ else
         done
     done
 
+    # Генерация .desktop баттанов для меню
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
     for dp in "${PW_ALL_DF_ARRAY[@]}" ; do
@@ -733,8 +737,9 @@ else
     --field="   ${translations[Regedit]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine regedit]}":"FBTN" '@bash -c "button_click --normal WINEREG"' 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null &
 
     if [[ $AI_SKIP != 1 ]] ; then
-        AI_AMOUNT_GAMES="0" && AI_AMOUNT_EMULS="0" && AI_AMOUNT_ARRAY="0"
+        # AI_TOP_GAMES используется для сортировки автоинсталлов (работает на эмуляторы тоже)
         AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET"
+        AI_AMOUNT_GAMES="0" && AI_AMOUNT_EMULS="0" && AI_AMOUNT_ARRAY="0"
         for ai_file in "$PORT_SCRIPTS_PATH"/pw_autoinstall/* ; do
             while IFS= read -r line ; do
                 [[ $line =~ "##########" ]] && break

From bd1d62bd88cb933e6696c5583f3513d5c309be89 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sat, 5 Oct 2024 21:15:43 +0500
Subject: [PATCH 14/28] Update hack for new .desktop files

---
 data_from_portwine/scripts/functions_helper |  2 +-
 data_from_portwine/scripts/start.sh         | 10 ++++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index ebe0b382..66f8b25b 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1321,7 +1321,7 @@ stop_portwine () {
     add_in_stop_portwine
 
     debug_timer --end -s "PW_TIME_IN_GAME"
-    #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) % 60 )) # в минутах
+    #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) )) # в минутах
     PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
 
     # Поиск нужного .desktop файла по $portwine_exe, чтобы внести изменения в него.
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 01158c9f..94e558f0 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -623,12 +623,14 @@ else
                     fi
                 done < "$desktop_file"
                 PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                # Чтобы новый ярлык показало первым при первом запуске, потом уже по времени
                 if [[ $WITH_TIME != 1 ]] ; then
                     echo "Time=0" >> "$desktop_file"
-                    PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="9999999999999999999999"
+                    PW_AMOUNT_NO_TIME+=($AMOUNT_GENERATE_BUTTONS)
+                else
+                    PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)
                 fi
                 unset WITH_TIME
-                PW_ALL_DF_ARRAY+=($AMOUNT_GENERATE_BUTTONS)
                 (( AMOUNT_GENERATE_BUTTONS++ ))
             fi
         fi
@@ -637,7 +639,7 @@ else
     # Переопределение массивов в зависимости от PW_GAME_TIME, от большего значения к меньшему.
     for i in "${!PW_GAME_TIME[@]}" ; do
         for j in "${!PW_GAME_TIME[@]}" ; do
-            if [[ ${PW_GAME_TIME[$i]} -gt ${PW_GAME_TIME[$j]} ]]; then
+            if [[ ${PW_GAME_TIME[$i]} -gt ${PW_GAME_TIME[$j]} ]] ; then
                 tmp_0=${PW_GAME_TIME[$i]}
                 tmp_1=${PW_ALL_DF[$i]}
                 tmp_2=${PW_NAME_D_ICON[$i]}
@@ -659,7 +661,7 @@ else
     # Генерация .desktop баттанов для меню
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
-    for dp in "${PW_ALL_DF_ARRAY[@]}" ; do
+    for dp in "${PW_AMOUNT_NO_TIME[@]}" "${PW_AMOUNT_WITH_TIME[@]}" ; do
         PW_DESKTOP_FILES="${PW_ALL_DF[$dp]}"
         if [[ -n ${PW_NAME_D_ICON[dp]} ]] ; then
             PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]%.png}_48"

From 91a220acad3724353d13883ea1d85ac5752f2108 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sun, 6 Oct 2024 06:40:20 +0500
Subject: [PATCH 15/28] Time= variable is commented out

---
 data_from_portwine/scripts/functions_helper | 10 +++++-----
 data_from_portwine/scripts/start.sh         |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 66f8b25b..7d4095a6 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1337,19 +1337,19 @@ stop_portwine () {
                         fi
                         EXEC_DESKTOP_NEW="${EXEC_DESKTOP//\"/}"
                     fi
-                    if [[ $line =~ ^Time= ]] ; then
+                    if [[ $line =~ ^#Time= ]] ; then
                         WITH_TIME="1"
-                        TIME_CURRENT=${line//Time=/}
+                        TIME_CURRENT=${line//#Time=/}
                         TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
                     fi
                 done < "$desktop_file"
                 if [[ $WITH_TIME != 1 ]] ; then
-                    echo "Time=0" >> "$desktop_file"
+                    echo "#Time=0" >> "$desktop_file"
                 fi
                 unset WITH_TIME
                 if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
-                    sed -i '/^Time=/d' "$desktop_file"
-                    echo "Time=$TIME_TOTAL" >> "$desktop_file"
+                    sed -i '/^#Time=/d' "$desktop_file"
+                    echo "#Time=$TIME_TOTAL" >> "$desktop_file"
                 fi
             fi
         fi
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 94e558f0..ab2092b0 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -617,15 +617,15 @@ else
                 while IFS= read -r line ; do
                     [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
                     [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
-                    if [[ $line =~ ^Time= ]] ; then
+                    if [[ $line =~ ^#Time= ]] ; then
                         WITH_TIME="1"
-                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//Time=/}"
+                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//#Time=/}"
                     fi
                 done < "$desktop_file"
                 PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
                 # Чтобы новый ярлык показало первым при первом запуске, потом уже по времени
                 if [[ $WITH_TIME != 1 ]] ; then
-                    echo "Time=0" >> "$desktop_file"
+                    echo "#Time=0" >> "$desktop_file"
                     PW_AMOUNT_NO_TIME+=($AMOUNT_GENERATE_BUTTONS)
                 else
                     PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)

From e6c94c966b470e31d37f7a579d8f9bc065c40b80 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sun, 6 Oct 2024 06:50:58 +0500
Subject: [PATCH 16/28] Spellcheck fixes

---
 data_from_portwine/scripts/start.sh | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index ab2092b0..6b3be892 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -637,28 +637,29 @@ else
     done
 
     # Переопределение массивов в зависимости от PW_GAME_TIME, от большего значения к меньшему.
+    # 10 миллисекунд на 40 .desktop файлов, работает быстро
     for i in "${!PW_GAME_TIME[@]}" ; do
         for j in "${!PW_GAME_TIME[@]}" ; do
-            if [[ ${PW_GAME_TIME[$i]} -gt ${PW_GAME_TIME[$j]} ]] ; then
+            if (( ${PW_GAME_TIME[$i]} > ${PW_GAME_TIME[$j]} )) ; then
                 tmp_0=${PW_GAME_TIME[$i]}
                 tmp_1=${PW_ALL_DF[$i]}
                 tmp_2=${PW_NAME_D_ICON[$i]}
                 tmp_4=${PW_ICON_PATH[$i]}
 
-                PW_GAME_TIME[$i]=${PW_GAME_TIME[$j]}
-                PW_ALL_DF[$i]=${PW_ALL_DF[$j]}
-                PW_NAME_D_ICON[$i]=${PW_NAME_D_ICON[$j]}
-                PW_ICON_PATH[$i]=${PW_ICON_PATH[$j]}
+                PW_GAME_TIME[i]=${PW_GAME_TIME[$j]}
+                PW_ALL_DF[i]=${PW_ALL_DF[$j]}
+                PW_NAME_D_ICON[i]=${PW_NAME_D_ICON[$j]}
+                PW_ICON_PATH[i]=${PW_ICON_PATH[$j]}
 
-                PW_GAME_TIME[$j]=$tmp_0
-                PW_ALL_DF[$j]=$tmp_1
-                PW_NAME_D_ICON[$j]=$tmp_2
-                PW_ICON_PATH[$j]=$tmp_4
+                PW_GAME_TIME[j]=$tmp_0
+                PW_ALL_DF[j]=$tmp_1
+                PW_NAME_D_ICON[j]=$tmp_2
+                PW_ICON_PATH[j]=$tmp_4
             fi
         done
     done
 
-    # Генерация .desktop баттанов для меню
+    # Генерация .desktop баттанов для главного меню
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
     for dp in "${PW_AMOUNT_NO_TIME[@]}" "${PW_AMOUNT_WITH_TIME[@]}" ; do

From 7fbfc75b25b77e7c495954dfd9640370855e7eb1 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sun, 6 Oct 2024 10:43:43 +0500
Subject: [PATCH 17/28] Fixed bug on native version PP

---
 data_from_portwine/scripts/functions_helper        |  8 +++++---
 .../scripts/pw_autoinstall/PW_STALCRAFT            |  4 ++--
 data_from_portwine/scripts/start.sh                | 14 ++++++++++----
 3 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 7d4095a6..5b2f7523 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1321,13 +1321,15 @@ stop_portwine () {
     add_in_stop_portwine
 
     debug_timer --end -s "PW_TIME_IN_GAME"
-    #PW_TIME_IN_GAME=$(( (PW_TIME_IN_GAME / 60000) )) # в минутах
     PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
+    # В году 31536000 секунд.
+    # Bash у меня ещё работает с таким числом 999999999999999999999999999999999999999999999999
 
     # Поиск нужного .desktop файла по $portwine_exe, чтобы внести изменения в него.
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
-        if [[ $desktop_file =~ .desktop ]] ; then
-            if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
+        desktop_file_new="${desktop_file//"${PORT_WINE_PATH}/"/}"
+        if [[ $desktop_file_new =~ .desktop ]] ; then
+            if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
                     if [[ $line =~ ^Exec= ]] ; then
                         if check_flatpak ; then
diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT b/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT
index 155b3682..50426ed3 100755
--- a/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT
+++ b/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT
@@ -1,8 +1,8 @@
 #!/usr/bin/env bash
 # Author: Castro-Fidel (linux-gaming.ru)
 # type: games
-# name: Star Conflict
-# image: starconflict
+# name: STALCRAFT
+# image: stalcraft
 # info_en:
 # info_ru:
 ########################################################################
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 6b3be892..93d472f6 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -612,8 +612,9 @@ else
     # Поиск .desktop файлов
     AMOUNT_GENERATE_BUTTONS="0"
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
-        if [[ $desktop_file =~ .desktop ]] ; then
-            if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
+        desktop_file_new="${desktop_file//"${PORT_WINE_PATH}/"/}"
+        if [[ $desktop_file_new =~ .desktop ]] ; then
+            if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
                     [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
                     [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
@@ -622,12 +623,17 @@ else
                         PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//#Time=/}"
                     fi
                 done < "$desktop_file"
-                PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="${desktop_file//"${PORT_WINE_PATH}"\//}"
+                PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new"
                 # Чтобы новый ярлык показало первым при первом запуске, потом уже по времени
                 if [[ $WITH_TIME != 1 ]] ; then
                     echo "#Time=0" >> "$desktop_file"
                     PW_AMOUNT_NO_TIME+=($AMOUNT_GENERATE_BUTTONS)
                 else
+                    if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] ; then
+                        sed -i '/^#Time=/d' "$desktop_file"
+                        echo "#Time=0" >> "$desktop_file"
+                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="0"
+                    fi
                     PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)
                 fi
                 unset WITH_TIME
@@ -636,7 +642,7 @@ else
         fi
     done
 
-    # Переопределение массивов в зависимости от PW_GAME_TIME, от большего значения к меньшему.
+    # Переопределение элементов в массивах в зависимости от PW_GAME_TIME, от большего значения к меньшему.
     # 10 миллисекунд на 40 .desktop файлов, работает быстро
     for i in "${!PW_GAME_TIME[@]}" ; do
         for j in "${!PW_GAME_TIME[@]}" ; do

From 64dfaf808f31d40432a25a8faa855c60342bed49 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Sun, 6 Oct 2024 20:44:58 +0500
Subject: [PATCH 18/28] new changes..

---
 data_from_portwine/scripts/start.sh | 33 +++++++++++++++--------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 93d472f6..6bfd0b96 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -616,8 +616,16 @@ else
         if [[ $desktop_file_new =~ .desktop ]] ; then
             if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
-                    [[ $line =~ ^Exec= ]] && PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]="${line//Exec=/}"
-                    [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
+                    if [[ $line =~ ^Exec= ]] ; then
+                        if check_flatpak ; then
+                            PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=flatpak run ru.linux_gaming.PortProton /}
+                        else
+                            PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
+                        fi
+                    fi
+                    if [[ $line =~ ^Icon= ]] ; then
+                        PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
+                    fi
                     if [[ $line =~ ^#Time= ]] ; then
                         WITH_TIME="1"
                         PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//#Time=/}"
@@ -669,21 +677,14 @@ else
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
     for dp in "${PW_AMOUNT_NO_TIME[@]}" "${PW_AMOUNT_WITH_TIME[@]}" ; do
-        PW_DESKTOP_FILES="${PW_ALL_DF[$dp]}"
-        if [[ -n ${PW_NAME_D_ICON[dp]} ]] ; then
-            PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]%.png}_48"
-            PW_NAME_D_ICON_128="${PW_ICON_PATH[dp]%.png}"
-            if check_flatpak ; then
-                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[dp]//flatpak run ru.linux_gaming.PortProton /}
-            else
-                PW_NAME_D_ICON_NEW=${PW_NAME_D_ICON[dp]//env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
-            fi
-            PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON_NEW//\"/}"
-            resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
-            resize_png "${PW_NAME_D_ICON_NEW}" "${PW_NAME_D_ICON_128//"${PORT_WINE_PATH}/data/img/"/}" "128"
-        fi
+        PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]%.png}_48"
+        PW_NAME_D_ICON_128="${PW_ICON_PATH[dp]%.png}"
+        PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON[dp]//\"/}"
+        resize_png "$PW_NAME_D_ICON_NEW" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
+        resize_png "$PW_NAME_D_ICON_NEW" "${PW_NAME_D_ICON_128//"${PORT_WINE_PATH}/data/img/"/}" "128"
 
-        PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES}"
+        PW_DESKTOP_FILES="${PW_ALL_DF[$dp]}"
+        PW_DESKTOP_FILES_SHOW="$PW_DESKTOP_FILES"
         if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then
             PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
             PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;)

From 3fa814b2392583399b53446acee53bcc0c9cc630 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 05:39:24 +0500
Subject: [PATCH 19/28] Added search_desktop_file and seconds_to_time functions

---
 data_from_portwine/scripts/functions_helper | 113 +++++++++++++-------
 data_from_portwine/scripts/start.sh         |  43 ++++----
 2 files changed, 97 insertions(+), 59 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 5b2f7523..c67060cf 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -774,7 +774,61 @@ debug_timer () {
             print_warning "It took $DIFF milliseconds"
         fi
     fi
-    return 0
+}
+
+search_desktop_file () {
+    # Поиск нужного .desktop файла по $portwine_exe, чтобы внести изменения в него.
+    for desktop_file in "${PORT_WINE_PATH}"/* ; do
+        if [[ $desktop_file =~ .desktop ]] ; then
+            if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
+                while IFS= read -r line ; do
+                    if [[ $line =~ ^Exec= ]] ; then
+                        if check_flatpak ; then
+                            EXEC_DESKTOP=${line//Exec=flatpak run ru.linux_gaming.PortProton /}
+                        else
+                            EXEC_DESKTOP=${line//Exec=env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
+                        fi
+                        EXEC_DESKTOP_NEW="${EXEC_DESKTOP//\"/}"
+                    fi
+
+                    if [[ $line =~ ^#Time= ]] ; then
+                        if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
+                            TIME_CURRENT=${line//#Time=/}
+                            if [[ ! $TIME_CURRENT =~ [0-9]+ ]] ; then
+                                TIME_CURRENT="0"
+                                sed -i '/^#Time=/d' "$desktop_file"
+                                echo "#Time=0" >> "$desktop_file"
+                            fi
+                        fi
+                    fi
+                done < "$desktop_file"
+                if [[ -n $PW_TIME_IN_GAME ]] ; then
+                    TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
+                    sed -i '/^#Time=/d' "$desktop_file"
+                    echo "#Time=$TIME_TOTAL" >> "$desktop_file"
+                fi
+            fi
+        fi
+    done
+    IFS="$orig_IFS"
+}
+
+seconds_to_time () {
+    [[ -z $1 ]] && return 1
+    local seconds=$1
+
+    local minutes=$((seconds / 60))
+    local hours=$((minutes / 60))
+    local days=$((hours / 24))
+
+    local remaining_minutes=$((minutes % 60))
+    local remaining_hours=$((hours % 24))
+
+    if [[ "$LANGUAGE" == ru ]] ; then
+        echo "\n$days дней, $remaining_hours часов и $remaining_minutes минут"
+    else
+        echo "\n$days days, $remaining_hours hours and $remaining_minutes minutes"
+    fi
 }
 
 combobox_fix () {
@@ -1320,43 +1374,14 @@ stop_portwine () {
     pw_auto_create_shortcut
     add_in_stop_portwine
 
+    # То что новый трей ругается на debug_timer и search_desktop_file, так и должно быть.
     debug_timer --end -s "PW_TIME_IN_GAME"
-    PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
+
     # В году 31536000 секунд.
     # Bash у меня ещё работает с таким числом 999999999999999999999999999999999999999999999999
+    PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
 
-    # Поиск нужного .desktop файла по $portwine_exe, чтобы внести изменения в него.
-    for desktop_file in "${PORT_WINE_PATH}"/* ; do
-        desktop_file_new="${desktop_file//"${PORT_WINE_PATH}/"/}"
-        if [[ $desktop_file_new =~ .desktop ]] ; then
-            if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
-                while IFS= read -r line ; do
-                    if [[ $line =~ ^Exec= ]] ; then
-                        if check_flatpak ; then
-                            EXEC_DESKTOP=${line//Exec=flatpak run ru.linux_gaming.PortProton /}
-                        else
-                            EXEC_DESKTOP=${line//Exec=env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
-                        fi
-                        EXEC_DESKTOP_NEW="${EXEC_DESKTOP//\"/}"
-                    fi
-                    if [[ $line =~ ^#Time= ]] ; then
-                        WITH_TIME="1"
-                        TIME_CURRENT=${line//#Time=/}
-                        TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
-                    fi
-                done < "$desktop_file"
-                if [[ $WITH_TIME != 1 ]] ; then
-                    echo "#Time=0" >> "$desktop_file"
-                fi
-                unset WITH_TIME
-                if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
-                    sed -i '/^#Time=/d' "$desktop_file"
-                    echo "#Time=$TIME_TOTAL" >> "$desktop_file"
-                fi
-            fi
-        fi
-    done
-    IFS="$orig_IFS"
+    search_desktop_file
 
     case "$1" in
         --restart)
@@ -5152,11 +5177,20 @@ gui_userconf () {
         GPU_VAR="disabled"
     fi
 
+    if [[ -n "${DESKTOPS_WITH_TIME}" ]] \
+    && [[ "${DESKTOPS_WITH_TIME}" != "disabled" ]]
+    then
+        DESKTOPS_WITH_TIME="${DESKTOPS_WITH_TIME}"
+    else
+        DESKTOPS_WITH_TIME="disabled"
+    fi
+
     "${pw_yad}" --plug=$KEY_USERCONF_GUI --tabnum="2" --form --columns=1 --separator="%" --homogeneous-row \
-    --gui-type-text="${PANED_GUI_TYPE_TEXT_DOWN}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_DOWN}" \
-    --field="${translations[Choose a graphics card to run the game]}!${translations[Select which video card will be used to run the game (used for all running games and programs in PortProton)]} :CB" "$(combobox_fix --disabled "${GPU_VAR}" "${GET_GPU_NAMES}")" \
-    --field="${translations[Choice wine audio driver]}!${translations[Fixes sound popling if choice alsa]} :CB" "$(combobox_fix --disabled "${SOUND_DRIVER_VAR}" "alsa!oss!pulse")" \
-    --field="${translations[Choice gui themes]}!${translations[Allows you to select a theme for PortProton]} :CB" "$(combobox_fix "${GUI_THEME}" "default!compact!classic")" \
+    --gui-type-text="$PANED_GUI_TYPE_TEXT_DOWN" --gui-type-layout="$PANED_GUI_TYPE_LAYOUT_DOWN" \
+    --field="${translations[Choose a graphics card to run the game]}!${translations[Select which video card will be used to run the game (used for all running games and programs in PortProton)]} :CB" "$(combobox_fix --disabled "$GPU_VAR" "$GET_GPU_NAMES")" \
+    --field="${translations[Choice wine audio driver]}!${translations[Fixes sound popling if choice alsa]} :CB" "$(combobox_fix --disabled "$SOUND_DRIVER_VAR" "alsa!oss!pulse")" \
+    --field="${translations[Choice gui themes]}!${translations[Allows you to select a theme for PortProton]} :CB" "$(combobox_fix "$GUI_THEME" "default!compact!classic")" \
+    --field="${translations[Time display]}!${translations[Displays time spent in an application or game]} :CB" "$(combobox_fix "$DESKTOPS_WITH_TIME" "enabled!disabled")" \
     1> "${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb" 2>/dev/null &
 
     "${pw_yad}" --key=$KEY_USERCONF_GUI --paned --sensitive \
@@ -5192,7 +5226,8 @@ gui_userconf () {
             PW_GPU_USE="${PW_ADD_SETTINGS_UC[0]}"
             PW_SOUND_DRIVER_USE="${PW_ADD_SETTINGS_UC[1]}"
             GUI_THEME="${PW_ADD_SETTINGS_UC[2]}"
-            edit_user_conf_from_gui PW_GPU_USE PW_SOUND_DRIVER_USE GUI_THEME
+            DESKTOPS_WITH_TIME="${PW_ADD_SETTINGS_UC[3]}"
+            edit_user_conf_from_gui PW_GPU_USE PW_SOUND_DRIVER_USE GUI_THEME DESKTOPS_WITH_TIME
             restart_pp
             ;;
     esac
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 6bfd0b96..7af73a27 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -464,14 +464,6 @@ case "${PW_VULKAN_USE}" in
     *) PW_DEFAULT_VULKAN_USE="$SORT_NEWEST!$SORT_STABLE!$SORT_LEGACY!$SORT_G_ZINK!$SORT_G_NINE!$SORT_OPENGL!$SORT_VULKAN" ;;
 esac
 
-if [[ -z "${PW_COMMENT_DB}" ]] ; then
-    if [[ -n "${PORTPROTON_NAME}" ]] ; then
-        PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")</b>"
-    else
-        PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")</b>"
-    fi
-fi
-
 if [[ $PW_WINE_USE == PROTON_LG ]] ; then
     PW_WINE_USE="${PW_PROTON_LG_VER}"
     PW_DEFAULT_WINE_USE="${PW_WINE_LG_VER}${DIST_ADD_TO_GUI}!GET-OTHER-WINE"
@@ -505,6 +497,17 @@ if [[ -f "${portwine_exe}" ]] ; then
             PW_SHORTCUT="${translations[DELETE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Delete shortcut for select file...]}:98"
         fi
 
+        if [[ $DESKTOPS_WITH_TIME == enabled ]] ; then
+            search_desktop_file
+        fi
+        if [[ -z "${PW_COMMENT_DB}" ]] ; then
+            if [[ -n "${PORTPROTON_NAME}" ]] ; then
+                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")$(seconds_to_time $TIME_CURRENT)</b>"
+            else
+                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")$(seconds_to_time $TIME_CURRENT)</b>"
+            fi
+        fi
+
         export KEY_START="$RANDOM"
         if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then
             "${pw_yad}" --plug=$KEY_START --tabnum=1 --form --separator=";" ${START_GUI_TYPE} \
@@ -583,18 +586,18 @@ if [[ -f "${portwine_exe}" ]] ; then
             --button="${translations[LAUNCH]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Run file ...]}":106 2>/dev/null
             PW_YAD_SET="$?"
         fi
-        [[ -n "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in
+        case $PW_YAD_SET in
             128)
-                    if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then
-                        unset PW_YAD_FORM_TAB
-                    fi
-                    unset portwine_exe KEY_START $(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g')
-                    print_info "Restarting..."
-                    restart_pp
-                    ;;
+                if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then
+                    unset PW_YAD_FORM_TAB
+                fi
+                unset portwine_exe KEY_START $(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g')
+                print_info "Restarting..."
+                restart_pp
+                ;;
             1|252)
-                    exit 0
-                    ;;
+                exit 0
+                ;;
         esac
         pw_yad_set_form
         pw_yad_form_vulkan
@@ -864,7 +867,7 @@ if [[ -f "${PORTWINE_DB_FILE}" ]] ; then
     edit_db_from_gui PW_VULKAN_USE PW_WINE_USE PW_PREFIX_NAME
 fi
 
-[[ -n "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in
+case $PW_YAD_SET in
     gui_pw_reinstall_pp|open_changelog|\
     128|gui_pw_update|gui_rm_portproton|\
     change_loc|gui_open_scripts_from_backup|\
@@ -894,7 +897,7 @@ fi
         ;;
 esac
 
-[[ -n "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in
+case $PW_YAD_SET in
     98) portwine_delete_shortcut ;;
     100) portwine_create_shortcut ;;
     DEBUG|102) portwine_start_debug ;;

From e8492d6f73c2198b2348c19bc4c98a0095565809 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 05:46:03 +0500
Subject: [PATCH 20/28] Update locales

---
 data_from_portwine/locales/PortProton.pot     |  73 +++-------
 .../locales/es/LC_MESSAGES/PortProton.po      | 125 +++++++++---------
 .../locales/ru/LC_MESSAGES/PortProton.po      | 122 +++++++++--------
 3 files changed, 149 insertions(+), 171 deletions(-)

diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot
index 95af4327..7679b26f 100644
--- a/data_from_portwine/locales/PortProton.pot
+++ b/data_from_portwine/locales/PortProton.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: PACKAGE VERSION\n"
         "Report-Msgid-Bugs-To: \n"
-        "POT-Creation-Date: 2024-09-24 13:23+0300\n"
+        "POT-Creation-Date: 2024-10-07 05:41+0500\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
         "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -47,9 +47,6 @@ msgstr  ""
 msgid   "Gallium Zink (OpenGL to Vulkan)"
 msgstr  ""
 
-msgid   "Launching"
-msgstr  ""
-
 msgid   "CREATE SHORTCUT"
 msgstr  ""
 
@@ -62,6 +59,9 @@ msgstr  ""
 msgid   "Delete shortcut for select file..."
 msgstr  ""
 
+msgid   "Launching"
+msgstr  ""
+
 msgid   "Base settings"
 msgstr  ""
 
@@ -194,49 +194,6 @@ msgstr  ""
 msgid   "Run wine regedit"
 msgstr  ""
 
-msgid   "Emulator for Nintendo game consoles with high compatibility"
-msgstr  ""
-
-msgid   "Multi-arcade emulator that allows you to play old arcade games"
-msgstr  ""
-
-msgid   "Multi-platform frontend for emulators with extensive settings"
-msgstr  ""
-
-msgid   "Emulator for the PlayStation Portable (PSP) game console"
-msgstr  ""
-
-msgid   "Emulator for the Nintendo 3DS game console"
-msgstr  ""
-
-msgid   "Emulator for the Wii U game console"
-msgstr  ""
-
-msgid   "Emulator for the PlayStation 1 game console with high compatibility"
-msgstr  ""
-
-msgid   "Emulator for the Nintendo 64 game console"
-msgstr  ""
-
-msgid   "Emulator for the Game Boy Advance game console"
-msgstr  ""
-
-msgid   "Emulator for the Sega Saturn game console"
-msgstr  ""
-
-msgid   "Emulator for the Xbox 360 game console"
-msgstr  ""
-
-msgid   "Emulator for the Nintendo Entertainment System (NES or Dendy) game "
-        "console"
-msgstr  ""
-
-msgid   "Emulator for the Xbox game console"
-msgstr  ""
-
-msgid   "Emulator for the Sega Dreamcast game console"
-msgstr  ""
-
 msgid   "AUTOINSTALLS"
 msgstr  ""
 
@@ -282,9 +239,6 @@ msgid   "More than one DB file found for the application being launched."
         "next run.\\n"
 msgstr  ""
 
-msgid   "UPDATING NOW"
-msgstr  ""
-
 msgid   "Update scripts:"
 msgstr  ""
 
@@ -294,6 +248,9 @@ msgstr  ""
 msgid   "REMIND ME LATER"
 msgstr  ""
 
+msgid   "UPDATING NOW"
+msgstr  ""
+
 msgid   "EXIT"
 msgstr  ""
 
@@ -881,6 +838,9 @@ msgstr  ""
 msgid   "Display frame count"
 msgstr  ""
 
+msgid   "Display frametime next to FPS text"
+msgstr  ""
+
 msgid   "Enable most of the toggleable parameters (currently excludes "
         "histogram)"
 msgstr  ""
@@ -985,9 +945,6 @@ msgstr  ""
 msgid   "Display used Vulkan driver (radv/amdgpu-pro/amdvlk)"
 msgstr  ""
 
-msgid   "Display frametime next to FPS text"
-msgstr  ""
-
 msgid   "Show current Wine or Proton version in use"
 msgstr  ""
 
@@ -1407,6 +1364,12 @@ msgstr  ""
 msgid   "Allows you to select a theme for PortProton"
 msgstr  ""
 
+msgid   "Time display"
+msgstr  ""
+
+msgid   "Displays time spent in an application or game"
+msgstr  ""
+
 msgid   "GLOBAL SETTINGS (USER.CONF)"
 msgstr  ""
 
@@ -1573,8 +1536,8 @@ msgid   "MIT License\n"
         "\n"
         "Permission is hereby granted, free of charge, to any person "
         "obtaining a copy\n"
-        "of this software and associated documentation files (the \"Software"
-        "\"), to deal\n"
+        "of this software and associated documentation files (the "
+        "\"Software\"), to deal\n"
         "in the Software without restriction, including without limitation "
         "the rights\n"
         "to use, copy, modify, merge, publish, distribute, sublicense, and/or "
diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
index 75fce4f2..1a566e50 100644
--- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-09-24 13:23+0300\n"
+"POT-Creation-Date: 2024-10-07 05:31+0500\n"
 "PO-Revision-Date: 2024-09-19 23:35+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -52,9 +52,6 @@ msgstr "Gallium Nine (DirectX 9 para MESA)"
 msgid "Gallium Zink (OpenGL to Vulkan)"
 msgstr "Gallium Zink (OpenGL a Vulkan)"
 
-msgid "Launching"
-msgstr "Lanzamiento"
-
 msgid "CREATE SHORTCUT"
 msgstr "CREAR ACCESO DIRECTO"
 
@@ -67,6 +64,9 @@ msgstr "ELIMINAR ACCESO DIRECTO"
 msgid "Delete shortcut for select file..."
 msgstr "Eliminar el acceso directo del archivo seleccionado..."
 
+msgid "Launching"
+msgstr "Lanzamiento"
+
 msgid "Base settings"
 msgstr "Configuración básica"
 
@@ -212,55 +212,6 @@ msgstr "Editor del Registro"
 msgid "Run wine regedit"
 msgstr "Ejecutar wine regedit"
 
-msgid "Emulator for Nintendo game consoles with high compatibility"
-msgstr ""
-"Un emulador para consolas de juegos de Nintendo con alta compatibilidad"
-
-msgid "Multi-arcade emulator that allows you to play old arcade games"
-msgstr ""
-"Un emulador de múltiples arcade que te permite jugar juegos antiguos de "
-"arcade"
-
-msgid "Multi-platform frontend for emulators with extensive settings"
-msgstr "Un frontend multiplataforma para emuladores con ajustes extensos"
-
-msgid "Emulator for the PlayStation Portable (PSP) game console"
-msgstr "Un emulador para la consola de juegos PlayStation Portable (PSP)"
-
-msgid "Emulator for the Nintendo 3DS game console"
-msgstr "Un emulador para la consola de juegos Nintendo 3DS"
-
-msgid "Emulator for the Wii U game console"
-msgstr "Un emulador para la consola de juegos Wii U"
-
-msgid "Emulator for the PlayStation 1 game console with high compatibility"
-msgstr ""
-"Un emulador para la consola de juegos PlayStation 1 con alta compatibilidad"
-
-msgid "Emulator for the Nintendo 64 game console"
-msgstr "Un emulador para la consola de juegos Nintendo 64"
-
-msgid "Emulator for the Game Boy Advance game console"
-msgstr "Un emulador para la consola de juegos Game Boy Advance"
-
-msgid "Emulator for the Sega Saturn game console"
-msgstr "Un emulador para la consola de juegos Sega Saturn"
-
-msgid "Emulator for the Xbox 360 game console"
-msgstr "Un emulador para la consola de juegos Xbox 360"
-
-msgid ""
-"Emulator for the Nintendo Entertainment System (NES or Dendy) game console"
-msgstr ""
-"Un emulador para la consola de juegos Nintendo Entertainment System (NES o "
-"Dendy)"
-
-msgid "Emulator for the Xbox game console"
-msgstr "Un emulador para la consola de juegos Xbox"
-
-msgid "Emulator for the Sega Dreamcast game console"
-msgstr "Un emulador para la consola de juegos Sega Dreamcast"
-
 msgid "AUTOINSTALLS"
 msgstr "INSTALACIONES AUTOMÁTICAS"
 
@@ -317,9 +268,6 @@ msgstr ""
 "está iniciando. Selecciona el que se requiera, o elimina el archivo de base "
 "de datos adicional antes del próximo inicio"
 
-msgid "UPDATING NOW"
-msgstr "ACTUALIZANDO AHORA"
-
 msgid "Update scripts:"
 msgstr "Actualizar scripts:"
 
@@ -329,6 +277,9 @@ msgstr "NO SOCIO"
 msgid "REMIND ME LATER"
 msgstr "VUELVA MÁS TARDE"
 
+msgid "UPDATING NOW"
+msgstr "ACTUALIZANDO AHORA"
+
 msgid "EXIT"
 msgstr "SALIR"
 
@@ -1085,6 +1036,9 @@ msgstr ""
 msgid "Display frame count"
 msgstr "Mostrar recuento de cuadros"
 
+msgid "Display frametime next to FPS text"
+msgstr "Mostrar tiempo de cuadro junto al texto de FPS"
+
 msgid "Enable most of the toggleable parameters (currently excludes histogram)"
 msgstr ""
 "Activar la mayoría de los parámetros conmutables (actualmente excluye el "
@@ -1204,9 +1158,6 @@ msgstr "Mostrar el uso de VRAM del sistema"
 msgid "Display used Vulkan driver (radv/amdgpu-pro/amdvlk)"
 msgstr "Mostrar el controlador Vulkan utilizado (radv/amdgpu-pro/amdvlk)"
 
-msgid "Display frametime next to FPS text"
-msgstr "Mostrar tiempo de cuadro junto al texto de FPS"
-
 msgid "Show current Wine or Proton version in use"
 msgstr "Mostrar la versión actual de Wine o Proton en uso"
 
@@ -1847,6 +1798,12 @@ msgstr "Temas de interfaz gráfica de usuario elegidos"
 msgid "Allows you to select a theme for PortProton"
 msgstr "Le permite seleccionar un tema para PortProton"
 
+msgid "Time display"
+msgstr ""
+
+msgid "Displays time spent in an application or game"
+msgstr ""
+
 #, fuzzy
 msgid "GLOBAL SETTINGS (USER.CONF)"
 msgstr "AJUSTES USUARIO.CONF"
@@ -2119,6 +2076,56 @@ msgstr ""
 msgid "THIRD PARTY LIBRARIES"
 msgstr ""
 
+#~ msgid "Emulator for Nintendo game consoles with high compatibility"
+#~ msgstr ""
+#~ "Un emulador para consolas de juegos de Nintendo con alta compatibilidad"
+
+#~ msgid "Multi-arcade emulator that allows you to play old arcade games"
+#~ msgstr ""
+#~ "Un emulador de múltiples arcade que te permite jugar juegos antiguos de "
+#~ "arcade"
+
+#~ msgid "Multi-platform frontend for emulators with extensive settings"
+#~ msgstr "Un frontend multiplataforma para emuladores con ajustes extensos"
+
+#~ msgid "Emulator for the PlayStation Portable (PSP) game console"
+#~ msgstr "Un emulador para la consola de juegos PlayStation Portable (PSP)"
+
+#~ msgid "Emulator for the Nintendo 3DS game console"
+#~ msgstr "Un emulador para la consola de juegos Nintendo 3DS"
+
+#~ msgid "Emulator for the Wii U game console"
+#~ msgstr "Un emulador para la consola de juegos Wii U"
+
+#~ msgid "Emulator for the PlayStation 1 game console with high compatibility"
+#~ msgstr ""
+#~ "Un emulador para la consola de juegos PlayStation 1 con alta "
+#~ "compatibilidad"
+
+#~ msgid "Emulator for the Nintendo 64 game console"
+#~ msgstr "Un emulador para la consola de juegos Nintendo 64"
+
+#~ msgid "Emulator for the Game Boy Advance game console"
+#~ msgstr "Un emulador para la consola de juegos Game Boy Advance"
+
+#~ msgid "Emulator for the Sega Saturn game console"
+#~ msgstr "Un emulador para la consola de juegos Sega Saturn"
+
+#~ msgid "Emulator for the Xbox 360 game console"
+#~ msgstr "Un emulador para la consola de juegos Xbox 360"
+
+#~ msgid ""
+#~ "Emulator for the Nintendo Entertainment System (NES or Dendy) game console"
+#~ msgstr ""
+#~ "Un emulador para la consola de juegos Nintendo Entertainment System (NES "
+#~ "o Dendy)"
+
+#~ msgid "Emulator for the Xbox game console"
+#~ msgstr "Un emulador para la consola de juegos Xbox"
+
+#~ msgid "Emulator for the Sega Dreamcast game console"
+#~ msgstr "Un emulador para la consola de juegos Sega Dreamcast"
+
 #, fuzzy
 #~ msgid "scripts"
 #~ msgstr "Actualizar scripts:"
diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
index 3f0d9288..4c3bc7a4 100644
--- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-09-24 13:23+0300\n"
-"PO-Revision-Date: 2024-09-19 23:32+0500\n"
+"POT-Creation-Date: 2024-10-07 05:31+0500\n"
+"PO-Revision-Date: 2024-10-07 05:41+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: ru_RU\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
 "X-Generator: Poedit 3.4.4\n"
 
 msgid ""
@@ -52,9 +52,6 @@ msgstr "Gallium Nine (поддержка DirectX 9 для MESA)"
 msgid "Gallium Zink (OpenGL to Vulkan)"
 msgstr "Gallium Zink (трансляция OpenGL в Vulkan)"
 
-msgid "Launching"
-msgstr "Запуск"
-
 msgid "CREATE SHORTCUT"
 msgstr "СОЗДАТЬ ЯРЛЫК"
 
@@ -67,6 +64,9 @@ msgstr "УДАЛИТЬ ЯРЛЫК"
 msgid "Delete shortcut for select file..."
 msgstr "Удалить ярлык для выбранного файла..."
 
+msgid "Launching"
+msgstr "Запуск"
+
 msgid "Base settings"
 msgstr "Основные настройки"
 
@@ -214,49 +214,6 @@ msgstr "Редактор реестра"
 msgid "Run wine regedit"
 msgstr "Запустить редактор реестра Wine"
 
-msgid "Emulator for Nintendo game consoles with high compatibility"
-msgstr "Эмулятор игровых консолей Nintendo с высокой совместимостью"
-
-msgid "Multi-arcade emulator that allows you to play old arcade games"
-msgstr "Мультиаркадный эмулятор, позволяющий играть в старые аркадные игры"
-
-msgid "Multi-platform frontend for emulators with extensive settings"
-msgstr "Мультиплатформенный интерфейс для эмуляторов с обширными настройками"
-
-msgid "Emulator for the PlayStation Portable (PSP) game console"
-msgstr "Эмулятор игровой консоли PlayStation Portable (PSP)"
-
-msgid "Emulator for the Nintendo 3DS game console"
-msgstr "Эмулятор игровой консоли Nintendo 3DS"
-
-msgid "Emulator for the Wii U game console"
-msgstr "Эмулятор игровой консоли Wii U"
-
-msgid "Emulator for the PlayStation 1 game console with high compatibility"
-msgstr "Эмулятор игровой консоли PlayStation 1 с высокой совместимостью"
-
-msgid "Emulator for the Nintendo 64 game console"
-msgstr "Эмулятор игровой консоли Nintendo 64"
-
-msgid "Emulator for the Game Boy Advance game console"
-msgstr "Эмулятор игровой консоли Game Boy Advance"
-
-msgid "Emulator for the Sega Saturn game console"
-msgstr "Эмулятор игровой консоли Sega Saturn"
-
-msgid "Emulator for the Xbox 360 game console"
-msgstr "Эмулятор игровой консоли Xbox 360"
-
-msgid ""
-"Emulator for the Nintendo Entertainment System (NES or Dendy) game console"
-msgstr "Эмулятор игровой консоли Nintendo Entertainment System (NES или Dendy)"
-
-msgid "Emulator for the Xbox game console"
-msgstr "Эмулятор игровой консоли Xbox"
-
-msgid "Emulator for the Sega Dreamcast game console"
-msgstr "Эмулятор игровой консоли Sega Dreamcast"
-
 msgid "AUTOINSTALLS"
 msgstr "АВТОУСТАНОВКА"
 
@@ -312,10 +269,6 @@ msgstr ""
 "ppdb.\\nВыберите нужный или удалите лишний файл .ppdb перед следующим "
 "запуском\\n"
 
-# изменить
-msgid "UPDATING NOW"
-msgstr "ОБНОВИТЬ СЕЙЧАС"
-
 msgid "Update scripts:"
 msgstr "Обновление скриптов:"
 
@@ -325,6 +278,10 @@ msgstr "НЕ НАПОМИНАТЬ"
 msgid "REMIND ME LATER"
 msgstr "НАПОМНИТЬ ПОЗЖЕ"
 
+# изменить
+msgid "UPDATING NOW"
+msgstr "ОБНОВИТЬ СЕЙЧАС"
+
 msgid "EXIT"
 msgstr "ВЫХОД"
 
@@ -1090,6 +1047,9 @@ msgstr ""
 msgid "Display frame count"
 msgstr "Отображение количества кадров"
 
+msgid "Display frametime next to FPS text"
+msgstr "Отображение времени кадра рядом с FPS"
+
 msgid "Enable most of the toggleable parameters (currently excludes histogram)"
 msgstr ""
 "Включить большинство переключаемых параметров (в настоящее время исключает "
@@ -1213,9 +1173,6 @@ msgstr "Показать использование VRAM"
 msgid "Display used Vulkan driver (radv/amdgpu-pro/amdvlk)"
 msgstr "Показать используемый драйвер Vulkan (radv/amdgpu-pro/amdvlk)"
 
-msgid "Display frametime next to FPS text"
-msgstr "Отображение времени кадра рядом с FPS"
-
 msgid "Show current Wine or Proton version in use"
 msgstr "Показать текущую используемую версию Wine или Proton"
 
@@ -1815,6 +1772,12 @@ msgstr "Выбор графической темы"
 msgid "Allows you to select a theme for PortProton"
 msgstr "Позволяет выбрать тему для PortProton"
 
+msgid "Time display"
+msgstr "Отображение времени"
+
+msgid "Displays time spent in an application or game"
+msgstr "Отображает общее время проведённое в приложении или игре"
+
 #, fuzzy
 msgid "GLOBAL SETTINGS (USER.CONF)"
 msgstr "ГЛОБАЛЬНЫЕ НАСТРОЙКИ (USER.CONF)"
@@ -2146,6 +2109,51 @@ msgstr "ПРИСОЕДЕНИТЬСЯ"
 msgid "THIRD PARTY LIBRARIES"
 msgstr "БИБЛИОТЕКИ"
 
+#~ msgid "Emulator for Nintendo game consoles with high compatibility"
+#~ msgstr "Эмулятор игровых консолей Nintendo с высокой совместимостью"
+
+#~ msgid "Multi-arcade emulator that allows you to play old arcade games"
+#~ msgstr "Мультиаркадный эмулятор, позволяющий играть в старые аркадные игры"
+
+#~ msgid "Multi-platform frontend for emulators with extensive settings"
+#~ msgstr ""
+#~ "Мультиплатформенный интерфейс для эмуляторов с обширными настройками"
+
+#~ msgid "Emulator for the PlayStation Portable (PSP) game console"
+#~ msgstr "Эмулятор игровой консоли PlayStation Portable (PSP)"
+
+#~ msgid "Emulator for the Nintendo 3DS game console"
+#~ msgstr "Эмулятор игровой консоли Nintendo 3DS"
+
+#~ msgid "Emulator for the Wii U game console"
+#~ msgstr "Эмулятор игровой консоли Wii U"
+
+#~ msgid "Emulator for the PlayStation 1 game console with high compatibility"
+#~ msgstr "Эмулятор игровой консоли PlayStation 1 с высокой совместимостью"
+
+#~ msgid "Emulator for the Nintendo 64 game console"
+#~ msgstr "Эмулятор игровой консоли Nintendo 64"
+
+#~ msgid "Emulator for the Game Boy Advance game console"
+#~ msgstr "Эмулятор игровой консоли Game Boy Advance"
+
+#~ msgid "Emulator for the Sega Saturn game console"
+#~ msgstr "Эмулятор игровой консоли Sega Saturn"
+
+#~ msgid "Emulator for the Xbox 360 game console"
+#~ msgstr "Эмулятор игровой консоли Xbox 360"
+
+#~ msgid ""
+#~ "Emulator for the Nintendo Entertainment System (NES or Dendy) game console"
+#~ msgstr ""
+#~ "Эмулятор игровой консоли Nintendo Entertainment System (NES или Dendy)"
+
+#~ msgid "Emulator for the Xbox game console"
+#~ msgstr "Эмулятор игровой консоли Xbox"
+
+#~ msgid "Emulator for the Sega Dreamcast game console"
+#~ msgstr "Эмулятор игровой консоли Sega Dreamcast"
+
 #~ msgid "scripts"
 #~ msgstr "версия"
 

From 0b963639b735b5849b613f0aa7be1db111eb12e6 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 07:20:05 +0500
Subject: [PATCH 21/28] Update display time function

---
 data_from_portwine/locales/PortProton.pot     | 26 ++++++++++++-
 .../locales/es/LC_MESSAGES/PortProton.po      | 26 ++++++++++++-
 .../locales/ru/LC_MESSAGES/PortProton.po      | 28 +++++++++++++-
 data_from_portwine/scripts/functions_helper   | 38 +++++++++++++++++--
 data_from_portwine/scripts/start.sh           |  2 +
 5 files changed, 112 insertions(+), 8 deletions(-)

diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot
index 7679b26f..ab6490ff 100644
--- a/data_from_portwine/locales/PortProton.pot
+++ b/data_from_portwine/locales/PortProton.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: PACKAGE VERSION\n"
         "Report-Msgid-Bugs-To: \n"
-        "POT-Creation-Date: 2024-10-07 05:41+0500\n"
+        "POT-Creation-Date: 2024-10-07 07:15+0500\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
         "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -224,6 +224,30 @@ msgstr  ""
 msgid   "Downloading"
 msgstr  ""
 
+msgid   "day"
+msgstr  ""
+
+msgid   "days"
+msgstr  ""
+
+msgid   "hour"
+msgstr  ""
+
+msgid   "and"
+msgstr  ""
+
+msgid   "hours"
+msgstr  ""
+
+msgid   "minute"
+msgstr  ""
+
+msgid   "minutes"
+msgstr  ""
+
+msgid   "Time spent"
+msgstr  ""
+
 msgid   "Do you really want to reinstall PortProton?\\nFor this, an internet "
         "connection will be required."
 msgstr  ""
diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
index 1a566e50..4c4fbfaf 100644
--- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 05:31+0500\n"
+"POT-Creation-Date: 2024-10-07 07:15+0500\n"
 "PO-Revision-Date: 2024-09-19 23:35+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -247,6 +247,30 @@ msgstr ""
 msgid "Downloading"
 msgstr "Descargando"
 
+msgid "day"
+msgstr ""
+
+msgid "days"
+msgstr ""
+
+msgid "hour"
+msgstr ""
+
+msgid "and"
+msgstr ""
+
+msgid "hours"
+msgstr ""
+
+msgid "minute"
+msgstr ""
+
+msgid "minutes"
+msgstr ""
+
+msgid "Time spent"
+msgstr ""
+
 msgid ""
 "Do you really want to reinstall PortProton?\\nFor this, an internet "
 "connection will be required."
diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
index 4c3bc7a4..09ac0ae7 100644
--- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 05:31+0500\n"
-"PO-Revision-Date: 2024-10-07 05:41+0500\n"
+"POT-Creation-Date: 2024-10-07 07:15+0500\n"
+"PO-Revision-Date: 2024-10-07 07:16+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: ru_RU\n"
@@ -248,6 +248,30 @@ msgstr ""
 msgid "Downloading"
 msgstr "Загружается"
 
+msgid "day"
+msgstr "день"
+
+msgid "days"
+msgstr "дней"
+
+msgid "hour"
+msgstr "час"
+
+msgid "and"
+msgstr "и"
+
+msgid "hours"
+msgstr "часов"
+
+msgid "minute"
+msgstr "минута"
+
+msgid "minutes"
+msgstr "минут"
+
+msgid "Time spent"
+msgstr "Проведено времени"
+
 msgid ""
 "Do you really want to reinstall PortProton?\\nFor this, an internet "
 "connection will be required."
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index c67060cf..b3bf2783 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -820,15 +820,45 @@ seconds_to_time () {
     local minutes=$((seconds / 60))
     local hours=$((minutes / 60))
     local days=$((hours / 24))
-
     local remaining_minutes=$((minutes % 60))
     local remaining_hours=$((hours % 24))
 
-    if [[ "$LANGUAGE" == ru ]] ; then
-        echo "\n$days дней, $remaining_hours часов и $remaining_minutes минут"
+    if [[ $days =~ ^0$ ]] ; then
+        local remaining_days=
+    elif [[ $days =~ ^1$ ]] ; then
+        local remaining_days="$days ${translations[day]}, "
+    elif [[ $days =~ ^([2-9]1|[1-9][0-9]+1)$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local remaining_days="$days ${translations[day]}, "
+    elif [[ $days =~ ^(2|3|4|[2-9]2|[2-9]3|[2-9]4|[1-9][0-9]+2|[1-9][0-9]+3|[1-9][0-9]+4)$ ]] \
+    && [[ $LANGUAGE = ru ]] ; then
+        local remaining_days="$days дня, "
     else
-        echo "\n$days days, $remaining_hours hours and $remaining_minutes minutes"
+        local remaining_days="$days ${translations[days]}, "
     fi
+
+    if [[ $remaining_hours =~ ^0$ ]] ; then
+        local remaining_hours=
+    elif [[ $remaining_hours =~ ^1$ ]] ; then
+        local remaining_hours="$hours ${translations[hour]} ${translations[and]} "
+    elif [[ $remaining_hours =~ ^(2|3|4|22|23|24)$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local remaining_hours="$hours часа ${translations[and]} "
+    elif [[ $remaining_hours =~ ^21$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local remaining_hours="$hours час ${translations[and]} "
+    else
+        local remaining_hours="$hours ${translations[hours]} ${translations[and]} "
+    fi
+
+    if [[ $remaining_minutes =~ ^1$ ]] ; then
+        local remaining_minutes="$remaining_minutes ${translations[minute]}"
+    elif [[ $remaining_minutes =~ ^[2-5]1$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local remaining_minutes="$remaining_minutes ${translations[minute]}"
+    elif [[ $remaining_minutes =~ ^(2|3|4|[2-5]2|[2-5]3|[2-5]4)$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local remaining_minutes="$remaining_minutes минуты"
+    else
+        local remaining_minutes="$remaining_minutes ${translations[minutes]}"
+    fi
+
+    echo "\n${translations[Time spent]}: $remaining_days$remaining_hours$remaining_minutes"
 }
 
 combobox_fix () {
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 7af73a27..6110b13b 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -506,6 +506,8 @@ if [[ -f "${portwine_exe}" ]] ; then
             else
                 PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")$(seconds_to_time $TIME_CURRENT)</b>"
             fi
+        else
+            PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time $TIME_CURRENT)"
         fi
 
         export KEY_START="$RANDOM"

From 8eb41a0118d749ae5e6c30a32020f4d46dc1630b Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 07:43:13 +0500
Subject: [PATCH 22/28] Fixes bugs ..

---
 data_from_portwine/scripts/functions_helper | 87 ++++++++++++---------
 data_from_portwine/scripts/start.sh         |  9 +--
 2 files changed, 51 insertions(+), 45 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index b3bf2783..bd22e569 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -779,8 +779,9 @@ debug_timer () {
 search_desktop_file () {
     # Поиск нужного .desktop файла по $portwine_exe, чтобы внести изменения в него.
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
-        if [[ $desktop_file =~ .desktop ]] ; then
-            if [[ ! $desktop_file =~ (/PortProton|/readme) ]] ; then
+        desktop_file_new="${desktop_file//"${PORT_WINE_PATH}/"/}"
+        if [[ $desktop_file_new =~ .desktop ]] ; then
+            if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
                     if [[ $line =~ ^Exec= ]] ; then
                         if check_flatpak ; then
@@ -794,18 +795,20 @@ search_desktop_file () {
                     if [[ $line =~ ^#Time= ]] ; then
                         if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
                             TIME_CURRENT=${line//#Time=/}
-                            if [[ ! $TIME_CURRENT =~ [0-9]+ ]] ; then
-                                TIME_CURRENT="0"
-                                sed -i '/^#Time=/d' "$desktop_file"
-                                echo "#Time=0" >> "$desktop_file"
-                            fi
                         fi
                     fi
                 done < "$desktop_file"
-                if [[ -n $PW_TIME_IN_GAME ]] ; then
-                    TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
-                    sed -i '/^#Time=/d' "$desktop_file"
-                    echo "#Time=$TIME_TOTAL" >> "$desktop_file"
+                if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
+                    if [[ ! $TIME_CURRENT =~ [0-9]+ ]] ; then
+                        TIME_CURRENT="0"
+                        sed -i '/^#Time=/d' "$desktop_file"
+                        echo "#Time=0" >> "$desktop_file"
+                    fi
+                    if [[ -n $PW_TIME_IN_GAME ]] ; then
+                        TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
+                        sed -i '/^#Time=/d' "$desktop_file"
+                        echo "#Time=$TIME_TOTAL" >> "$desktop_file"
+                    fi
                 fi
             fi
         fi
@@ -814,51 +817,57 @@ search_desktop_file () {
 }
 
 seconds_to_time () {
-    [[ -z $1 ]] && return 1
+    [[ -z $1 ]] && return 0
     local seconds=$1
 
+    # Calculate days
+    local days=$((seconds / (60 * 60 * 24)))
+    local seconds=$((seconds % (60 * 60 * 24)))
+
+    # Calculate hours
+    local hours=$((seconds / (60 * 60)))
+    local seconds=$((seconds % (60 * 60)))
+
+    # Calculate minutes
     local minutes=$((seconds / 60))
-    local hours=$((minutes / 60))
-    local days=$((hours / 24))
-    local remaining_minutes=$((minutes % 60))
-    local remaining_hours=$((hours % 24))
+    local seconds=$((seconds % 60))
 
     if [[ $days =~ ^0$ ]] ; then
-        local remaining_days=
+        local days=
     elif [[ $days =~ ^1$ ]] ; then
-        local remaining_days="$days ${translations[day]}, "
+        local days="$days ${translations[day]}, "
     elif [[ $days =~ ^([2-9]1|[1-9][0-9]+1)$ ]] && [[ $LANGUAGE = ru ]] ; then
-        local remaining_days="$days ${translations[day]}, "
-    elif [[ $days =~ ^(2|3|4|[2-9]2|[2-9]3|[2-9]4|[1-9][0-9]+2|[1-9][0-9]+3|[1-9][0-9]+4)$ ]] \
+        local days="$days ${translations[day]}, "
+    elif [[ $days =~ ^([2-4]|[2-9][2-4]|[1-9][0-9]+[2-4])$ ]] \
     && [[ $LANGUAGE = ru ]] ; then
-        local remaining_days="$days дня, "
+        local days="$days дня, "
     else
-        local remaining_days="$days ${translations[days]}, "
+        local days="$days ${translations[days]}, "
     fi
 
-    if [[ $remaining_hours =~ ^0$ ]] ; then
-        local remaining_hours=
-    elif [[ $remaining_hours =~ ^1$ ]] ; then
-        local remaining_hours="$hours ${translations[hour]} ${translations[and]} "
-    elif [[ $remaining_hours =~ ^(2|3|4|22|23|24)$ ]] && [[ $LANGUAGE = ru ]] ; then
-        local remaining_hours="$hours часа ${translations[and]} "
-    elif [[ $remaining_hours =~ ^21$ ]] && [[ $LANGUAGE = ru ]] ; then
-        local remaining_hours="$hours час ${translations[and]} "
+    if [[ $hours =~ ^0$ ]] ; then
+        local hours=
+    elif [[ $hours =~ ^1$ ]] ; then
+        local hours="$hours ${translations[hour]} ${translations[and]} "
+    elif [[ $hours =~ ^([2-4]|2[2-4])$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local hours="$hours часа ${translations[and]} "
+    elif [[ $hours =~ ^21$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local hours="$hours ${translations[hour]} ${translations[and]} "
     else
-        local remaining_hours="$hours ${translations[hours]} ${translations[and]} "
+        local hours="$hours ${translations[hours]} ${translations[and]} "
     fi
 
-    if [[ $remaining_minutes =~ ^1$ ]] ; then
-        local remaining_minutes="$remaining_minutes ${translations[minute]}"
-    elif [[ $remaining_minutes =~ ^[2-5]1$ ]] && [[ $LANGUAGE = ru ]] ; then
-        local remaining_minutes="$remaining_minutes ${translations[minute]}"
-    elif [[ $remaining_minutes =~ ^(2|3|4|[2-5]2|[2-5]3|[2-5]4)$ ]] && [[ $LANGUAGE = ru ]] ; then
-        local remaining_minutes="$remaining_minutes минуты"
+    if [[ $minutes =~ ^1$ ]] ; then
+        local minutes="$minutes ${translations[minute]}"
+    elif [[ $minutes =~ ^[2-5]1$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local minutes="$minutes ${translations[minute]}"
+    elif [[ $minutes =~ ^([2-4]|[2-5][2-4])$ ]] && [[ $LANGUAGE = ru ]] ; then
+        local minutes="$minutes минуты"
     else
-        local remaining_minutes="$remaining_minutes ${translations[minutes]}"
+        local minutes="$minutes ${translations[minutes]}"
     fi
 
-    echo "\n${translations[Time spent]}: $remaining_days$remaining_hours$remaining_minutes"
+    echo -e "<b>\n${translations[Time spent]}: $days$hours$minutes</b>"
 }
 
 combobox_fix () {
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 6110b13b..2d3fa0c4 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -502,12 +502,12 @@ if [[ -f "${portwine_exe}" ]] ; then
         fi
         if [[ -z "${PW_COMMENT_DB}" ]] ; then
             if [[ -n "${PORTPROTON_NAME}" ]] ; then
-                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")$(seconds_to_time $TIME_CURRENT)</b>"
+                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")$(seconds_to_time "$TIME_CURRENT")</b>"
             else
-                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")$(seconds_to_time $TIME_CURRENT)</b>"
+                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")$(seconds_to_time "$TIME_CURRENT")</b>"
             fi
         else
-            PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time $TIME_CURRENT)"
+            PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time "$TIME_CURRENT")"
         fi
 
         export KEY_START="$RANDOM"
@@ -612,8 +612,6 @@ else
         gui_userconf
     fi
 
-    debug_timer --start # дропнуть и debug_timer --end ниже тоже
-
     # Поиск .desktop файлов
     AMOUNT_GENERATE_BUTTONS="0"
     for desktop_file in "${PORT_WINE_PATH}"/* ; do
@@ -806,7 +804,6 @@ else
 
         export AI_SKIP="1"
     fi
-    debug_timer --end
 
     IFS="%"
     "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[1]}" --form --columns="$MAIN_GUI_ROWS_EMULS" --align-buttons --scroll --homogeneous-column \

From ef9161c13a8a68d63f861855ce2cc256f1b1d3aa Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 11:16:31 +0500
Subject: [PATCH 23/28] Added if minutes =~ 0

---
 data_from_portwine/locales/PortProton.pot     |  5 +++-
 .../locales/es/LC_MESSAGES/PortProton.po      |  5 +++-
 .../locales/ru/LC_MESSAGES/PortProton.po      |  7 ++++--
 data_from_portwine/scripts/functions_helper   | 23 +++++++++++++------
 4 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot
index ab6490ff..c5d56999 100644
--- a/data_from_portwine/locales/PortProton.pot
+++ b/data_from_portwine/locales/PortProton.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: PACKAGE VERSION\n"
         "Report-Msgid-Bugs-To: \n"
-        "POT-Creation-Date: 2024-10-07 07:15+0500\n"
+        "POT-Creation-Date: 2024-10-07 11:18+0500\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
         "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -239,6 +239,9 @@ msgstr  ""
 msgid   "hours"
 msgstr  ""
 
+msgid   "not known yet"
+msgstr  ""
+
 msgid   "minute"
 msgstr  ""
 
diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
index 4c4fbfaf..c8691e73 100644
--- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 07:15+0500\n"
+"POT-Creation-Date: 2024-10-07 10:51+0500\n"
 "PO-Revision-Date: 2024-09-19 23:35+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -262,6 +262,9 @@ msgstr ""
 msgid "hours"
 msgstr ""
 
+msgid "not known yet"
+msgstr ""
+
 msgid "minute"
 msgstr ""
 
diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
index 09ac0ae7..99087bf0 100644
--- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 07:15+0500\n"
-"PO-Revision-Date: 2024-10-07 07:16+0500\n"
+"POT-Creation-Date: 2024-10-07 10:51+0500\n"
+"PO-Revision-Date: 2024-10-07 11:18+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: ru_RU\n"
@@ -263,6 +263,9 @@ msgstr "и"
 msgid "hours"
 msgstr "часов"
 
+msgid "not known yet"
+msgstr "пока неизвестно"
+
 msgid "minute"
 msgstr "минута"
 
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index bd22e569..5c52a536 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -836,10 +836,10 @@ seconds_to_time () {
         local days=
     elif [[ $days =~ ^1$ ]] ; then
         local days="$days ${translations[day]}, "
-    elif [[ $days =~ ^([2-9]1|[1-9][0-9]+1)$ ]] && [[ $LANGUAGE = ru ]] ; then
+    elif [[ $days =~ ^([2-9]1|[1-9][0-9]+1)$ ]] && [[ $LANGUAGE == ru ]] ; then
         local days="$days ${translations[day]}, "
     elif [[ $days =~ ^([2-4]|[2-9][2-4]|[1-9][0-9]+[2-4])$ ]] \
-    && [[ $LANGUAGE = ru ]] ; then
+    && [[ $LANGUAGE == ru ]] ; then
         local days="$days дня, "
     else
         local days="$days ${translations[days]}, "
@@ -849,19 +849,28 @@ seconds_to_time () {
         local hours=
     elif [[ $hours =~ ^1$ ]] ; then
         local hours="$hours ${translations[hour]} ${translations[and]} "
-    elif [[ $hours =~ ^([2-4]|2[2-4])$ ]] && [[ $LANGUAGE = ru ]] ; then
+    elif [[ $hours =~ ^([2-4]|2[2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
         local hours="$hours часа ${translations[and]} "
-    elif [[ $hours =~ ^21$ ]] && [[ $LANGUAGE = ru ]] ; then
+    elif [[ $hours =~ ^21$ ]] && [[ $LANGUAGE == ru ]] ; then
         local hours="$hours ${translations[hour]} ${translations[and]} "
     else
         local hours="$hours ${translations[hours]} ${translations[and]} "
     fi
 
-    if [[ $minutes =~ ^1$ ]] ; then
+    if [[ $minutes =~ ^0$ ]] ; then
+        local hours=${hours//" ${translations[and]} "/}
+        local minutes=
+        if [[ $days == "" ]] || [[ $hours == "" ]] ; then
+            local days=${days//","/}
+        fi
+        if [[ $days == "" ]] && [[ $hours == "" ]] ; then
+            local minutes="${translations[not known yet]}"
+        fi
+    elif [[ $minutes =~ ^1$ ]] ; then
         local minutes="$minutes ${translations[minute]}"
-    elif [[ $minutes =~ ^[2-5]1$ ]] && [[ $LANGUAGE = ru ]] ; then
+    elif [[ $minutes =~ ^[2-5]1$ ]] && [[ $LANGUAGE == ru ]] ; then
         local minutes="$minutes ${translations[minute]}"
-    elif [[ $minutes =~ ^([2-4]|[2-5][2-4])$ ]] && [[ $LANGUAGE = ru ]] ; then
+    elif [[ $minutes =~ ^([2-4]|[2-5][2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
         local minutes="$minutes минуты"
     else
         local minutes="$minutes ${translations[minutes]}"

From f7a5e591b0172dd31941ab6658d531d8475640ea Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 15:59:05 +0500
Subject: [PATCH 24/28] Added SORT_WITH_TIME and fixes spellcheck

---
 data_from_portwine/locales/PortProton.pot     |  9 +++-
 .../locales/es/LC_MESSAGES/PortProton.po      | 10 ++++-
 .../locales/ru/LC_MESSAGES/PortProton.po      | 14 +++++-
 data_from_portwine/scripts/functions_helper   | 41 +++++++++++------
 data_from_portwine/scripts/start.sh           | 44 +++++++++++--------
 5 files changed, 82 insertions(+), 36 deletions(-)

diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot
index c5d56999..950a7d59 100644
--- a/data_from_portwine/locales/PortProton.pot
+++ b/data_from_portwine/locales/PortProton.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: PACKAGE VERSION\n"
         "Report-Msgid-Bugs-To: \n"
-        "POT-Creation-Date: 2024-10-07 11:18+0500\n"
+        "POT-Creation-Date: 2024-10-07 15:49+0500\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
         "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1397,6 +1397,13 @@ msgstr  ""
 msgid   "Displays time spent in an application or game"
 msgstr  ""
 
+msgid   "Sort shortcuts by time"
+msgstr  ""
+
+msgid   "This setting sorts the shortcuts in the main menu depending on the "
+        "time spent in the application or game"
+msgstr  ""
+
 msgid   "GLOBAL SETTINGS (USER.CONF)"
 msgstr  ""
 
diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
index c8691e73..3a0c3860 100644
--- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 10:51+0500\n"
+"POT-Creation-Date: 2024-10-07 15:49+0500\n"
 "PO-Revision-Date: 2024-09-19 23:35+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -1831,6 +1831,14 @@ msgstr ""
 msgid "Displays time spent in an application or game"
 msgstr ""
 
+msgid "Sort shortcuts by time"
+msgstr ""
+
+msgid ""
+"This setting sorts the shortcuts in the main menu depending on the time "
+"spent in the application or game"
+msgstr ""
+
 #, fuzzy
 msgid "GLOBAL SETTINGS (USER.CONF)"
 msgstr "AJUSTES USUARIO.CONF"
diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
index 99087bf0..6dac269d 100644
--- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 10:51+0500\n"
-"PO-Revision-Date: 2024-10-07 11:18+0500\n"
+"POT-Creation-Date: 2024-10-07 15:49+0500\n"
+"PO-Revision-Date: 2024-10-07 15:52+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: ru_RU\n"
@@ -1805,6 +1805,16 @@ msgstr "Отображение времени"
 msgid "Displays time spent in an application or game"
 msgstr "Отображает общее время проведённое в приложении или игре"
 
+msgid "Sort shortcuts by time"
+msgstr "Сортировка ярлыков по времени"
+
+msgid ""
+"This setting sorts the shortcuts in the main menu depending on the time "
+"spent in the application or game"
+msgstr ""
+"Эта настройка сортирует ярлыки в главном меню в зависимости от времени, "
+"проведенного в приложении или игре"
+
 #, fuzzy
 msgid "GLOBAL SETTINGS (USER.CONF)"
 msgstr "ГЛОБАЛЬНЫЕ НАСТРОЙКИ (USER.CONF)"
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 5c52a536..f9113f38 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -5225,12 +5225,20 @@ gui_userconf () {
         GPU_VAR="disabled"
     fi
 
-    if [[ -n "${DESKTOPS_WITH_TIME}" ]] \
-    && [[ "${DESKTOPS_WITH_TIME}" != "disabled" ]]
+    if [[ -n "${DESKTOP_WITH_TIME}" ]] \
+    && [[ "${DESKTOP_WITH_TIME}" != "disabled" ]]
     then
-        DESKTOPS_WITH_TIME="${DESKTOPS_WITH_TIME}"
+        DESKTOP_WITH_TIME="enabled"
     else
-        DESKTOPS_WITH_TIME="disabled"
+        DESKTOP_WITH_TIME="disabled"
+    fi
+
+    if [[ -n "${SORT_WITH_TIME}" ]] \
+    && [[ "${SORT_WITH_TIME}" == "disabled" ]]
+    then
+        SORT_WITH_TIME="disabled"
+    else
+        SORT_WITH_TIME="enabled"
     fi
 
     "${pw_yad}" --plug=$KEY_USERCONF_GUI --tabnum="2" --form --columns=1 --separator="%" --homogeneous-row \
@@ -5238,7 +5246,8 @@ gui_userconf () {
     --field="${translations[Choose a graphics card to run the game]}!${translations[Select which video card will be used to run the game (used for all running games and programs in PortProton)]} :CB" "$(combobox_fix --disabled "$GPU_VAR" "$GET_GPU_NAMES")" \
     --field="${translations[Choice wine audio driver]}!${translations[Fixes sound popling if choice alsa]} :CB" "$(combobox_fix --disabled "$SOUND_DRIVER_VAR" "alsa!oss!pulse")" \
     --field="${translations[Choice gui themes]}!${translations[Allows you to select a theme for PortProton]} :CB" "$(combobox_fix "$GUI_THEME" "default!compact!classic")" \
-    --field="${translations[Time display]}!${translations[Displays time spent in an application or game]} :CB" "$(combobox_fix "$DESKTOPS_WITH_TIME" "enabled!disabled")" \
+    --field="${translations[Time display]}!${translations[Displays time spent in an application or game]} :CB" "$(combobox_fix "$DESKTOP_WITH_TIME" "enabled!disabled")" \
+    --field="${translations[Sort shortcuts by time]}!${translations[This setting sorts the shortcuts in the main menu depending on the time spent in the application or game]} :CB" "$(combobox_fix "$SORT_WITH_TIME" "enabled!disabled")" \
     1> "${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb" 2>/dev/null &
 
     "${pw_yad}" --key=$KEY_USERCONF_GUI --paned --sensitive \
@@ -5271,11 +5280,12 @@ gui_userconf () {
         166)
             IFS='%' read -r -a PW_ADD_SETTINGS_UC <"${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb"
             IFS="$orig_IFS"
-            PW_GPU_USE="${PW_ADD_SETTINGS_UC[0]}"
-            PW_SOUND_DRIVER_USE="${PW_ADD_SETTINGS_UC[1]}"
+            PW_GPU_USE=${PW_ADD_SETTINGS_UC[0]}
+            PW_SOUND_DRIVER_USE=${PW_ADD_SETTINGS_UC[1]}
             GUI_THEME="${PW_ADD_SETTINGS_UC[2]}"
-            DESKTOPS_WITH_TIME="${PW_ADD_SETTINGS_UC[3]}"
-            edit_user_conf_from_gui PW_GPU_USE PW_SOUND_DRIVER_USE GUI_THEME DESKTOPS_WITH_TIME
+            DESKTOP_WITH_TIME="${PW_ADD_SETTINGS_UC[3]}"
+            SORT_WITH_TIME="${PW_ADD_SETTINGS_UC[4]}"
+            edit_user_conf_from_gui PW_GPU_USE PW_SOUND_DRIVER_USE GUI_THEME DESKTOP_WITH_TIME SORT_WITH_TIME
             restart_pp
             ;;
     esac
@@ -5349,10 +5359,11 @@ portwine_create_shortcut () {
     [[ -z "${PW_SHORTCUT_STEAM}" ]] && PW_SHORTCUT_STEAM="FALSE"
 
     if [[ -z "${PORTPROTON_NAME}" ]] ; then
-        export name_desktop="$(basename "$portwine_exe")"
+        name_desktop="$(basename "$portwine_exe")"
     else
-        export name_desktop="${PORTPROTON_NAME}"
+        name_desktop="${PORTPROTON_NAME}"
     fi
+    export name_desktop
 
     [[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}"
 
@@ -5503,8 +5514,12 @@ pw_auto_create_shortcut () {
             continue
         fi
     done
-    [[ -z "$LINKS" ]] && return 0
-    SORTED_LINKS=($(echo ${LINKS[@]} | tr ' ' '\n' | sort -u))
+    [[ -z "${LINKS[0]}" ]] && return 0
+    SORTED_LINKS=()
+    while IFS= read -r line ; do
+        SORTED_LINKS+=("$line");
+    done < <(echo ${LINKS[@]} | tr ' ' '\n' | sort -u) 
+    IFS="$orig_IFS"
 
     for link_file in "${SORTED_LINKS[@]//@_@/ }" ; do
         if command -v exiftool &>/dev/null ; then
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 2d3fa0c4..13ef446b 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -497,7 +497,7 @@ if [[ -f "${portwine_exe}" ]] ; then
             PW_SHORTCUT="${translations[DELETE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Delete shortcut for select file...]}:98"
         fi
 
-        if [[ $DESKTOPS_WITH_TIME == enabled ]] ; then
+        if [[ $DESKTOP_WITH_TIME == enabled ]] ; then
             search_desktop_file
         fi
         if [[ -z "${PW_COMMENT_DB}" ]] ; then
@@ -638,7 +638,11 @@ else
                 # Чтобы новый ярлык показало первым при первом запуске, потом уже по времени
                 if [[ $WITH_TIME != 1 ]] ; then
                     echo "#Time=0" >> "$desktop_file"
-                    PW_AMOUNT_NO_TIME+=($AMOUNT_GENERATE_BUTTONS)
+                    if [[ $SORT_WITH_TIME == enabled ]] ; then
+                        PW_AMOUNT_NO_TIME+=($AMOUNT_GENERATE_BUTTONS)
+                    else
+                        PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)
+                    fi
                 else
                     if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] ; then
                         sed -i '/^#Time=/d' "$desktop_file"
@@ -655,26 +659,28 @@ else
 
     # Переопределение элементов в массивах в зависимости от PW_GAME_TIME, от большего значения к меньшему.
     # 10 миллисекунд на 40 .desktop файлов, работает быстро
-    for i in "${!PW_GAME_TIME[@]}" ; do
-        for j in "${!PW_GAME_TIME[@]}" ; do
-            if (( ${PW_GAME_TIME[$i]} > ${PW_GAME_TIME[$j]} )) ; then
-                tmp_0=${PW_GAME_TIME[$i]}
-                tmp_1=${PW_ALL_DF[$i]}
-                tmp_2=${PW_NAME_D_ICON[$i]}
-                tmp_4=${PW_ICON_PATH[$i]}
+    if [[ $SORT_WITH_TIME == enabled ]] ; then
+        for i in "${!PW_GAME_TIME[@]}" ; do
+            for j in "${!PW_GAME_TIME[@]}" ; do
+                if (( ${PW_GAME_TIME[$i]} > ${PW_GAME_TIME[$j]} )) ; then
+                    tmp_0=${PW_GAME_TIME[$i]}
+                    tmp_1=${PW_ALL_DF[$i]}
+                    tmp_2=${PW_NAME_D_ICON[$i]}
+                    tmp_4=${PW_ICON_PATH[$i]}
 
-                PW_GAME_TIME[i]=${PW_GAME_TIME[$j]}
-                PW_ALL_DF[i]=${PW_ALL_DF[$j]}
-                PW_NAME_D_ICON[i]=${PW_NAME_D_ICON[$j]}
-                PW_ICON_PATH[i]=${PW_ICON_PATH[$j]}
+                    PW_GAME_TIME[i]=${PW_GAME_TIME[$j]}
+                    PW_ALL_DF[i]=${PW_ALL_DF[$j]}
+                    PW_NAME_D_ICON[i]=${PW_NAME_D_ICON[$j]}
+                    PW_ICON_PATH[i]=${PW_ICON_PATH[$j]}
 
-                PW_GAME_TIME[j]=$tmp_0
-                PW_ALL_DF[j]=$tmp_1
-                PW_NAME_D_ICON[j]=$tmp_2
-                PW_ICON_PATH[j]=$tmp_4
-            fi
+                    PW_GAME_TIME[j]=$tmp_0
+                    PW_ALL_DF[j]=$tmp_1
+                    PW_NAME_D_ICON[j]=$tmp_2
+                    PW_ICON_PATH[j]=$tmp_4
+                fi
+            done
         done
-    done
+    fi
 
     # Генерация .desktop баттанов для главного меню
     IFS=$'\n'

From f70ccc402c05d73aa847c3fc4bae83f1128d4781 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 16:05:45 +0500
Subject: [PATCH 25/28] Update themes and scripts

---
 data_from_portwine/scripts/functions_helper | 36 ++++++++++-----------
 data_from_portwine/scripts/start.sh         | 16 ++++-----
 data_from_portwine/themes/compact.pptheme   |  2 +-
 data_from_portwine/themes/default.pptheme   |  2 +-
 4 files changed, 25 insertions(+), 31 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index f9113f38..8aced369 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -776,10 +776,10 @@ debug_timer () {
     fi
 }
 
+# Поиск нужного .desktop файла по $portwine_exe
 search_desktop_file () {
-    # Поиск нужного .desktop файла по $portwine_exe, чтобы внести изменения в него.
-    for desktop_file in "${PORT_WINE_PATH}"/* ; do
-        desktop_file_new="${desktop_file//"${PORT_WINE_PATH}/"/}"
+    for desktop_file in "$PORT_WINE_PATH"/* ; do
+        desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
         if [[ $desktop_file_new =~ .desktop ]] ; then
             if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
@@ -787,7 +787,7 @@ search_desktop_file () {
                         if check_flatpak ; then
                             EXEC_DESKTOP=${line//Exec=flatpak run ru.linux_gaming.PortProton /}
                         else
-                            EXEC_DESKTOP=${line//Exec=env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
+                            EXEC_DESKTOP=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
                         fi
                         EXEC_DESKTOP_NEW="${EXEC_DESKTOP//\"/}"
                     fi
@@ -816,19 +816,17 @@ search_desktop_file () {
     IFS="$orig_IFS"
 }
 
+# Конвертация секунд в дни, часы, минуты
 seconds_to_time () {
     [[ -z $1 ]] && return 0
     local seconds=$1
 
-    # Calculate days
     local days=$((seconds / (60 * 60 * 24)))
     local seconds=$((seconds % (60 * 60 * 24)))
 
-    # Calculate hours
     local hours=$((seconds / (60 * 60)))
     local seconds=$((seconds % (60 * 60)))
 
-    # Calculate minutes
     local minutes=$((seconds / 60))
     local seconds=$((seconds % 60))
 
@@ -889,27 +887,27 @@ combobox_fix () {
                 echo "disabled"
                 return 0
             fi
-            name1="$2"
-            name2="$3"
+            local name1="$2"
+            local name2="$3"
         elif [[ "$1" == "--empty" ]] ; then
             if [[ -z "$3" ]] ; then
                 echo ""
                 return 0
             fi
-            name1="$2"
-            name2="$3"
+            local name1="$2"
+            local name2="$3"
         else
-            name1="$1"
+            local name1="$1"
             if [[ -z "$2" ]] ; then
                 echo "${name1}"
                 return 0
             fi
-            name2="$2"
+            local name2="$2"
         fi
-        name3="${name2//\!${name1}\!/\!}"
-        name3="!${name3//${name1}\!/\!}"
-        name3="${name3//\!\!/\!}"
-        name4="${name3//*\!/}"
+        local name3="${name2//\!${name1}\!/\!}"
+        local name3="!${name3//${name1}\!/\!}"
+        local name3="${name3//\!\!/\!}"
+        local name4="${name3//*\!/}"
         if [[ ${name1} == "${name4}" ]] || [[ ${name1} == "\\${name4}" ]]
         then name3="${name3%\!"${name1}"}"
         fi
@@ -5280,8 +5278,8 @@ gui_userconf () {
         166)
             IFS='%' read -r -a PW_ADD_SETTINGS_UC <"${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb"
             IFS="$orig_IFS"
-            PW_GPU_USE=${PW_ADD_SETTINGS_UC[0]}
-            PW_SOUND_DRIVER_USE=${PW_ADD_SETTINGS_UC[1]}
+            PW_GPU_USE="${PW_ADD_SETTINGS_UC[0]}"
+            PW_SOUND_DRIVER_USE="${PW_ADD_SETTINGS_UC[1]}"
             GUI_THEME="${PW_ADD_SETTINGS_UC[2]}"
             DESKTOP_WITH_TIME="${PW_ADD_SETTINGS_UC[3]}"
             SORT_WITH_TIME="${PW_ADD_SETTINGS_UC[4]}"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 13ef446b..045eec2c 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -497,9 +497,7 @@ if [[ -f "${portwine_exe}" ]] ; then
             PW_SHORTCUT="${translations[DELETE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Delete shortcut for select file...]}:98"
         fi
 
-        if [[ $DESKTOP_WITH_TIME == enabled ]] ; then
-            search_desktop_file
-        fi
+        [[ $DESKTOP_WITH_TIME == enabled ]] && search_desktop_file
         if [[ -z "${PW_COMMENT_DB}" ]] ; then
             if [[ -n "${PORTPROTON_NAME}" ]] ; then
                 PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")$(seconds_to_time "$TIME_CURRENT")</b>"
@@ -590,9 +588,7 @@ if [[ -f "${portwine_exe}" ]] ; then
         fi
         case $PW_YAD_SET in
             128)
-                if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then
-                    unset PW_YAD_FORM_TAB
-                fi
+                [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
                 unset portwine_exe KEY_START $(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g')
                 print_info "Restarting..."
                 restart_pp
@@ -603,7 +599,7 @@ if [[ -f "${portwine_exe}" ]] ; then
         esac
         pw_yad_set_form
         pw_yad_form_vulkan
-    elif [[ -f "${PORTWINE_DB_FILE}" ]] ; then
+    elif [[ -f "$PORTWINE_DB_FILE" ]] ; then
         portwine_launch
     fi
 else
@@ -614,8 +610,8 @@ else
 
     # Поиск .desktop файлов
     AMOUNT_GENERATE_BUTTONS="0"
-    for desktop_file in "${PORT_WINE_PATH}"/* ; do
-        desktop_file_new="${desktop_file//"${PORT_WINE_PATH}/"/}"
+    for desktop_file in "$PORT_WINE_PATH"/* ; do
+        desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
         if [[ $desktop_file_new =~ .desktop ]] ; then
             if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
@@ -623,7 +619,7 @@ else
                         if check_flatpak ; then
                             PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=flatpak run ru.linux_gaming.PortProton /}
                         else
-                            PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=env \"${PORT_SCRIPTS_PATH}\/start.sh\" /}
+                            PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
                         fi
                     fi
                     if [[ $line =~ ^Icon= ]] ; then
diff --git a/data_from_portwine/themes/compact.pptheme b/data_from_portwine/themes/compact.pptheme
index 30a1a606..a6996c41 100755
--- a/data_from_portwine/themes/compact.pptheme
+++ b/data_from_portwine/themes/compact.pptheme
@@ -23,7 +23,7 @@ export BUTTON_SIZE=32 # 24, 28, 32, 36, 40
 
 export TAB_SIZE=32 # 24, 28, 32, 36, 40
 
-export PW_MAIN_SIZE_W=500
+export PW_MAIN_SIZE_W=1000
 export PW_MAIN_SIZE_H=350
 
 export PW_START_SIZE_W=500
diff --git a/data_from_portwine/themes/default.pptheme b/data_from_portwine/themes/default.pptheme
index d22ca3b9..07964bbb 100755
--- a/data_from_portwine/themes/default.pptheme
+++ b/data_from_portwine/themes/default.pptheme
@@ -31,7 +31,7 @@ export BUTTON_SIZE=28 # 24, 28, 32, 36, 40
 export TAB_SIZE=32 # 24, 28, 32, 36, 40
 
 # размер главного меню
-export PW_MAIN_SIZE_W=500
+export PW_MAIN_SIZE_W=1000
 export PW_MAIN_SIZE_H=330
 
 # размер меню запуска и положения табов

From 11dff46137def08a441996af8000b6b95c87fb30 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 19:56:39 +0500
Subject: [PATCH 26/28] Dropped PW_NO_RESTART_PPDB=1

---
 data_from_portwine/scripts/functions_helper | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 8aced369..da2a69bf 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -5478,16 +5478,12 @@ portwine_create_shortcut () {
 
         if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then
             print_info "Restarting PP..."
-            if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then
-                unset PW_YAD_FORM_TAB
-            fi
+            [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
             restart_pp
         fi
     elif [[ "$PW_YAD_OUT" == "2" ]] ; then
         print_info "Restarting PP..."
-        if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then
-            unset PW_YAD_FORM_TAB
-        fi
+        [[ "${PW_GUI_START}" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
         restart_pp
     fi
 }
@@ -5566,7 +5562,6 @@ pw_auto_create_shortcut () {
             PORTPROTON_NAME="$link_name"
             export portwine_exe="$exe_path"
             resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
-            export PW_NO_RESTART_PPDB=1
             portwine_create_shortcut
         fi
     done

From 38e880d3afc94ff02223eb61a9c23e64b6949db6 Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Mon, 7 Oct 2024 20:10:23 +0500
Subject: [PATCH 27/28] Fixes

---
 data_from_portwine/locales/PortProton.pot     |   4 +-
 .../locales/es/LC_MESSAGES/PortProton.po      |   4 +-
 .../locales/ru/LC_MESSAGES/PortProton.po      |  15 +-
 data_from_portwine/scripts/functions_helper   | 161 +++++++++++-------
 data_from_portwine/scripts/start.sh           |  69 ++++----
 data_from_portwine/themes/tray/tray_gui_pp    | Bin 155248 -> 155248 bytes
 6 files changed, 143 insertions(+), 110 deletions(-)

diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot
index 950a7d59..3fbb167d 100644
--- a/data_from_portwine/locales/PortProton.pot
+++ b/data_from_portwine/locales/PortProton.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: PACKAGE VERSION\n"
         "Report-Msgid-Bugs-To: \n"
-        "POT-Creation-Date: 2024-10-07 15:49+0500\n"
+        "POT-Creation-Date: 2024-10-08 10:20+0500\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
         "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -239,7 +239,7 @@ msgstr  ""
 msgid   "hours"
 msgstr  ""
 
-msgid   "not known yet"
+msgid   "less than a minute"
 msgstr  ""
 
 msgid   "minute"
diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
index 3a0c3860..bf9f7384 100644
--- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 15:49+0500\n"
+"POT-Creation-Date: 2024-10-08 10:15+0500\n"
 "PO-Revision-Date: 2024-09-19 23:35+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -262,7 +262,7 @@ msgstr ""
 msgid "hours"
 msgstr ""
 
-msgid "not known yet"
+msgid "less than a minute"
 msgstr ""
 
 msgid "minute"
diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
index 6dac269d..2a24f6e8 100644
--- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
+++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-07 15:49+0500\n"
-"PO-Revision-Date: 2024-10-07 15:52+0500\n"
+"POT-Creation-Date: 2024-10-08 10:15+0500\n"
+"PO-Revision-Date: 2024-10-08 10:15+0500\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language: ru_RU\n"
@@ -73,7 +73,6 @@ msgstr "Основные настройки"
 msgid "Edit database file for"
 msgstr "Редактировать файл настроек для"
 
-#, fuzzy
 msgid "Global settings"
 msgstr "Глобальные настройки"
 
@@ -152,7 +151,6 @@ msgstr "История изменений"
 msgid "Change language"
 msgstr "Сменить язык"
 
-#, fuzzy
 msgid "Global settings (user.conf)"
 msgstr "Глобальные настройки (user.conf)"
 
@@ -263,8 +261,8 @@ msgstr "и"
 msgid "hours"
 msgstr "часов"
 
-msgid "not known yet"
-msgstr "пока неизвестно"
+msgid "less than a minute"
+msgstr "меньше минуты"
 
 msgid "minute"
 msgstr "минута"
@@ -1730,7 +1728,6 @@ msgstr "Выключить"
 msgid "Enable"
 msgstr "Включить"
 
-#, fuzzy
 msgid "Change global settings"
 msgstr "Изменить глобальные настройки"
 
@@ -1815,7 +1812,6 @@ msgstr ""
 "Эта настройка сортирует ярлыки в главном меню в зависимости от времени, "
 "проведенного в приложении или игре"
 
-#, fuzzy
 msgid "GLOBAL SETTINGS (USER.CONF)"
 msgstr "ГЛОБАЛЬНЫЕ НАСТРОЙКИ (USER.CONF)"
 
@@ -2146,6 +2142,9 @@ msgstr "ПРИСОЕДЕНИТЬСЯ"
 msgid "THIRD PARTY LIBRARIES"
 msgstr "БИБЛИОТЕКИ"
 
+#~ msgid "not known yet"
+#~ msgstr "пока неизвестно"
+
 #~ msgid "Emulator for Nintendo game consoles with high compatibility"
 #~ msgstr "Эмулятор игровых консолей Nintendo с высокой совместимостью"
 
diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index da2a69bf..35bdc77f 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -186,6 +186,7 @@ eval_translations () {
 }
 
 create_translations () {
+    local po_file msgid msgstr
     if [[ ! -d "${PW_CACHE_LANG_PATH}" ]] ; then
         create_new_dir "${PW_CACHE_LANG_PATH}"
     fi
@@ -456,12 +457,13 @@ try_download () {
                 no_mirror=true
     esac
 
+    local filename
     if [[ -n "${PW_AUTOINSTALL_EXE}" ]] \
     && [[ "$no_mirror" == "true" ]]
     then
-        local filename="$(basename "${PW_AUTOINSTALL_EXE}")"
+        filename="$(basename "${PW_AUTOINSTALL_EXE}")"
     else
-        local filename="$(basename "$1")"
+        filename="$(basename "$1")"
     fi
 
     if [[ "${MIRROR}" == CLOUD ]] \
@@ -778,6 +780,9 @@ debug_timer () {
 
 # Поиск нужного .desktop файла по $portwine_exe
 search_desktop_file () {
+    local count desktop_file desktop_file_new EXEC_DESKTOP EXEC_DESKTOP_NEW TIME_TOTAL i j df
+    unset TIME_CURRENT_ARRAY DESKTOP_FILES_ARRAY
+    count=0
     for desktop_file in "$PORT_WINE_PATH"/* ; do
         desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
         if [[ $desktop_file_new =~ .desktop ]] ; then
@@ -789,89 +794,117 @@ search_desktop_file () {
                         else
                             EXEC_DESKTOP=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
                         fi
-                        EXEC_DESKTOP_NEW="${EXEC_DESKTOP//\"/}"
+                        EXEC_DESKTOP_NEW=${EXEC_DESKTOP//\"/}
                     fi
-
-                    if [[ $line =~ ^#Time= ]] ; then
-                        if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
-                            TIME_CURRENT=${line//#Time=/}
-                        fi
+                    if [[ $line =~ ^#Time= ]] && [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
+                        TIME_CURRENT=${line//#Time=/}
                     fi
                 done < "$desktop_file"
                 if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
-                    if [[ ! $TIME_CURRENT =~ [0-9]+ ]] ; then
+                    # Когда новый .desktop файл
+                    if [[ $TIME_CURRENT == "" ]] ; then
+                        echo "#NEW_DESKTOP" >> "$desktop_file"
+                        TIME_CURRENT="0"
+                    # Для битых #Time=
+                    elif [[ ! $TIME_CURRENT == "" ]] && [[ ! $TIME_CURRENT =~ [0-9]+ ]] ; then
                         TIME_CURRENT="0"
-                        sed -i '/^#Time=/d' "$desktop_file"
-                        echo "#Time=0" >> "$desktop_file"
-                    fi
-                    if [[ -n $PW_TIME_IN_GAME ]] ; then
-                        TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
-                        sed -i '/^#Time=/d' "$desktop_file"
-                        echo "#Time=$TIME_TOTAL" >> "$desktop_file"
                     fi
+                    TIME_CURRENT_ARRAY+=($TIME_CURRENT)
+                    unset TIME_CURRENT
+                    DESKTOP_FILES_ARRAY["$count"]="$desktop_file"
+                    (( count++ ))
                 fi
             fi
         fi
     done
     IFS="$orig_IFS"
+
+    # Если существуют .desktop файлы на один и тот же .exe файл, то среди них выбирается
+    # текущее время берётся из того .desktop файла, в котором проведено больше времени
+    # и запись этого большего времени будет потом записываться во все .desktop файлы
+    # у которых общий .exe файл, это нужно для того, чтобы в главном меню .desktop файлы
+    # упорядочивались нормально.
+    for i in "${!TIME_CURRENT_ARRAY[@]}" ; do
+        for j in "${!TIME_CURRENT_ARRAY[@]}" ; do
+            if (( ${TIME_CURRENT_ARRAY[$i]} > ${TIME_CURRENT_ARRAY[$j]} )) ; then
+                tmp=${TIME_CURRENT_ARRAY[$i]}
+                TIME_CURRENT_ARRAY[i]=${TIME_CURRENT_ARRAY[$j]}
+                TIME_CURRENT_ARRAY[j]=$tmp
+            fi
+        done
+    done
+
+    TIME_CURRENT="${TIME_CURRENT_ARRAY[0]}"
+    if [[ -n $PW_TIME_IN_GAME ]] ; then
+        TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
+        for df in "${DESKTOP_FILES_ARRAY[@]}" ; do
+            sed -i '/^#Time=/d' "$df"
+            echo "#Time=$TIME_TOTAL" >> "$df"
+        done
+    else
+        for df in "${DESKTOP_FILES_ARRAY[@]}" ; do
+            sed -i '/^#Time=/d' "$df"
+            echo "#Time=$TIME_CURRENT" >> "$df"
+        done
+    fi
 }
 
 # Конвертация секунд в дни, часы, минуты
 seconds_to_time () {
     [[ -z $1 ]] && return 0
-    local seconds=$1
+    local seconds days hours minutes
+    seconds=$1
 
-    local days=$((seconds / (60 * 60 * 24)))
-    local seconds=$((seconds % (60 * 60 * 24)))
+    days=$((seconds / (60 * 60 * 24)))
+    seconds=$((seconds % (60 * 60 * 24)))
 
-    local hours=$((seconds / (60 * 60)))
-    local seconds=$((seconds % (60 * 60)))
+    hours=$((seconds / (60 * 60)))
+    seconds=$((seconds % (60 * 60)))
 
-    local minutes=$((seconds / 60))
-    local seconds=$((seconds % 60))
+    minutes=$((seconds / 60))
+    seconds=$((seconds % 60))
 
     if [[ $days =~ ^0$ ]] ; then
-        local days=
+        days=
     elif [[ $days =~ ^1$ ]] ; then
-        local days="$days ${translations[day]}, "
+        days="$days ${translations[day]}, "
     elif [[ $days =~ ^([2-9]1|[1-9][0-9]+1)$ ]] && [[ $LANGUAGE == ru ]] ; then
-        local days="$days ${translations[day]}, "
-    elif [[ $days =~ ^([2-4]|[2-9][2-4]|[1-9][0-9]+[2-4])$ ]] \
-    && [[ $LANGUAGE == ru ]] ; then
-        local days="$days дня, "
+        days="$days ${translations[day]}, "
+    elif [[ $days =~ ^([2-4]|[2-9][2-4]|[1-9][0-9]+[2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
+        days="$days дня, "
     else
-        local days="$days ${translations[days]}, "
+        days="$days ${translations[days]}, "
     fi
 
     if [[ $hours =~ ^0$ ]] ; then
-        local hours=
+        hours=
     elif [[ $hours =~ ^1$ ]] ; then
-        local hours="$hours ${translations[hour]} ${translations[and]} "
+        hours="$hours ${translations[hour]} ${translations[and]} "
     elif [[ $hours =~ ^([2-4]|2[2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
-        local hours="$hours часа ${translations[and]} "
+        hours="$hours часа ${translations[and]} "
     elif [[ $hours =~ ^21$ ]] && [[ $LANGUAGE == ru ]] ; then
-        local hours="$hours ${translations[hour]} ${translations[and]} "
+        hours="$hours ${translations[hour]} ${translations[and]} "
     else
-        local hours="$hours ${translations[hours]} ${translations[and]} "
+        hours="$hours ${translations[hours]} ${translations[and]} "
     fi
 
     if [[ $minutes =~ ^0$ ]] ; then
-        local hours=${hours//" ${translations[and]} "/}
-        local minutes=
+        hours=${hours//" ${translations[and]} "/}
+        minutes=
         if [[ $days == "" ]] || [[ $hours == "" ]] ; then
-            local days=${days//","/}
+            days=${days//","/}
         fi
         if [[ $days == "" ]] && [[ $hours == "" ]] ; then
-            local minutes="${translations[not known yet]}"
+            minutes="${translations[less than a minute]}"
         fi
     elif [[ $minutes =~ ^1$ ]] ; then
-        local minutes="$minutes ${translations[minute]}"
+        minutes="$minutes ${translations[minute]}"
     elif [[ $minutes =~ ^[2-5]1$ ]] && [[ $LANGUAGE == ru ]] ; then
-        local minutes="$minutes ${translations[minute]}"
+        minutes="$minutes ${translations[minute]}"
     elif [[ $minutes =~ ^([2-4]|[2-5][2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
-        local minutes="$minutes минуты"
+        minutes="$minutes минуты"
     else
-        local minutes="$minutes ${translations[minutes]}"
+        minutes="$minutes ${translations[minutes]}"
     fi
 
     echo -e "<b>\n${translations[Time spent]}: $days$hours$minutes</b>"
@@ -882,32 +915,34 @@ combobox_fix () {
         print_error "no argument specified for combobox_fix"
         return 1
     else
+        local name1 name2
         if [[ "$1" == "--disabled" ]] ; then
             if [[ -z "$3" ]] ; then
                 echo "disabled"
                 return 0
             fi
-            local name1="$2"
-            local name2="$3"
+            name1="$2"
+            name2="$3"
         elif [[ "$1" == "--empty" ]] ; then
             if [[ -z "$3" ]] ; then
                 echo ""
                 return 0
             fi
-            local name1="$2"
-            local name2="$3"
+            name1="$2"
+            name2="$3"
         else
-            local name1="$1"
+            name1="$1"
             if [[ -z "$2" ]] ; then
                 echo "${name1}"
                 return 0
             fi
-            local name2="$2"
+            name2="$2"
         fi
-        local name3="${name2//\!${name1}\!/\!}"
-        local name3="!${name3//${name1}\!/\!}"
-        local name3="${name3//\!\!/\!}"
-        local name4="${name3//*\!/}"
+        local name3 name4
+        name3="${name2//\!${name1}\!/\!}"
+        name3="!${name3//${name1}\!/\!}"
+        name3="${name3//\!\!/\!}"
+        name4="${name3//*\!/}"
         if [[ ${name1} == "${name4}" ]] || [[ ${name1} == "\\${name4}" ]]
         then name3="${name3%\!"${name1}"}"
         fi
@@ -2320,14 +2355,12 @@ pw_find_exe () {
     --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \
     --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null)"
     YAD_STATUS="$?"
-    if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then
-        if [[ -z "${PW_SET_FIND_EXE}" ]] ; then
-            print_info "Restarting..."
-            restart_pp
-        fi
-        exit 0
-    fi
+
     IFS="$orig_IFS"
+    if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then
+        print_info "Restarting..."
+        restart_pp
+    fi
 
     if [[ -n "${PW_SET_FIND_EXE}" ]] ; then
         portwine_exe="${PW_PATH_FOR_FIND}$(echo "${PW_SET_FIND_EXE}" | awk -F'|' '{print $1}')"
@@ -5483,6 +5516,7 @@ portwine_create_shortcut () {
         fi
     elif [[ "$PW_YAD_OUT" == "2" ]] ; then
         print_info "Restarting PP..."
+        [[ -n $KEY_MENU ]] && unset portwine_exe
         [[ "${PW_GUI_START}" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
         restart_pp
     fi
@@ -5511,7 +5545,7 @@ pw_auto_create_shortcut () {
     [[ -z "${LINKS[0]}" ]] && return 0
     SORTED_LINKS=()
     while IFS= read -r line ; do
-        SORTED_LINKS+=("$line");
+        SORTED_LINKS+=("$line")
     done < <(echo ${LINKS[@]} | tr ' ' '\n' | sort -u) 
     IFS="$orig_IFS"
 
@@ -5562,6 +5596,7 @@ pw_auto_create_shortcut () {
             PORTPROTON_NAME="$link_name"
             export portwine_exe="$exe_path"
             resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
+            export PW_NO_RESTART_PPDB=1
             portwine_create_shortcut
         fi
     done
@@ -6002,8 +6037,8 @@ button_click () {
             kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY_MENU}" | awk '{print $1}') > /dev/null 2>&1
             PW_YAD_SET="${PORT_WINE_PATH}/${PW_YAD_SET//#@_@#/ }"
             if [[ -n $PW_DESKTOP_FILES_REGEX ]] ; then
-                count=1
-                for y in ${PW_DESKTOP_FILES_REGEX[@]} ; do
+                local count=1
+                for y in "${PW_DESKTOP_FILES_REGEX[@]}" ; do
                     PW_YAD_SET="${PW_YAD_SET//#+_$count#/$y}"
                     (( count++ ))
                 done
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index 045eec2c..e4869c20 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -25,7 +25,8 @@ if PORT_SCRIPTS_PATH=$(readlink -f "${0%/*}") ; then
     export PORT_SCRIPTS_PATH
     export PORT_WINE_PATH=${PORT_SCRIPTS_PATH%/*/*}
 else
-    fatal
+    echo "The PORT_SCRIPTS_PATH directory was not found!"
+    exit 1
 fi
 
 # shellcheck source=/dev/null
@@ -90,10 +91,11 @@ unset MANGOHUD MANGOHUD_DLSYM PW_NO_ESYNC PW_NO_FSYNC PW_VULKAN_USE WINEDLLOVERR
 unset PW_CHECK_AUTOINSTALL PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PORTWINE_DB PORTWINE_DB_FILE RADV_PERFTEST
 unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_TO_GAME PW_START_DEBUG PORTPROTON_NAME PW_PATH
 unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR AMD_VULKAN_ICD PW_WINE_CPU_TOPOLOGY
-unset PW_NAME_D_NAME PW_NAME_D_ICON PW_NAME_D_EXEC PW_EXEC_FROM_DESKTOP PW_GENERATE_BUTTONS PW_NAME_D_ICON PW_NAME_D_ICON_48
 unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR
 unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT
-unset PW_DESKTOP_FILES_REGEX PW_TERM
+unset PW_NAME_D_ICON PW_ICON_PATH PW_GAME_TIME PW_ALL_DF PW_AMOUNT_NEW_DESKTOP PW_AMOUNT_OLD_DESKTOP PW_DESKTOP_FILES
+unset AI_TYPE AI_NAME AI_IMAGE AI_INFO AI_FILE_ARRAY AI_TRUE_FILE AI_FILE_UNSORTED AI_FILE_SORTED PW_GENERATE_BUTTONS
+unset PW_DESKTOP_FILES_REGEX PW_TERM PW_EXEC_FROM_DESKTOP
 
 export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
 rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}*
@@ -324,7 +326,7 @@ export SKIP_CHECK_UPDATES="1"
 
 [[ "$MISSING_DESKTOP_FILE" == "1" ]] && portwine_missing_shortcut
 
-if [[ -n $(basename "${portwine_exe}" | grep .ppack) ]] ; then
+if [[ $(basename "${portwine_exe}") =~ .ppack$ ]] ; then
     unset PW_SANDBOX_HOME_PATH
     pw_init_runtime
     if check_flatpak
@@ -500,9 +502,9 @@ if [[ -f "${portwine_exe}" ]] ; then
         [[ $DESKTOP_WITH_TIME == enabled ]] && search_desktop_file
         if [[ -z "${PW_COMMENT_DB}" ]] ; then
             if [[ -n "${PORTPROTON_NAME}" ]] ; then
-                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")$(seconds_to_time "$TIME_CURRENT")</b>"
+                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")</b>$(seconds_to_time "$TIME_CURRENT")"
             else
-                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")$(seconds_to_time "$TIME_CURRENT")</b>"
+                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")</b>$(seconds_to_time "$TIME_CURRENT")"
             fi
         else
             PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time "$TIME_CURRENT")"
@@ -586,10 +588,14 @@ if [[ -f "${portwine_exe}" ]] ; then
             --button="${translations[LAUNCH]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Run file ...]}":106 2>/dev/null
             PW_YAD_SET="$?"
         fi
-        case $PW_YAD_SET in
+        case "$PW_YAD_SET" in
             128)
                 [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
-                unset portwine_exe KEY_START $(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g')
+                PORTWINE_DB_FOR_UNSET=$(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g')
+                for db_unset in $PORTWINE_DB_FOR_UNSET ; do
+                    unset "$db_unset"
+                done
+                unset portwine_exe KEY_START
                 print_info "Restarting..."
                 restart_pp
                 ;;
@@ -622,32 +628,25 @@ else
                             PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
                         fi
                     fi
-                    if [[ $line =~ ^Icon= ]] ; then
-                        PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
-                    fi
-                    if [[ $line =~ ^#Time= ]] ; then
-                        WITH_TIME="1"
-                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//#Time=/}"
-                    fi
+                    [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
+                    [[ $line =~ ^#Time= ]] && PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//#Time=/}"
+                    [[ $line =~ ^#NEW_DESKTOP ]] && NEW_DESKTOP=1
                 done < "$desktop_file"
                 PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new"
-                # Чтобы новый ярлык показало первым при первом запуске, потом уже по времени
-                if [[ $WITH_TIME != 1 ]] ; then
-                    echo "#Time=0" >> "$desktop_file"
-                    if [[ $SORT_WITH_TIME == enabled ]] ; then
-                        PW_AMOUNT_NO_TIME+=($AMOUNT_GENERATE_BUTTONS)
-                    else
-                        PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)
-                    fi
+                if [[ $NEW_DESKTOP == 1 ]] && [[ $SORT_WITH_TIME == enabled ]] ; then
+                    unset NEW_DESKTOP
+                    sed -i '/^#NEW_DESKTOP/d' "$desktop_file"
+                    PW_AMOUNT_NEW_DESKTOP+=($AMOUNT_GENERATE_BUTTONS)
                 else
-                    if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] ; then
-                        sed -i '/^#Time=/d' "$desktop_file"
-                        echo "#Time=0" >> "$desktop_file"
-                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="0"
-                    fi
-                    PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)
+                    PW_AMOUNT_OLD_DESKTOP+=($AMOUNT_GENERATE_BUTTONS)
+                fi
+                # Для фикса битых #Time=
+                if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] ; then
+                    portwine_exe=${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]//\"/}
+                    search_desktop_file
+                    unset portwine_exe
+                    PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]=${TIME_CURRENT_ARRAY[0]}
                 fi
-                unset WITH_TIME
                 (( AMOUNT_GENERATE_BUTTONS++ ))
             fi
         fi
@@ -681,7 +680,7 @@ else
     # Генерация .desktop баттанов для главного меню
     IFS=$'\n'
     PW_GENERATE_BUTTONS="--field=   ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%"
-    for dp in "${PW_AMOUNT_NO_TIME[@]}" "${PW_AMOUNT_WITH_TIME[@]}" ; do
+    for dp in ${PW_AMOUNT_NEW_DESKTOP[@]} ${PW_AMOUNT_OLD_DESKTOP[@]} ; do
         PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]%.png}_48"
         PW_NAME_D_ICON_128="${PW_ICON_PATH[dp]%.png}"
         PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON[dp]//\"/}"
@@ -694,12 +693,12 @@ else
             PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
             PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;)
 
-            for i in ${PW_DESKTOP_FILES_SHOW_REGEX[@]} ; do
+            for i in "${PW_DESKTOP_FILES_SHOW_REGEX[@]}" ; do
                 PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//$i/}"
             done
 
             count=1
-            for j in ${PW_DESKTOP_FILES_REGEX[@]} ; do
+            for j in "${PW_DESKTOP_FILES_REGEX[@]}" ; do
                 PW_DESKTOP_FILES="${PW_DESKTOP_FILES//$j/#+_$count#}"
                 (( count++ ))
             done
@@ -868,7 +867,7 @@ if [[ -f "${PORTWINE_DB_FILE}" ]] ; then
     edit_db_from_gui PW_VULKAN_USE PW_WINE_USE PW_PREFIX_NAME
 fi
 
-case $PW_YAD_SET in
+case "$PW_YAD_SET" in
     gui_pw_reinstall_pp|open_changelog|\
     128|gui_pw_update|gui_rm_portproton|\
     change_loc|gui_open_scripts_from_backup|\
@@ -898,7 +897,7 @@ case $PW_YAD_SET in
         ;;
 esac
 
-case $PW_YAD_SET in
+case "$PW_YAD_SET" in
     98) portwine_delete_shortcut ;;
     100) portwine_create_shortcut ;;
     DEBUG|102) portwine_start_debug ;;
diff --git a/data_from_portwine/themes/tray/tray_gui_pp b/data_from_portwine/themes/tray/tray_gui_pp
index 904af9d9249ffc556c74a3c1e227d0b35d6f1657..42bfd923d3a9dce032a4b85dac50f919d444128a 100755
GIT binary patch
delta 7872
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
E1JklXzyJUM

delta 7905
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
AcK`qY


From 54f3bb08af8750444f481155178d71c25614eeea Mon Sep 17 00:00:00 2001
From: Htylol <dixperm909@yandex.ru>
Date: Thu, 10 Oct 2024 14:42:41 +0500
Subject: [PATCH 28/28] updates for tray

---
 data_from_portwine/scripts/functions_helper |  40 +++++++-------------
 data_from_portwine/scripts/start.sh         |   4 +-
 data_from_portwine/themes/tray/tray_gui_pp  | Bin 155248 -> 155248 bytes
 3 files changed, 15 insertions(+), 29 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 35bdc77f..10f81810 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -785,7 +785,7 @@ search_desktop_file () {
     count=0
     for desktop_file in "$PORT_WINE_PATH"/* ; do
         desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
-        if [[ $desktop_file_new =~ .desktop ]] ; then
+        if [[ $desktop_file_new =~ .desktop$ ]] ; then
             if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
                     if [[ $line =~ ^Exec= ]] ; then
@@ -1414,7 +1414,7 @@ pw_exit_tray () {
 export -f pw_exit_tray
 
 stop_portwine () {
-    [[ "$int_xneur" == "1"  ]] && xneur &
+    [[ "$int_xneur" == "1" ]] && xneur &
 
     if [[ "$PW_USE_US_LAYOUT" == "1" ]] \
     && ! check_wayland_session \
@@ -1448,20 +1448,15 @@ stop_portwine () {
     pw_stop_progress_bar
     try_remove_file "${PORT_SCRIPTS_PATH}/0"
     try_remove_file "${PORT_SCRIPTS_PATH}/1"
-    kill_portwine &&
+    kill_portwine
     try_remove_dir "${PW_WINELIB}/var"
     find "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/" -maxdepth 1 -type f -name "*.tmp" -delete
     pw_exit_tray
     pw_auto_create_shortcut
     add_in_stop_portwine
 
-    # То что новый трей ругается на debug_timer и search_desktop_file, так и должно быть.
     debug_timer --end -s "PW_TIME_IN_GAME"
-
-    # В году 31536000 секунд.
-    # Bash у меня ещё работает с таким числом 999999999999999999999999999999999999999999999999
     PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах
-
     search_desktop_file
 
     case "$1" in
@@ -2733,7 +2728,7 @@ start_portwine () {
     if check_gamescope_session ; then
         export PW_GAMEMODERUN_SLR=""
     elif [[ "$PW_USE_GAMEMODE" = "1" ]] \
-    && [[ -n "$DBUS_SESSION_BUS_ADDRESS"  ]]
+    && [[ -n "$DBUS_SESSION_BUS_ADDRESS" ]]
     then
         if command -v gamemoded &>/dev/null ; then
             export GAMEMODERUN=1
@@ -3154,7 +3149,7 @@ start_portwine () {
     if [[ -n "$CP_DXVK_FILES" ]] ; then
         print_info "Try create symlink DXVK files..."
         for wine_dxvk_dll in $CP_DXVK_FILES ; do
-            if [[ -f "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll"  ]] ; then
+            if [[ -f "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" ]] ; then
                 try_force_link_file "${PATH_TO_DXVK_FILES}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_dxvk_dll}.dll"
                 try_force_link_file "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${wine_dxvk_dll}.dll"
                 var_winedlloverride_update "${wine_dxvk_dll}=n"
@@ -4837,7 +4832,7 @@ gui_mangohud () {
     export PW_MANGOHUD FPS_LIMIT
     edit_db_from_gui MANGOHUD_CONFIG PW_MANGOHUD FPS_LIMIT
 
-    if [[  "${YAD_MANGOHUD_STATUS}" == "184" ]] ; then
+    if [[ "${YAD_MANGOHUD_STATUS}" == "184" ]] ; then
         PW_MANGOHUD="1"
         pw_init_runtime
         pw_mangohud_check
@@ -5517,8 +5512,8 @@ portwine_create_shortcut () {
     elif [[ "$PW_YAD_OUT" == "2" ]] ; then
         print_info "Restarting PP..."
         [[ -n $KEY_MENU ]] && unset portwine_exe
-        [[ "${PW_GUI_START}" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
-        restart_pp
+        [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
+        [[ -z $LINKS ]] && restart_pp
     fi
 }
 
@@ -5535,19 +5530,12 @@ pw_auto_create_shortcut () {
     unset LINKS
     for link_file in "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk
     do
-        if ! echo "$link_file" | grep "\*.lnk" &>/dev/null ; then
-            link_file=$(readlink -f "${link_file}")
-            LINKS+=("${link_file// /@_@}")
-        else
-            continue
-        fi
+        link_file=$(readlink -f "${link_file}")
+        LINKS+=(${link_file// /@_@})
     done
+
     [[ -z "${LINKS[0]}" ]] && return 0
-    SORTED_LINKS=()
-    while IFS= read -r line ; do
-        SORTED_LINKS+=("$line")
-    done < <(echo ${LINKS[@]} | tr ' ' '\n' | sort -u) 
-    IFS="$orig_IFS"
+    read -r -a SORTED_LINKS < <(echo ${LINKS[@]} | tr ' ' '\n' | sort -u | tr '\n' ' ')
 
     for link_file in "${SORTED_LINKS[@]//@_@/ }" ; do
         if command -v exiftool &>/dev/null ; then
@@ -5587,10 +5575,8 @@ pw_auto_create_shortcut () {
             link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
         fi
 
-        try_remove_file "$link_file"
-
         if ! exe_path="$(realpath "${link_path}" 2>/dev/null)" ; then
-            print_warning "Removed broken link for: $link_name"
+            print_warning "Link broken for: $link_name"
         else
             print_info "Created link for: $link_name"
             PORTPROTON_NAME="$link_name"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index e4869c20..7e5bef12 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -326,7 +326,7 @@ export SKIP_CHECK_UPDATES="1"
 
 [[ "$MISSING_DESKTOP_FILE" == "1" ]] && portwine_missing_shortcut
 
-if [[ $(basename "${portwine_exe}") =~ .ppack$ ]] ; then
+if [[ $(basename "${portwine_exe}") =~ .[Pp][Pp][Aa][Cc][Kk]$ ]] ; then
     unset PW_SANDBOX_HOME_PATH
     pw_init_runtime
     if check_flatpak
@@ -618,7 +618,7 @@ else
     AMOUNT_GENERATE_BUTTONS="0"
     for desktop_file in "$PORT_WINE_PATH"/* ; do
         desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
-        if [[ $desktop_file_new =~ .desktop ]] ; then
+        if [[ $desktop_file_new =~ .desktop$ ]] ; then
             if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then
                 while IFS= read -r line ; do
                     if [[ $line =~ ^Exec= ]] ; then
diff --git a/data_from_portwine/themes/tray/tray_gui_pp b/data_from_portwine/themes/tray/tray_gui_pp
index 42bfd923d3a9dce032a4b85dac50f919d444128a..4a1525fe73eeaa5f7dbdde6e31fca2102c095dc2 100755
GIT binary patch
delta 7860
zcmZA63s_ZE+Q9L>j&Q<83=K^#3SLq)FPLa#sGz7=YRHg7L<x991w0xSIVg&kQAZsV
z;#EH&Ej7Gkm>A}usi~2PgA*1yWSZt@jygCG^;n;EzW>WPR!=-n{oZvwd#%0J+WQ<E
zt6DZzwJeV`EyG4y&3|D9W6XzbYWth!)GrqJ+5YZ3;EOj)J~`CU`_quSxo7uB*gI}+
zJ$v7ETS9q(W1m++%swB#WOutoYh3NUT%B5uf;syhF^k?>xv#B#`%KHazNcXJ34i-$
z4cBUDHWr*Z(e=?aWPE6+(e>BwIh`?U1}-2YX3dbrT5<jVY1WW=1#M4;n7D$cPKr5S
z@Y%_J=DmUzANMn>3I_21Df=dW{BAezQ_(c={G0}V9a&$nrOtQXfSX?#n{C8C-`hVw
zZ1O4}wwbP;=B3If9x%&1O?~B|R_38L=4+|xXttXnlGVw)W=_lPPR8F<RkjSGaAIo8
z%W1)VCI>rSos=~<<+Vw#&d8iPZASXk;O^G%i?UK)o|Q3u?r%zFJEmq%nw*xBIelvS
z?CHNLs2m?^GEHvmTBq}FE6d7X?{o%xTh?Z*CcV7C>8yCjvbJL#p2Q}+hQ2<Q^<bgX
znS+BiI-MSEEo&)u!+&Bl25)jYr(gyq`&w2GE<%t0p?_?P*L|&AYZHM_JIgA=Pz)`0
zIumdxX5&dL?_gQyuokaiBl?!m&d;*qFcfRh*Wa=lFbr>CJO-3Homu!i7GfP9z$;kq
zpKDon2=0>6<qfB^Lx5!^V>tc`lkf)S;9V@no|~P{Dx8iD_%-hCWLf@OoX*o2jje(#
zD-XwFF{a}aZ#td%I2+4xBi7~;)Dtw~f6*t{vevxC2=D~P<9{#<`)*|f7=smf1?w?j
z8w0?R*r7AG0>iNs6L9c$F1)K{#bXtwVgoub_a4Dsg1~N;^({uA$J>k?J7Es?#$p_d
zRrqIYz<qcR&tTxAEPRZ>?=cBI%4m-xu^1O%6>h)=e6P%z>%2#Bgp9!Mbc7N3&<;Al
z(U^m&=n=vq!fsfE(O8aC@Dzr#cpESQZ(=t7h#SyrC-)qK@h&D}U~9{oyEB&$Bq$*x
z3F|Qjo3I#zcX7qI7_Z{j*os}?zuW2Tjd>W4rI>}Mun@n;Fm^}6JM@bMScVl?jX&ab
z?3TO7>GW!2S&<lmTX8IUyz6v2FcAy!HdbL>ITwPBxRmX+a4(AwH{oe~A8+E&_t*^&
zbAcF+Cou^h+{ZS=aNLZ!aRf&Q((w|`M~nSgh{3oABk>ZJVMGND+i_ud1gGI8oQqa_
z%UX-USb>pf+s`dRUtEe~a4XKo<L%l1z20Xk$OuQTN4VD*f(tPQPh&b>z}4tc$%ru+
zPh%!FVh;LnE^Nn8tixEmjSloW!1lu~7|(eTidlZSOdUZX8D&_3KVltveZYx_iD(5{
z)@lsKV;G5bn2Z;35#GhkIPoAO!<Bdy528m$W)QpKJ&eZwe`jWL2@(jFVis=29e5o7
zfmhM0q5}?=wue}B*c-><U`)q&T#cD{6LYXP=SdOfu>Y&D7;j(|b~w!T!$i!zN3fJ2
zu#08w#|XTQN%#ZiV2=;!0F$u_XJG?w#CuqVft(`;F#?Zc5?;U@ypF|e<GWaeAxCJB
z!;d)G{{+j(2<%~5?T#`v*cGSXP+W?$aVsvs<G2B@VzrjD|G(C9{9em3`50>gkE3r-
z9!eO7H!&XVA93%|_oH0yJ;BptRNxe>!-d#{8_>5GCl!X_X^h8fn1xMPh^>#)9s@Dq
zF>cvO)&zFLOPGjOZ&p19<7$jVE4P|6TpQwD495;Mh{ter;ASksBUpuLG`xx{u+=AQ
zOMD!w@ddn&Md;Os^8iDz8e{OmQ?$ouT!Fdo6O<D)U@dm}l&QlA^y$lL#!%dj@mPUb
zcnu3N^)w^LLaf6B*o1ZH+mHQU!^~kPjK{H<g)_0RANxO>pn{B2tizA732kTSAe6;|
zVK@lmF$uFU4+}9LEAYQqk3RokCUFM__GfKi1pc9xMT!2HgWa*XKl}fif3j%EXu_+w
z_A{pLao&V51b1T$9>6sG99Q5~EW;+O#_n}YJ%*vz09H4KU=GIMHcZ10aRt_3SuTP7
z935akypBWBD~v^nA=s*(lMMaQf!SDyMOc9^ooD2@1n=T8>@d)>zQb?~xxk{tL70sz
zu^0t&s|acd8ZiG$4w^xhwF^V=AjaT%Ov5Hzfe{zEa!kZ(?D7={501uGPw?)Dz3~Ga
zi#IVHf5g=|?h<Pbvo5j!YYB?TXv7cDC!DFpP;7mfkz*t}a4P0w5td^U)?vWctQj1H
zzE5(ZVi^7z<8d2i;TKql_pk!{Udg2cf^k>q0Q1pzFpCkx@Dj#j^i`$~GjM~J;{iN~
z^;nB{@gjD3iiguTOg;9+1ax3F)?qRJgjHIedyT0lh{1c9gn<!k4~)Q1F$vFO4%+{h
z4zLYYVQ*}}NW6#RF>nZr3?s1ylX3oaZXFh48D7HEnENBaO@ayEa_@#x5qsk%9E-a!
z9dF}m^tr*~7w2OwzK4zY5&8_Xtg{%3KVvNV{F_^coiQKBV>#}^+F{n?))xegWHjAm
z>LWSpZ!z__8sqT}W~0w-rXC&g+)(qFsg=b;O+OPWdxx4Here0tGS;tufrLr?w@U5|
zH9;mv+6;qq>8~Wp1SLl13^TpjFN<US1hjg<E8lS6Xu}Jw6)by)nXYD#oTH|#Z?TMz
zGXCNdX*|r6(s`13M0!UWFI#-EwAO-H3T&~>wc1NMB_>JcMVcPwbtwVcnPRy;!L*kK
zZFH?zu0@*ern{_5G69|&Y-}JI7e#o0u&;(e=9FZB?bH%kJIe%kwBXfJ-f<PwC<o<M
z6dgAeOZ(xblUXhUhnvTu^t%zybIXcq?X%oA!rPw2xJc@B+@z1Il#lvtxh<->f|j@P
z;OQV+hSRyP994Ye@^B_0Ry;?*YU!yQmT@B(STC6ew(F%*I)cydC5J}PB0;`Xmdj5{
zg>;ODDKaFQs;5d_bG0a%xjNaLXfMUl%+)d3Mg`MFYNGjo;c`bwm3AXdS6kj2(mKWX
z+mGAXoNvhC=ZUWpuX4qn9uM&PB3oiifV~^xTz8dd;&gYFDa6y{hml;0rz{>t&E0g+
zv`hw%;x2?r$|y?0v?PdY*fNSs$!o6XnM6y6e5*ON(q=T}ho%2$QiZZEl{MfP&DF1$
z*R*7zYy{g(*C_4LE&0$=IXs@b-l)~m<%iLXr>InRI*h+(8RaWvNDM7Y<V9tVEQn#;
zgLN=LCPa=ZkIQAHub45EB{UCIBFC@{M`?usN!B=4YX!(6jmOF|t@=uHRnM?L@J`cQ
z(;iQl>7LCj;vDx>6%xPVjw^^A?rEzdZY^`hGG9%EKP{2g&v4<stt{)`;!U<^7~wtX
zqhUOuzuXyXf;_VcPm1?5Ty}-@0o%`|GX5FU$#%0;GSPH$U0Vll7M;AK757SwvRQ5^
zYqk3z^M-aEWDd!=u?)ypFD1ydkafx(*A+yx<~>2qYEH0zdROym^A$_zIHqEn)(wzY
zjpJpn#tx0AYKs8L*LX?uMccbQq(3A`-&u?>ns|!5_$<SkLO5T37)Sr<;y0eLOe~S{
zNmM#cNvu3S-gND}s>JE!sr~Dw%lviIdHL|&Qc7sa{XL{qxOROS1?8>}SwVP0IzCI`
zX;)!2In`PiWWLl^0e1b0c%?*2pJf`GO62gfrn~JT%Zu$$6w5H`b;1KAm{|9g=1Zg|
zj<^%an&_LS$B@4)(!{7dX&pymGYK=_)&7VUgyu<KEx4qK825)va5dMlORy$F@+33P
zbh1~pwX8Q>{o3n@D_z~%n~0CPda~;m(Mx&F6K4-2zTj%>nLs>2ZcSjEGsHU%UY0&!
zTfamr2Y67vS~B9euiSSn50JgeqjFY>mOIK&Y4b<6R@-9TZXCvc<nlUjGIMT-LlfQI
ziF{3j70VuOvy^LMA|*Q3T1_OA7)zp26LXr6Y|i|6603@3{%A@<H8IcKTdXFQxT`rd
zQS7dkuZh37tCf@BInZVp7hkLKQhg=`NTXJIrC9v+nth(5AX(Zy$8aX<Q;KCvmaQny
zbuS&7$Y*NVf|9R^h3-VTwoI4(w6v{p-`_^9u#F1M53PwLHoN-?)x;)u(^yTca3>rj
zI5p-?q#tqjQ?3=>b@x-NiJk6#8a1)i-PGq#B-XnVp(M;A8Tcpq+2ZcUp%p%G_mi)Q
z3U@!{n%LuRTC0g-ccPJmStZ|TKfB!hgeFkoBX>Wsnuy*gXLL#&BsjxMo@e6n-385?
zpj-=v%Kii<Hbu@QaCm<rKWVB`IzA8Y$q=x8w9$3EUH9kbFj=4_yR|#L9fy=yCBQQ+
zfcJ9wNpqs5V<JSz5a_JGgZlpV6nNHk3h*t|YNXR%vLKPymNeOs$Z{@|8f{x7x0HPG
zet~OP<-UdkJdU$v99bNN8OjP-qZRTt%AT2Qi;kS$Qlka0$SuVo-bs|tyx##85@Z}%
zCQdSv_`F~}Sb|KT>{U9*S;bfGC{@ztMV`;un`CXWK508~__(%`{VFl<F1oEeJ%V`g
zmyIv-IdPjLlcnVuO;((oCyUAWflhe(bbg6cyhJHUlA@%_Vr7<WQI^Y57nhZ6F_U1E
zzEtVq7&VDY`Pu!EO~L%!BP%Jf_2SUeXMY&4H{IN4a6EA*`F0ZHds@7csTE$*yn{Ut
zQ1Y~lBg<@;4CR2VQL0=AY&bt!91!mmZfFAGNmp(*;W5n(;&I;xY-ji+&Q%Wzsw6`T
zj>#J3Q+Y?rua(G|6n(Ol$Zf61ZyguJJC%}4JWNt4p~iSLb&`?Fb+*+P2Ys{JtEpvj
zPV1JI%33|Ed?vG^-!65n=ui@@kAah^o+r;uW^(-`Y6@>1!PAU~rx(APdP&J-dRZt(
zwUR?FD@kIeK#X)&Mrjj$yGc>H$zo-YY;mQIDsAPm(p$__7$}{UeiEg0loVx<ELMie
z7NxHoRs7}hRPI&9TRK30&%z#-^``Wk#sxLVxM@_lAQ_rkDC;z}MD{9g%2{Q<+)=8f
z&2)HQ`cJ3kH=24x%10UxaZG3UpUFImZ8x_{(R5zbmdYWm_Gh`Qjb@5TgBj9UnIcij
zYDrO6$>KDg2z|>WQz!OF8l4T06Iv7}-+*muS@XkQf@d)2*=5aRkVq1|HH@4=+t<rn
z%f5*pWr}6x482cfa(kw(!N)9X3r*Mp_ITpmWz7!}dlvEgu72%>#MQ2kw^tC?l*vmm
zOj8~4MVT>^adeP1Gr6E3c?WF%J7m=iDkSvgbzN?`O1x)Lp{Mi#+fzH52jf{!g-Dr@
z&f2|87$<AA(gZoHIpO?rlO=mKOdw2^HW`H3giFOcoew=O{nM#lqa6g9i!w*KAnTM`
zZK&_KXO&B?ZgTi7=Ztm}WE!=LAc@Uj%0hR#)~rJlPwsR*IP*2}^iJ0!tDFSK!hUTT
zE_b*jY1FLl@||W)cV&fU(&V|Fa)Xy*iPc2vPS>;6p^0(s&hkmHreDvbWrVhLZ3C&*
z{9bY{lcBxp%J-Sg+xArPo6X|9vD5X^aXOUmK076Kw&`M8Nz`n8ch^<6c{a`MvTZiq
z4v`beDEY?44hL5p?4ZIE@~DH7L>Z|h$y5iQ_NJ`V)Ip&hPpDn4$4C6*{3<HnYRPtK
zIR`dKPi3WyQHo@S@|mnuzLFht=&D|7G&MkODWT#$m&`fRe=aG9Oqgp%n-!HC=bFDg
zC@~9IHjDV5pFV2z&*A=;Pglya7FDiWU~=vHg=MLE#Bb41bHC&lTUZZU)s;~c+x^ak
zy2|g@I>H;Zv3#u0WzH(|w%-@OD-Py8REz7S|6eIS|GVPlys&BU1-YZe|N33=&33Nh
zhRVIGO}`fUz2$FQ<NbfU<*m2*?*NY#?ZqK&@(urbD?Rf~KfiqUK<{6v33k<5Cv&Lf
zxBhp<Tj@$WDU>bw=0B|ab?eL*rnYj%deftt*;$up>(}y^e`c0X5^Ybkygylsq~!}F
RtLM5ttGaT`3$`9D{vQgeF>C+;

delta 7834
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
X$;y`CM@d!}`aY|=e!`=++q(T5Ej2Z;