From 95f51b9f412b52f4196bc1615871c4b358feb7e1 Mon Sep 17 00:00:00 2001
From: Boris Yumankulov <boriabloger@protonmail.com>
Date: Fri, 19 Jul 2024 11:03:35 +0500
Subject: [PATCH 1/2] Fixed auto-mounting of the disk on which PortProton is
 located

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

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index d7cb1041..90a73a94 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1259,15 +1259,17 @@ check_dirs_and_files_in_pfx () {
         then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data"
         fi
 
-        find "${WINEPREFIX}/dosdevices" -xtype l -maxdepth 1 2>/dev/null -exec rm {} \;
-        rm -f "${WINEPREFIX}/dosdevices/"*::
         DRIVES=(d e f g i j k l m n o p q r s t u v w x y)
         DEF_MOUNT_DIRS=('/media' "/media/$USER" '/mnt' '/run/media' "/run/media/$USER")
         MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -type d 2>/dev/null | sort -u))
 
+        rm -fv "${WINEPREFIX}/dosdevices/"*::
+        for drive in "${DRIVES[@]}"; do
+            rm -fv "${WINEPREFIX}/dosdevices/${drive}:" 2>/dev/null
+        done
         for drive_dir in "${MOUNT_DIRS[@]}" ; do
             if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \
-            && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep "$drive_dir" &>/dev/null ; then
+            && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep -w "$drive_dir$" &>/dev/null ; then
                 drive_num=0
                 while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do
                     drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:"

From 9440a0d900b75e903a69ea3e9b3faeb4d8676469 Mon Sep 17 00:00:00 2001
From: Boris Yumankulov <boriabloger@protonmail.com>
Date: Sun, 21 Jul 2024 22:43:07 +0500
Subject: [PATCH 2/2] Finally fixed duplicates of sd cards and flash drives
 (SteamDeck)

---
 data_from_portwine/scripts/functions_helper | 47 ++++++++++++++-------
 1 file changed, 31 insertions(+), 16 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 90a73a94..1e2eadff 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -1260,26 +1260,41 @@ check_dirs_and_files_in_pfx () {
         fi
 
         DRIVES=(d e f g i j k l m n o p q r s t u v w x y)
-        DEF_MOUNT_DIRS=('/media' "/media/$USER" '/mnt' '/run/media' "/run/media/$USER")
-        MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -type d 2>/dev/null | sort -u))
+        DEF_MOUNT_DIRS=('/media' '/mnt' '/run/media')
+        MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -mindepth 1  -type d 2>/dev/null | sort -u))
+
+        rm -f "${WINEPREFIX}/dosdevices/com"*
+        rm -f "${WINEPREFIX}/dosdevices/"*::
 
-        rm -fv "${WINEPREFIX}/dosdevices/"*::
         for drive in "${DRIVES[@]}"; do
-            rm -fv "${WINEPREFIX}/dosdevices/${drive}:" 2>/dev/null
+            rm -f "${WINEPREFIX}/dosdevices/${drive}:"
         done
+
         for drive_dir in "${MOUNT_DIRS[@]}" ; do
-            if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \
-            && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep -w "$drive_dir$" &>/dev/null ; then
-                drive_num=0
-                while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do
-                    drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:"
-                    if [ ! -d "$drive_path" ] ; then
-                        ln -sf "$drive_dir" "$drive_path"
-                        break
-                    else
-                        ((drive_num++))
-                    fi
-                done
+            if  mountpoint -q "$drive_dir" ; then
+                if ! realpath "${WINEPREFIX}/dosdevices"/*: | grep -w "$drive_dir$" &>/dev/null ; then
+                    drive_num=0
+                    while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do
+                        drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:"
+                        mount_point=$(df -P "$drive_dir" | awk 'NR==2 {print $1}')
+                        mount_name=$(lsblk -no pkname "$mount_point" 2>/dev/null)
+
+                        if [[ ! -L "$drive_path" ]] ; then
+                            if [[ $(cat "/sys/class/block/$mount_name/removable") != "1" ]] 2>/dev/null ; then
+                                if [[ ! $(echo "$mount_point" | grep "mmc") ]] 2>/dev/null ; then
+                                    ln -sf "$drive_dir" "$drive_path"
+                                    break
+                                else
+                                    ((drive_num++))
+                                fi
+                            else
+                                ((drive_num++))
+                            fi
+                        else
+                            ((drive_num++))
+                        fi
+                    done
+                fi
             fi
         done
     }