fix: handle DOSBox lnk from GOG #202

Merged
Boria138 merged 1 commits from gog-dosbox into main 2026-07-08 14:00:13 +00:00
2 changed files with 69 additions and 12 deletions

No files matched your search

@@ -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
+1 -5
View File
@@ -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")"