From 245fed3beef2c36af9da1fd2741cd8426c22850b Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Sat, 20 Jun 2026 12:15:56 +0500 Subject: [PATCH] fix: handle DOSBox lnk from GOG Signed-off-by: Boris Yumankulov --- .../share/portproton/scripts/functions_helper | 75 +++++++++++++++++-- build-aux/share/portproton/scripts/start.sh | 6 +- 2 files changed, 69 insertions(+), 12 deletions(-) diff --git a/build-aux/share/portproton/scripts/functions_helper b/build-aux/share/portproton/scripts/functions_helper index d0d96c36..ac537fe2 100755 --- a/build-aux/share/portproton/scripts/functions_helper +++ b/build-aux/share/portproton/scripts/functions_helper @@ -4639,9 +4639,21 @@ resize_png () { } portwine_create_shortcut () { - if [[ ! -e $PW_EXE_FILE ]] - then return 1 - elif [[ $(basename "$PW_EXE_FILE") =~ (unins0|uninstall|remove) ]] + if [[ ! -e "$PW_EXE_FILE" ]]; then + lnk_dir="$(dirname "$PW_EXE_FILE")" + lnk_name_part="$(basename "$PW_EXE_FILE")" + if [[ -d "$lnk_dir" ]]; then + actual_file="$(ls -1 "$lnk_dir/" 2>/dev/null | grep -F -i -x -- "$lnk_name_part" | head -1)" + if [[ -n "$actual_file" ]]; then + PW_EXE_FILE="$(realpath "$lnk_dir/$actual_file" 2>/dev/null)" + export PW_EXE_FILE + fi + fi + if [[ ! -e "$PW_EXE_FILE" ]]; then + return 1 + fi + fi + if [[ $(basename "$PW_EXE_FILE") =~ (unins0|uninstall|remove) ]] then return 0 fi pw_create_gui_png @@ -4673,7 +4685,18 @@ pw_download_autoinstall_ppdb () { portwine_output_yad_shortcut () { - [[ ! -e "${PW_EXE_FILE}" ]] && return 1 + if [[ ! -e "${PW_EXE_FILE}" ]]; then + lnk_dir="$(dirname "${PW_EXE_FILE}")" + lnk_name_part="$(basename "${PW_EXE_FILE}")" + if [[ -d "${lnk_dir}" ]]; then + actual_file="$(ls -1 "${lnk_dir}/" 2>/dev/null | grep -F -i -x -- "${lnk_name_part}" | head -1)" + if [[ -n "${actual_file}" ]]; then + PW_EXE_FILE="$(realpath "${lnk_dir}/${actual_file}" 2>/dev/null)" + export PW_EXE_FILE + fi + fi + [[ ! -e "${PW_EXE_FILE}" ]] && return 1 + fi pw_download_autoinstall_ppdb if [[ "${PW_FIND_PPDB:-}" == "1" ]] \ @@ -4681,7 +4704,6 @@ portwine_output_yad_shortcut () { then python_module shortcut_tools find-ppdb "${PW_EXE_FILE}" fi - pw_create_gui_png unset name_desktop @@ -4780,15 +4802,54 @@ pw_auto_create_shortcut () { elif exe_path="$(realpath "${link_path//\/Games\//\/GAMES\//}" 2>/dev/null)" ; then export PW_EXE_FILE="$exe_path" else - print_warning "Link broken for: $link_name" - continue + lnk_dir="$(dirname "${link_path}")" + lnk_name_part="$(basename "${link_path}")" + actual_file="$(ls -1 "${lnk_dir}/" 2>/dev/null | grep -F -i -x -- "${lnk_name_part}" | head -1)" + if [[ -n "${actual_file}" ]] && exe_path="$(realpath "${lnk_dir}/${actual_file}" 2>/dev/null)" ; then + export PW_EXE_FILE="$exe_path" + else + print_warning "Link broken for: $link_name" + continue + fi fi print_info "Created link for: $link_name" PORTPROTON_NAME="$link_name" + PORTWINE_CREATE_SHORTCUT_NAME="$link_name" resize_png "$PW_EXE_FILE" "${PORTPROTON_NAME}" export PW_NO_RESTART_PPDB=1 unset name_desktop_png portwine_create_shortcut + if [[ -n "${link_cmd:-}" ]] && [[ -n "${PW_EXE_FILE:-}" ]]; then + local ppdb_path ppdb_dir ppdb_name actual_ppdb lnk_launch_parameters old_launch_parameters portwine_db_name + ppdb_path="${PW_EXE_FILE}.ppdb" + ppdb_dir="$(dirname "${ppdb_path}")" + ppdb_name="$(basename "${ppdb_path}")" + if [[ ! -f "${ppdb_path}" ]] && [[ -d "${ppdb_dir}" ]]; then + actual_ppdb="$(ls -1 "${ppdb_dir}/" 2>/dev/null | grep -F -i -x -- "${ppdb_name}" | head -1)" + [[ -n "${actual_ppdb}" ]] && ppdb_path="${ppdb_dir}/${actual_ppdb}" + fi + if [[ ! -f "${ppdb_path}" ]]; then + portwine_db_name="$(basename "${PW_EXE_FILE%.[Ee][Xx][Ee]}")" + { + echo "#!/usr/bin/env bash" + echo "#Author: ${USER}" + echo "#${portwine_db_name}.exe" + echo "#Rating=1-5" + } > "${ppdb_path}" 2>/dev/null + fi + if [[ -w "${ppdb_path}" ]]; then + lnk_launch_parameters="${link_cmd}" + lnk_launch_parameters="${lnk_launch_parameters//\"/}" + lnk_launch_parameters="${lnk_launch_parameters//\\/\/}" + old_launch_parameters="$(sed -n 's/^export LAUNCH_PARAMETERS="\([^"]*\)".*/\1/p' "${ppdb_path}" | head -1)" + if [[ -n "${old_launch_parameters}" ]]; then + lnk_launch_parameters="${old_launch_parameters} ${lnk_launch_parameters}" + fi + sed -i '/^export LAUNCH_PARAMETERS=/d' "${ppdb_path}" + printf '%s\n' "export LAUNCH_PARAMETERS=\"${lnk_launch_parameters}\"" >> "${ppdb_path}" + fi + fi + unset PORTWINE_CREATE_SHORTCUT_NAME done } export -f pw_auto_create_shortcut diff --git a/build-aux/share/portproton/scripts/start.sh b/build-aux/share/portproton/scripts/start.sh index a283e413..4dc364ad 100755 --- a/build-aux/share/portproton/scripts/start.sh +++ b/build-aux/share/portproton/scripts/start.sh @@ -105,7 +105,7 @@ if [[ "${1,,}" =~ \.ppack$ ]] ; then export PW_NO_RESTART_PPDB="1" export PW_DISABLED_CREATE_DB="1" PW_EXE_FILE="$1" -elif [[ "${1,,}" =~ \.(exe|bat|cmd|msi|reg|lnk)$ ]] ; then +elif [[ "${1,,}" =~ \.(exe|bat|cmd|msi|reg)$ ]] ; then if [[ -f "$1" ]] ; then PW_EXE_FILE="$(realpath -s "$1")" elif [[ -f "$OLDPWD/$1" ]] ; then @@ -114,10 +114,6 @@ elif [[ "${1,,}" =~ \.(exe|bat|cmd|msi|reg|lnk)$ ]] ; then PW_EXE_FILE="$1" MISSING_DESKTOP_FILE="1" fi - if [[ -n "${PW_EXE_FILE}" && "${1,,}" =~ \.lnk$ ]] ; then - get_lnk "${PW_EXE_FILE}" - PW_EXE_FILE="$(realpath "${link_path}" 2>/dev/null)" - fi elif [[ "$1" =~ ^--(debug|launch|edit-db)$ && "${2,,}" =~ \.(exe|bat|cmd|msi|reg)$ ]] ; then if [[ -f "$2" ]] ; then PW_EXE_FILE="$(realpath -s "$2")" -- 2.54.0