forked from CastroFidel/PortWINE
Added duplicate detection feature
This commit is contained in:
parent
e90b8aa242
commit
18dc83991d
@ -1000,18 +1000,31 @@ stop_portwine () {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
for check in ${PORT_WINE_PATH}/*.desktop ; do
|
for check in ${PORT_WINE_PATH}/*.desktop ; do
|
||||||
SHORTCUT_SKIP_LIST+="$check"
|
if PREFIX_SKIP_LIST="$(grep -A1 '###AUTOCREATE###' "$check")" ; then
|
||||||
|
SHORTCUT_SKIP_LIST+="${check//"${PORT_WINE_PATH}/"/""}${PREFIX_SKIP_LIST//###AUTOCREATE###[[:space:]]###PREFIX:/"%"}"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}"
|
|
||||||
if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop" ]] ; then
|
if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop%" ]] ; then
|
||||||
SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}"
|
SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}"
|
||||||
SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk "}"
|
SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}"
|
||||||
for skip in ${SHORTCUT_SKIP_LIST} ; do
|
SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"###"/" "}"
|
||||||
SHORTCUT_SKIP_LIST_NEW+="-not -name "${skip}" "
|
else
|
||||||
done
|
SHORTCUT_SKIP_LIST=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for prefix_dir in "${PORT_WINE_PATH}"/prefixes/*; do
|
shortcut_fix () {
|
||||||
|
SHORTCUT_SKIP_LIST_NEW=""
|
||||||
|
prefix_check=${dir//*prefixes\/}
|
||||||
|
prefix_check=${prefix_check//\/drive_c*/}
|
||||||
|
for fix in ${SHORTCUT_SKIP_LIST} ; do
|
||||||
|
if [[ "${prefix_check}" == ${fix//*%/} ]] ; then
|
||||||
|
SHORTCUT_SKIP_LIST_NEW+="-not -name "${fix//%*/}" "
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
for prefix_dir in "${PORT_WINE_PATH}"/prefixes/* ; do
|
||||||
DESKTOP_DIRS+=(
|
DESKTOP_DIRS+=(
|
||||||
"${prefix_dir}/drive_c/users/steamuser/Desktop"
|
"${prefix_dir}/drive_c/users/steamuser/Desktop"
|
||||||
"${prefix_dir}/drive_c/users/Public/Desktop"
|
"${prefix_dir}/drive_c/users/Public/Desktop"
|
||||||
@ -1019,6 +1032,7 @@ stop_portwine () {
|
|||||||
done
|
done
|
||||||
|
|
||||||
for dir in "${DESKTOP_DIRS[@]}" ; do
|
for dir in "${DESKTOP_DIRS[@]}" ; do
|
||||||
|
shortcut_fix
|
||||||
while IFS= read -r -d '' link_file; do
|
while IFS= read -r -d '' link_file; do
|
||||||
LINKS+=("$link_file")
|
LINKS+=("$link_file")
|
||||||
done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u)
|
done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u)
|
||||||
@ -1026,8 +1040,8 @@ stop_portwine () {
|
|||||||
|
|
||||||
for link_file in "${LINKS[@]}"; do
|
for link_file in "${LINKS[@]}"; do
|
||||||
if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then
|
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}')
|
prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
|
||||||
if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; then
|
if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; 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_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')
|
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
|
else
|
||||||
@ -1036,13 +1050,12 @@ stop_portwine () {
|
|||||||
fi
|
fi
|
||||||
link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||')
|
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")
|
link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
|
||||||
echo $link_path
|
|
||||||
else
|
else
|
||||||
if ! command -v exiftool &>/dev/null ; then
|
if ! command -v exiftool &>/dev/null ; then
|
||||||
print_warning "use portable exiftool"
|
print_warning "use portable exiftool"
|
||||||
prefix_name=$(echo $link_file | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
|
prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
|
||||||
env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp"
|
env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp"
|
||||||
if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; then
|
if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; 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_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')
|
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
|
else
|
||||||
@ -1055,9 +1068,17 @@ stop_portwine () {
|
|||||||
yad_error "exiftool - broken!"
|
yad_error "exiftool - broken!"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
exe_path="$(realpath "${link_path}")"
|
if ! exe_path="$(realpath "${link_path}")" ; then
|
||||||
create_shortcut_from_link
|
try_remove_file "$link_file"
|
||||||
print_info "Created link for $link_name"
|
print_warning "Removed broken link for $link_name"
|
||||||
|
else
|
||||||
|
create_shortcut_from_link
|
||||||
|
if [[ "${CREATE_WITH_PREFIX}" == "true" ]] ; then
|
||||||
|
print_info "Created link for $link_name - $prefix_name"
|
||||||
|
else
|
||||||
|
print_info "Created link for $link_name"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
add_in_stop_portwine
|
add_in_stop_portwine
|
||||||
@ -1376,17 +1397,26 @@ create_shortcut_from_link () {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then
|
||||||
echo "Name=${PORTPROTON_NAME}" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
mv -f "${link_file}" "${link_file//".lnk"/" - ${prefix_name}.lnk"}"
|
||||||
|
PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME} - ${prefix_name}.desktop"
|
||||||
|
export CREATE_WITH_PREFIX="true"
|
||||||
|
else
|
||||||
|
PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
||||||
|
export CREATE_WITH_PREFIX=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}"
|
||||||
|
echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}"
|
||||||
if [[ ! -z "$link_cmd" ]] ; then
|
if [[ ! -z "$link_cmd" ]] ; then
|
||||||
if check_flatpak
|
if check_flatpak
|
||||||
then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
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}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\" \"${link_cmd}\"" >> "${PW_NAME_DESKTOP}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if check_flatpak
|
if check_flatpak
|
||||||
then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
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}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\"" >> "${PW_NAME_DESKTOP}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
{
|
{
|
||||||
@ -1395,19 +1425,21 @@ create_shortcut_from_link () {
|
|||||||
echo "StartupNotify=true"
|
echo "StartupNotify=true"
|
||||||
echo "Path=${PORT_SCRIPTS_PATH}/"
|
echo "Path=${PORT_SCRIPTS_PATH}/"
|
||||||
echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png"
|
echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png"
|
||||||
} >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
echo "###AUTOCREATE###"
|
||||||
chmod u+x "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop"
|
echo "###PREFIX:$prefix_name###"
|
||||||
|
} >> "${PW_NAME_DESKTOP}"
|
||||||
|
chmod u+x "${PW_NAME_DESKTOP}"
|
||||||
|
|
||||||
if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then
|
if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then
|
||||||
try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop"
|
try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop"
|
||||||
cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/.local/share/applications/"
|
cp -f "${PW_NAME_DESKTOP}" "${HOME}/.local/share/applications/"
|
||||||
else
|
else
|
||||||
if [[ -d "${HOME}/Desktop" ]] ; then
|
if [[ -d "${HOME}/Desktop" ]] ; then
|
||||||
cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Desktop/"
|
cp -f "${PW_NAME_DESKTOP}" "${HOME}/Desktop/"
|
||||||
elif [[ -d "${HOME}/Рабочий стол" ]] ; then
|
elif [[ -d "${HOME}/Рабочий стол" ]] ; then
|
||||||
cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Рабочий стол/"
|
cp -f "${PW_NAME_DESKTOP}" "${HOME}/Рабочий стол/"
|
||||||
elif [[ $(xdg-user-dir DESKTOP) ]] ; then
|
elif [[ $(xdg-user-dir DESKTOP) ]] ; then
|
||||||
cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "$(xdg-user-dir DESKTOP)"
|
cp -f "${PW_NAME_DESKTOP}" "$(xdg-user-dir DESKTOP)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user