forked from CastroFidel/PortWINE
		
	update create shortcut
This commit is contained in:
		| @@ -1318,192 +1318,6 @@ check_nvidia_rtx () { | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
| create_shortcut_from_link () { | ||||
|     PORTPROTON_NAME="$link_name" | ||||
|     PW_RESIZE_TO=128 | ||||
|  | ||||
|     try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" | ||||
|     try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" | ||||
|  | ||||
|      if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then | ||||
|         if command -v sestatus &>/dev/null && sestatus | grep "Current mode: *enforcing" ; then | ||||
|             SESTATUS="1" | ||||
|         else | ||||
|             SESTATUS="0" | ||||
|         fi | ||||
|         if command -v exe-thumbnailer &>/dev/null && [[ "${SESTATUS}" == "0" ]] ; then | ||||
|             exe-thumbnailer -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | ||||
|         else | ||||
|             env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ | ||||
|             LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" \ | ||||
|             "${PW_WINELIB}/runtime/files/bin/python3.9"  \ | ||||
|             "${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     unset SHORTCUT_DUPLICATE SHORTCUT_ALREADY_CREATED | ||||
|     if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then | ||||
|         if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" &>/dev/null ; then | ||||
|             create_new_dir "${PORT_WINE_PATH}/duplicate" | ||||
|             if [[ "$(ls -A "${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name}"* 2>/dev/null)" ]] ; then | ||||
|                 if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name}"* &>/dev/null ; then | ||||
|                     number_duplication="$(ls "${PORT_WINE_PATH}/duplicate"/ 2>/dev/null)" | ||||
|                     number_duplication="${number_duplication//${PORTPROTON_NAME} - ${prefix_name}/}" | ||||
|                     number_duplication="${number_duplication//].desktop/}" | ||||
|                     number_duplication=(${number_duplication//[/}) | ||||
|                     dup_prev="0" | ||||
|                     for dup_num in ${number_duplication[@]} ; do | ||||
|                         dup_num_list="$(("$dup_num" - 1))" | ||||
|                         if [[ "$dup_num_list" != "$dup_prev" ]] ; then | ||||
|                             dup_num_list_new+="$dup_num_list " | ||||
|                         fi | ||||
|                         dup_prev="$dup_num" | ||||
|                     done | ||||
|  | ||||
|                     if [[ -z "$dup_num_list_new" ]] ; then | ||||
|                         number_duplication="${dup_prev}" | ||||
|                     else | ||||
|                         dup_helper="$(echo ${dup_num_list_new} | awk '{print $1}')" | ||||
|                         for dup in ${number_duplication[@]} ; do | ||||
|                             if (( "$dup_helper" > "$dup" )) ; then | ||||
|                                 dup_helper_new+="$dup " | ||||
|                             fi | ||||
|                         done | ||||
|                         number_duplication="$(echo ${dup_helper_new} | awk '{print $NF}')" | ||||
|                     fi | ||||
|                     number_duplication="$(("$number_duplication" + 1))" | ||||
|                 else | ||||
|                     SHORTCUT_DUPLICATE="true" | ||||
|                     SHORTCUT_ALREADY_CREATED="true" | ||||
|                     return 0 | ||||
|                 fi | ||||
|             else | ||||
|                 number_duplication="1" | ||||
|             fi | ||||
|             SHORTCUT_DUPLICATE="true" | ||||
|             PW_NAME_DESKTOP="${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name} [$number_duplication].desktop" | ||||
|         else | ||||
|             SHORTCUT_ALREADY_CREATED="true" | ||||
|             return 0 | ||||
|         fi | ||||
|     else | ||||
|         PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" | ||||
|     fi | ||||
|  | ||||
|     echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" | ||||
|     echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}" | ||||
|     if [[ ! -z "$link_cmd" ]] ; then | ||||
|         if check_flatpak | ||||
|         then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PW_NAME_DESKTOP}" | ||||
|         else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\" \"${link_cmd}\"" >> "${PW_NAME_DESKTOP}" | ||||
|         fi | ||||
|     else | ||||
|         if check_flatpak | ||||
|         then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PW_NAME_DESKTOP}" | ||||
|         else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\"" >> "${PW_NAME_DESKTOP}" | ||||
|         fi | ||||
|     fi | ||||
|     { | ||||
|         echo "Type=Application" | ||||
|         echo "Categories=Game" | ||||
|         echo "StartupNotify=true" | ||||
|         echo "Path=${PORT_SCRIPTS_PATH}/" | ||||
|         echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | ||||
|     } >> "${PW_NAME_DESKTOP}" | ||||
|     chmod u+x "${PW_NAME_DESKTOP}" | ||||
|  | ||||
|     [[ -z "${PW_SHORTCUT_DESKTOP}" ]] && PW_SHORTCUT_DESKTOP="TRUE" | ||||
|  | ||||
|     if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then | ||||
|         try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop" | ||||
|         cp -f "${PW_NAME_DESKTOP}" "${HOME}/.local/share/applications/" | ||||
|     else | ||||
|         if [[ ${PW_SHORTCUT_DESKTOP} == "TRUE" ]] ; then | ||||
|             if [[ -d "${HOME}/Desktop" ]] ; then | ||||
|                 cp -f "${PW_NAME_DESKTOP}" "${HOME}/Desktop/" | ||||
|             elif [[ -d "${HOME}/Рабочий стол" ]] ; then | ||||
|                 cp -f "${PW_NAME_DESKTOP}" "${HOME}/Рабочий стол/" | ||||
|             elif [[ $(xdg-user-dir DESKTOP) ]] ; then | ||||
|                 cp -f "${PW_NAME_DESKTOP}" "$(xdg-user-dir DESKTOP)" | ||||
|             fi | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
| export -f create_shortcut_from_link | ||||
|  | ||||
| pw_auto_create_shortcut () { | ||||
|     [[ "${PW_CHECK_AUTOINSTALL}" == 1 ]] && return 0 | ||||
|  | ||||
|     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 | ||||
|     done | ||||
|     [[ -z "$LINKS" ]] && return 0 | ||||
|     SORTED_LINKS=($(echo ${LINKS[@]} | tr ' ' '\n' | sort -u)) | ||||
|  | ||||
|     for link_file in "${SORTED_LINKS[@]//@_@/ }" ; do | ||||
|         if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then | ||||
|             prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') | ||||
|             if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ | ||||
|             && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then | ||||
|                 link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                 link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|             else | ||||
|                 link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                 link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|             fi | ||||
|             link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') | ||||
|             link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") | ||||
|         else | ||||
|             if ! command -v exiftool &>/dev/null ; then | ||||
|                 print_warning "use portable exiftool" | ||||
|                 env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" | ||||
|                 prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') | ||||
|                 if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ | ||||
|                 && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then | ||||
|                     link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                     link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|                 else | ||||
|                     link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                     link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|                 fi | ||||
|                 link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') | ||||
|                 link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") | ||||
|             else | ||||
|                 yad_error "exiftool - broken!" | ||||
|             fi | ||||
|         fi | ||||
|          | ||||
|         try_remove_file "$link_file" | ||||
|  | ||||
|         if ! exe_path="$(realpath "${link_path}" 2>/dev/null)" ; then | ||||
|             print_warning "Removed broken link for: $link_name" | ||||
|         else | ||||
|             create_shortcut_from_link | ||||
|             if [[ "${SHORTCUT_DUPLICATE}" == "true" ]] ; then | ||||
|                 if [[ "${SHORTCUT_ALREADY_CREATED}" == "true" ]] ; then | ||||
|                     print_warning "There is already a shortcut with this path for duplicate: $link_name - $prefix_name" | ||||
|                 else | ||||
|                     print_info "Created link for duplicate: $link_name - $prefix_name [$number_duplication]" | ||||
|                 fi | ||||
|             else | ||||
|                 if [[ "${SHORTCUT_ALREADY_CREATED}" == "true" ]] ; then | ||||
|                     print_warning "There is already a shortcut with this path for: $link_name" | ||||
|                 else | ||||
|                     print_info "Created link for: $link_name" | ||||
|                 fi | ||||
|             fi | ||||
|         fi | ||||
|     done | ||||
| } | ||||
| export -f pw_auto_create_shortcut | ||||
|  | ||||
| pw_init_db () { | ||||
|     if [[ -f "${portwine_exe}" ]] ; then | ||||
|         PORTWINE_DB="$(basename "${portwine_exe}" .exe)" | ||||
| @@ -1902,48 +1716,6 @@ pw_find_exe () { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pw_duplicate () { | ||||
|     export USE_DUPLICATE_GUI="1" | ||||
|     orig_IFS="$IFS" && IFS=$'\n' | ||||
|     PW_DESKTOP_D="$(ls "${PORT_WINE_PATH}"/duplicate/ | grep .desktop)" | ||||
|     for PW_DESKTOP_FILES_D in ${PW_DESKTOP_D} ; do | ||||
|         PW_NAME_D_ICON_D="$(grep Icon "${PORT_WINE_PATH}/duplicate/${PW_DESKTOP_FILES_D}" | awk -F= '{print $2}')" | ||||
|         PW_NAME_D_ICON_48_D="${PW_NAME_D_ICON_D//".png"/"_48.png"}" | ||||
|         if [[ ! -f "${PW_NAME_D_ICON_48_D}" ]]  \ | ||||
|         && [[ -f "${PW_NAME_D_ICON_D}" ]] \ | ||||
|         && command -v "convert" 2>/dev/null | ||||
|         then | ||||
|             convert "${PW_NAME_D_ICON_D}" -resize 48x48 "${PW_NAME_D_ICON_48_D}" | ||||
|         fi | ||||
|         PW_DESKTOP_HELPER_D="${PW_DESKTOP_FILES_D// /@_@}" | ||||
|         PW_GENERATE_BUTTONS_D+="--field=   ${PW_DESKTOP_FILES_D//".desktop"/""}!${PW_NAME_D_ICON_48_D}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DESKTOP_HELPER_D}"\"%" | ||||
|     done | ||||
|     IFS="$orig_IFS" | ||||
|  | ||||
|     old_IFS=$IFS && IFS="%" | ||||
|     "${pw_yad}" --width="${PW_DUPLICATE_SIZE_W}" --height="${PW_DUPLICATE_SIZE_H}" \ | ||||
|     --columns="$MAIN_GUI_COLUMNS" --homogeneous-column --form \ | ||||
|     --gui-type-layout=${MAIN_MENU_GUI_TYPE_LAYOUT} \ | ||||
|     --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ | ||||
|     --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ | ||||
|     --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} \ | ||||
|     --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null | ||||
|     IFS="$orig_IFS" | ||||
|  | ||||
|     pw_yad_set_form | ||||
|     case "$PW_YAD_SET" in | ||||
|         *.desktop) | ||||
|                     run_desktop_b_click | ||||
|                     ;; | ||||
|         pw_duplicate) | ||||
|                     export SKIP_CHECK_UPDATES=1 | ||||
|                     /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|                     print_info "Restarting..." | ||||
|                     exit 0 | ||||
|                     ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| pw_create_unique_exe () { | ||||
|     BASEDIR_GAME="$(dirname "$portwine_exe")" | ||||
|     if [[ -d "$BASEDIR_GAME" ]] ; then | ||||
| @@ -4774,6 +4546,7 @@ portwine_create_shortcut () { | ||||
|         --field="  $(gettext "Add shortcut to MENU -> GAMES")":CHK "$PW_SHORTCUT_MENU" \ | ||||
|         --field="  $(gettext "Add shortcut to Desktop")":CHK "$PW_SHORTCUT_DESKTOP" \ | ||||
|         --field="  $(gettext "Add shortcut to STEAM library")":CHK "$PW_SHORTCUT_STEAM" \ | ||||
|         --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ | ||||
|         --button="$(gettext "CREATE SHORTCUT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0) | ||||
|         PW_YAD_OUT=$? | ||||
|     else | ||||
| @@ -4789,6 +4562,7 @@ portwine_create_shortcut () { | ||||
|         --field="  $(gettext "Add shortcut to MENU -> GAMES")":CHK "$PW_SHORTCUT_MENU" \ | ||||
|         --field="  $(gettext "Add shortcut to Desktop")":CHK "$PW_SHORTCUT_DESKTOP" \ | ||||
|         --field="  $(gettext "Add shortcut to STEAM library")":CHK "$PW_SHORTCUT_STEAM" \ | ||||
|         --button="$(gettext "CANCEL")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ | ||||
|         --button="$(gettext "CREATE SHORTCUT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0) | ||||
|         PW_YAD_OUT=$? | ||||
|     fi | ||||
| @@ -4879,6 +4653,7 @@ portwine_create_shortcut () { | ||||
|  | ||||
|         if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then | ||||
|             print_info "Restarting PP..." | ||||
|             unset PW_YAD_FORM_TAB | ||||
|             export SKIP_CHECK_UPDATES="1" | ||||
|             /usr/bin/env bash -c ${pw_full_command_line[*]} & | ||||
|             exit 0 | ||||
| @@ -4886,10 +4661,100 @@ portwine_create_shortcut () { | ||||
|     fi | ||||
| } | ||||
|  | ||||
|  | ||||
| create_shortcut_from_link () { | ||||
|     PORTPROTON_NAME="$link_name" | ||||
|     PW_RESIZE_TO=128 | ||||
|  | ||||
|     try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" | ||||
|     try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" | ||||
|  | ||||
|      if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then | ||||
|         if command -v sestatus &>/dev/null && sestatus | grep "Current mode: *enforcing" ; then | ||||
|             SESTATUS="1" | ||||
|         else | ||||
|             SESTATUS="0" | ||||
|         fi | ||||
|         if command -v exe-thumbnailer &>/dev/null && [[ "${SESTATUS}" == "0" ]] ; then | ||||
|             exe-thumbnailer -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | ||||
|         else | ||||
|             env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ | ||||
|             LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" \ | ||||
|             "${PW_WINELIB}/runtime/files/bin/python3.9"  \ | ||||
|             "${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     export portwine_exe="$exe_path" | ||||
|     export PW_NO_RESTART_PPDB=1 | ||||
|     portwine_create_shortcut | ||||
| } | ||||
| export -f create_shortcut_from_link | ||||
|  | ||||
| pw_auto_create_shortcut () { | ||||
|     [[ "${PW_CHECK_AUTOINSTALL}" == 1 ]] && return 0 | ||||
|  | ||||
|     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 | ||||
|     done | ||||
|     [[ -z "$LINKS" ]] && return 0 | ||||
|     SORTED_LINKS=($(echo ${LINKS[@]} | tr ' ' '\n' | sort -u)) | ||||
|  | ||||
|     for link_file in "${SORTED_LINKS[@]//@_@/ }" ; do | ||||
|         if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then | ||||
|             prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') | ||||
|             if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ | ||||
|             && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then | ||||
|                 link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                 link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|             else | ||||
|                 link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                 link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|             fi | ||||
|             link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') | ||||
|             link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") | ||||
|         else | ||||
|             if ! command -v exiftool &>/dev/null ; then | ||||
|                 print_warning "use portable exiftool" | ||||
|                 env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" | ||||
|                 prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') | ||||
|                 if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ | ||||
|                 && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then | ||||
|                     link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                     link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|                 else | ||||
|                     link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') | ||||
|                     link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') | ||||
|                 fi | ||||
|                 link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') | ||||
|                 link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") | ||||
|             else | ||||
|                 yad_error "exiftool - broken!" | ||||
|             fi | ||||
|         fi | ||||
|          | ||||
|         try_remove_file "$link_file" | ||||
|  | ||||
|         if ! exe_path="$(realpath "${link_path}" 2>/dev/null)" ; then | ||||
|             print_warning "Removed broken link for: $link_name" | ||||
|         else | ||||
|             print_info "Created link for: $link_name" | ||||
|             create_shortcut_from_link | ||||
|         fi | ||||
|     done | ||||
| } | ||||
| export -f pw_auto_create_shortcut | ||||
|  | ||||
| portwine_delete_shortcut () { | ||||
|     rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" &>/dev/null | ||||
|     rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" &>/dev/null | ||||
|     rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}/duplicate"/*.desktop)" &>/dev/null | ||||
|     # rm -f "$(grep -il "${portwine_exe}" "${STEAM_SCRIPTS}"/*.sh)" &>/dev/null | ||||
|     if [[ -d "${HOME}/Desktop" ]] ; then | ||||
|         rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null | ||||
| @@ -5310,22 +5175,13 @@ export -f button_click_start | ||||
|  | ||||
| run_desktop_b_click () { | ||||
|     [[ ! -z "$1" ]] && echo "$1" > "${PW_TMPFS_PATH}/tmp_yad_form" | ||||
|     if [[ "${USE_DUPLICATE_GUI}" == "1" ]] ; then | ||||
|         if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then | ||||
|             kill -s SIGUSR1 $(pgrep -a yad | grep "\--width="${PW_DUPLICATE_SIZE_W}" \--height="${PW_DUPLICATE_SIZE_H}"" | awk '{print $1}') > /dev/null 2>&1 | ||||
|         fi | ||||
|         if check_flatpak | ||||
|         then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/duplicate/${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 "${PORT_WINE_PATH}/duplicate/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" | ||||
|         fi | ||||
|     else | ||||
|         if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then | ||||
|             kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY} \--notebook" | awk '{print $1}') > /dev/null 2>&1 | ||||
|         fi | ||||
|         if check_flatpak | ||||
|         then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${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 "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" | ||||
|         fi | ||||
|  | ||||
|     if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then | ||||
|         kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY} \--notebook" | awk '{print $1}') > /dev/null 2>&1 | ||||
|     fi | ||||
|     if check_flatpak | ||||
|     then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${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 "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" | ||||
|     fi | ||||
|  | ||||
|     print_info "Restarting PP after choose desktop file..." | ||||
|   | ||||
| @@ -87,7 +87,7 @@ unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_T | ||||
| 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 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 USE_DUPLICATE_GUI | ||||
| unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR | ||||
|  | ||||
| export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" | ||||
| rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* | ||||
| @@ -637,9 +637,7 @@ else | ||||
|     else PW_GUI_SORT_TABS=(2 3 4 5 1) | ||||
|     fi | ||||
|     PW_GENERATE_BUTTONS="--field=   $(gettext "Create shortcut...")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_find_exe\"%" | ||||
|     if grep -i "[Desktop Entry]" "${PORT_WINE_PATH}/duplicate"/* &>/dev/null ; then | ||||
|         PW_GENERATE_BUTTONS+="--field=   $(gettext "Duplicates")!${PW_GUI_ICON_PATH}/duplicate.svg!:FBTN%@bash -c \"button_click pw_duplicate\"%" | ||||
|     fi | ||||
|  | ||||
|     for PW_DESKTOP_FILES in ${PW_ALL_DF} ; do | ||||
|         PW_NAME_D_ICON="$(grep Icon "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F= '{print $2}')" | ||||
|         PW_NAME_D_ICON_48="${PW_NAME_D_ICON//".png"/"_48.png"}" | ||||
| @@ -840,7 +838,6 @@ fi | ||||
|     gui_credits) gui_credits ;; | ||||
|     pw_start_cont_xterm) pw_start_cont_xterm ;; | ||||
|     pw_find_exe) pw_find_exe ;; | ||||
|     pw_duplicate) pw_duplicate ;; | ||||
|     PW_*) pw_autoinstall_from_db ;; | ||||
|     *.desktop) run_desktop_b_click ;; | ||||
|     1|252|*) exit 0 ;; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user