From bfbe84301398f02d9e542e34f0d392f1a390cf63 Mon Sep 17 00:00:00 2001 From: Boria138 Date: Tue, 14 May 2024 00:35:48 +0500 Subject: [PATCH 1/9] Added automatic detection and creation of shortcuts --- data_from_portwine/scripts/functions_helper | 93 +++++++++++++++++++ .../scripts/portwine_db/setup.ppdb | 4 - .../scripts/pw_autoinstall/PW_UBC | 1 + data_from_portwine/scripts/start.sh | 2 +- 4 files changed, 95 insertions(+), 5 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d7cb104..4525435 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -998,6 +998,41 @@ stop_portwine () { if [[ ! -z "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" ]] ; then kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi + + for prefix_dir in "${PORT_WINE_PATH}"/prefixes/*; do + DESKTOP_DIRS+=( + "${prefix_dir}/drive_c/users/steamuser/Desktop" + "${prefix_dir}/drive_c/users/Public/Desktop" + ) + done + + for dir in "${DESKTOP_DIRS[@]}" ; do + while IFS= read -r -d '' link_file; do + LINKS+=("$link_file") + done < <(find "$dir" -type f -iname "*.lnk" -print0 2>/dev/null | sort -u) + done + + for link_file in "${LINKS[@]}"; do + if command -v exiftool &>/dev/null + link_drive=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') + link_name=$(exiftool -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') + link_cmd=$(exiftool -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') + else + link_drive=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') + link_name=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') + link_cmd=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') + fi + exe_path="$(realpath "$link_path")" + if ! [[ "$(grep -il "${exe_path}" "${PORT_WINE_PATH}"/*.desktop)" ]] || \ + ! [[ "$(grep -il "${exe_path}" "${HOME}/.local/share/applications"/*.desktop)" ]] || \ + ! [[ "$(grep -il "${exe_path}" "$(xdg-user-dir DESKTOP)"/*.desktop)" ]] ; then + create_shortcut_from_link + print_info "Created link for $link_name" + fi + done + add_in_stop_portwine unset SKIP_CHECK_UPDATES exit 0 @@ -1294,6 +1329,62 @@ 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/setup.png" + try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png" + 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 exe-thumbnailer &>/dev/null ; then + exe-thumbnailer -s 128 "$(readlink -f "${portwine_exe}")" "${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 "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + fi + fi + + echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + echo "Name=${PORTPROTON_NAME}" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + if [[ ! -z "$link_cmd" ]] ; then + if check_flatpak + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + fi + else + if check_flatpak + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_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" + } >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + chmod u+x "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + + if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then + try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop" + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/.local/share/applications/" + else + if [[ -d "${HOME}/Desktop" ]] ; then + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Desktop/" + elif [[ -d "${HOME}/Рабочий стол" ]] ; then + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Рабочий стол/" + elif [[ $(xdg-user-dir DESKTOP) ]] ; then + cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "$(xdg-user-dir DESKTOP)" + fi + fi +} + pw_init_db () { if [[ -f "${portwine_exe}" ]] ; then PORTWINE_DB="$(basename "${portwine_exe}" .exe)" @@ -4622,6 +4713,8 @@ portwine_delete_shortcut () { elif [[ $(xdg-user-dir DESKTOP) ]] ; then rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null fi + rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop"/*.lnk)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop"/*.lnk)" &>/dev/null } portwine_missing_shortcut () { diff --git a/data_from_portwine/scripts/portwine_db/setup.ppdb b/data_from_portwine/scripts/portwine_db/setup.ppdb index 5eef087..3c4947b 100644 --- a/data_from_portwine/scripts/portwine_db/setup.ppdb +++ b/data_from_portwine/scripts/portwine_db/setup.ppdb @@ -17,7 +17,3 @@ export PW_FORCE_LARGE_ADDRESS_AWARE=1 # Force Wine to enable the LARGE_ export PW_DLL_INSTALL="" # export WINEDLLOVERRIDES="mscoree,mshtml=" export PW_WINE_USE=WINE_LG - -add_in_stop_portwine () { - pw_find_exe news -} diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_UBC b/data_from_portwine/scripts/pw_autoinstall/PW_UBC index 0ca0c6e..65fa312 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_UBC +++ b/data_from_portwine/scripts/pw_autoinstall/PW_UBC @@ -3,6 +3,7 @@ ######################################################################## export LAUNCH_PARAMETERS=("/S" "/D=c:\Program Files (x86)\Ubisoft Game Launcher") export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/UbisoftConnectInstaller.exe" +export PORTWINE_CREATE_SHORTCUT_NAME="Ubisoft Connect" start_portwine if try_download "https://ubistatic3-a.akamaihd.net/orbit/launcher_installer/UbisoftConnectInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror then diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 0bc1d95..c1c376d 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -172,7 +172,7 @@ then else # shellcheck source=/dev/null source "$PW_GUI_THEMES_PATH/default.pptheme" -echo 'export GUI_THEME="default"' >> "$USER_CONF" + echo 'export GUI_THEME="default"' >> "$USER_CONF" fi # choose branch From e90b8aa2426cb2eef01bb43ffa2774f56d3247e3 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Thu, 18 Jul 2024 16:22:10 +0500 Subject: [PATCH 2/9] apply patch from @Htylol --- data_from_portwine/scripts/functions_helper | 67 +++++++++++++++------ 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 4525435..8477b3e 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -999,6 +999,18 @@ stop_portwine () { kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi + for check in ${PORT_WINE_PATH}/*.desktop ; do + SHORTCUT_SKIP_LIST+="$check" + done + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" + if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop" ]] ; then + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk "}" + for skip in ${SHORTCUT_SKIP_LIST} ; do + SHORTCUT_SKIP_LIST_NEW+="-not -name "${skip}" " + done + fi + for prefix_dir in "${PORT_WINE_PATH}"/prefixes/*; do DESKTOP_DIRS+=( "${prefix_dir}/drive_c/users/steamuser/Desktop" @@ -1009,28 +1021,43 @@ stop_portwine () { for dir in "${DESKTOP_DIRS[@]}" ; do while IFS= read -r -d '' link_file; do LINKS+=("$link_file") - done < <(find "$dir" -type f -iname "*.lnk" -print0 2>/dev/null | sort -u) + done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u) done for link_file in "${LINKS[@]}"; do - if command -v exiftool &>/dev/null - link_drive=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(exiftool -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') - link_name=$(exiftool -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') - link_cmd=$(exiftool -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') + 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 grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; 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") + echo $link_path else - link_drive=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | cut -d: -f1 | awk '{print tolower($0)}') - link_path=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -LocalBasePath "$link_file" | sed -n 's/^Local Base Path\s*:\s*//p' | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/dosdevices/$link_drive|g" | sed 's/\\/\//g') - link_name=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -FileName "$link_file" | sed -n 's/^File Name\s*:\s*//p' | sed 's|\.lnk||') - link_cmd=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -CommandLineArguments "$link_file" | sed -n 's/^Command Line Arguments\s*:\s*//p') - fi - exe_path="$(realpath "$link_path")" - if ! [[ "$(grep -il "${exe_path}" "${PORT_WINE_PATH}"/*.desktop)" ]] || \ - ! [[ "$(grep -il "${exe_path}" "${HOME}/.local/share/applications"/*.desktop)" ]] || \ - ! [[ "$(grep -il "${exe_path}" "$(xdg-user-dir DESKTOP)"/*.desktop)" ]] ; then - create_shortcut_from_link - print_info "Created link for $link_name" + if ! command -v exiftool &>/dev/null ; then + print_warning "use portable exiftool" + 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" + if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; 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 + exe_path="$(realpath "${link_path}")" + create_shortcut_from_link + print_info "Created link for $link_name" done add_in_stop_portwine @@ -1329,7 +1356,7 @@ check_nvidia_rtx () { return 1 } -create_shortcut_from_link(){ +create_shortcut_from_link () { PORTPROTON_NAME="$link_name" PW_RESIZE_TO=128 @@ -1340,12 +1367,12 @@ create_shortcut_from_link(){ if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then if command -v exe-thumbnailer &>/dev/null ; then - exe-thumbnailer -s 128 "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + 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 "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + "${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" fi fi From 18dc83991dcf5791cf0bdc8ca6a38085643e870c Mon Sep 17 00:00:00 2001 From: Htylol Date: Fri, 19 Jul 2024 15:17:15 +0500 Subject: [PATCH 3/9] Added duplicate detection feature --- data_from_portwine/scripts/functions_helper | 88 ++++++++++++++------- 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 8477b3e..bf4cd7b 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1000,18 +1000,31 @@ stop_portwine () { fi 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 - 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//".desktop"/".lnk "}" - for skip in ${SHORTCUT_SKIP_LIST} ; do - SHORTCUT_SKIP_LIST_NEW+="-not -name "${skip}" " - done + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"###"/" "}" + else + SHORTCUT_SKIP_LIST="" 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+=( "${prefix_dir}/drive_c/users/steamuser/Desktop" "${prefix_dir}/drive_c/users/Public/Desktop" @@ -1019,6 +1032,7 @@ stop_portwine () { done for dir in "${DESKTOP_DIRS[@]}" ; do + shortcut_fix while IFS= read -r -d '' link_file; do LINKS+=("$link_file") 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 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 grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" ; then + 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" &>/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_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 @@ -1036,13 +1050,12 @@ stop_portwine () { 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") - echo $link_path else if ! command -v exiftool &>/dev/null ; then 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" - 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_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 @@ -1055,9 +1068,17 @@ stop_portwine () { yad_error "exiftool - broken!" fi fi - exe_path="$(realpath "${link_path}")" - create_shortcut_from_link - print_info "Created link for $link_name" + if ! exe_path="$(realpath "${link_path}")" ; then + try_remove_file "$link_file" + 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 add_in_stop_portwine @@ -1376,17 +1397,26 @@ create_shortcut_from_link () { fi fi - echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - echo "Name=${PORTPROTON_NAME}" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then + 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 check_flatpak - then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${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}\"" >> "${PW_NAME_DESKTOP}" fi else if check_flatpak - then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${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}\"" >> "${PW_NAME_DESKTOP}" fi fi { @@ -1395,19 +1425,21 @@ create_shortcut_from_link () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" - } >> "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - chmod u+x "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + echo "###AUTOCREATE###" + echo "###PREFIX:$prefix_name###" + } >> "${PW_NAME_DESKTOP}" + chmod u+x "${PW_NAME_DESKTOP}" if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then 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 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 - cp -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" "${HOME}/Рабочий стол/" + cp -f "${PW_NAME_DESKTOP}" "${HOME}/Рабочий стол/" 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 } From 13f288984085137a573c58a4784445ccb35b60dd Mon Sep 17 00:00:00 2001 From: Htylol Date: Fri, 19 Jul 2024 20:35:21 +0500 Subject: [PATCH 4/9] Optimization and fixed remove lnk, added dublicate dir --- data_from_portwine/scripts/functions_helper | 69 +++++++++++++-------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index bf4cd7b..9bf80a1 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -999,18 +999,25 @@ stop_portwine () { kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi - for check in ${PORT_WINE_PATH}/*.desktop ; do - if PREFIX_SKIP_LIST="$(grep -A1 '###AUTOCREATE###' "$check")" ; then - SHORTCUT_SKIP_LIST+="${check//"${PORT_WINE_PATH}/"/""}${PREFIX_SKIP_LIST//###AUTOCREATE###[[:space:]]###PREFIX:/"%"}" - fi - done + SHORTCUT_SKIP_LIST="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - if [[ ${SHORTCUT_SKIP_LIST} != "*.desktop%" ]] ; then + if [[ ${SHORTCUT_SKIP_LIST} == "" ]] ; then + export DESKTOP_LIST_EMPTY="1" + elif [[ ${SHORTCUT_SKIP_LIST} == '###PREFIX:'* ]] ; then + SHORTCUT_SKIP_LIST="$(grep -il '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" + SHORTCUT_SKIP_LIST+="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###PREFIX:/"%"}" 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//"###"/" "}" else - SHORTCUT_SKIP_LIST="" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//:###PREFIX:/"%"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//[[:space:]]/" "}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###/""}" + SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" fi shortcut_fix () { @@ -1070,13 +1077,13 @@ stop_portwine () { fi if ! exe_path="$(realpath "${link_path}")" ; then try_remove_file "$link_file" - print_warning "Removed broken 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" + if [[ "${SHORTCUT_DUBLICATE}" == "true" ]] ; then + print_info "Created link for dublicate: $link_name - $prefix_name" else - print_info "Created link for $link_name" + print_info "Created link for: $link_name" fi fi done @@ -1397,13 +1404,15 @@ create_shortcut_from_link () { fi fi - if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then - 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" + if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] \ + && [[ "$DESKTOP_LIST_EMPTY" != "1" ]] ; then + rm -f "${link_file}" + create_new_dir "${PORT_WINE_PATH}/dublicate" + PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name}.desktop" + export SHORTCUT_DUBLICATE="true" else PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - export CREATE_WITH_PREFIX="" + export SHORTCUT_DUBLICATE="" fi echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" @@ -1425,8 +1434,7 @@ create_shortcut_from_link () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" - echo "###AUTOCREATE###" - echo "###PREFIX:$prefix_name###" + echo "###PREFIX:${prefix_name}###" } >> "${PW_NAME_DESKTOP}" chmod u+x "${PW_NAME_DESKTOP}" @@ -4699,6 +4707,7 @@ portwine_create_shortcut () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" + echo "###PREFIX:${PW_PREFIX_NAME}###" } >> "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" @@ -4762,18 +4771,24 @@ portwine_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}" "${STEAM_SCRIPTS}"/*.sh)" &>/dev/null + rm_helper="$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop 2>/dev/null)" + rm_helper="${rm_helper//"${PORT_WINE_PATH}/"/""}" + rm_helper="${rm_helper//".desktop"/""}" + rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop/${rm_helper}.lnk" + rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop/${rm_helper}.lnk" + + # rm -f "${STEAM_SCRIPTS}/${rm_helper}.sh" + + rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" + rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" + if [[ -d "${HOME}/Desktop" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" elif [[ -d "${HOME}/Рабочий стол" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" elif [[ $(xdg-user-dir DESKTOP) ]] ; then - rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" fi - rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop"/*.lnk)" &>/dev/null - rm -f "$(grep -il "${portwine_exe}" " ${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop"/*.lnk)" &>/dev/null } portwine_missing_shortcut () { From 42dfd9c8d32acce846d6ef0e8da3b46edcbd980a Mon Sep 17 00:00:00 2001 From: Htylol Date: Sat, 20 Jul 2024 03:29:03 +0500 Subject: [PATCH 5/9] Added gui for dublicate shortcuts, drop skip --- data_from_portwine/scripts/functions_helper | 154 ++++++++++---------- data_from_portwine/scripts/start.sh | 6 +- data_from_portwine/themes/classic.pptheme | 3 + data_from_portwine/themes/compact.pptheme | 7 +- data_from_portwine/themes/default.pptheme | 6 +- 5 files changed, 97 insertions(+), 79 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 9bf80a1..6a18985 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -999,38 +999,6 @@ stop_portwine () { kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi - SHORTCUT_SKIP_LIST="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - - if [[ ${SHORTCUT_SKIP_LIST} == "" ]] ; then - export DESKTOP_LIST_EMPTY="1" - elif [[ ${SHORTCUT_SKIP_LIST} == '###PREFIX:'* ]] ; then - SHORTCUT_SKIP_LIST="$(grep -il '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - SHORTCUT_SKIP_LIST+="$(grep -i '###PREFIX:' ${PORT_WINE_PATH}/*.desktop 2>/dev/null)" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###PREFIX:/"%"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" - else - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//"${PORT_WINE_PATH}/"/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//:###PREFIX:/"%"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//" "/"*"}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//[[:space:]]/" "}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//###/""}" - SHORTCUT_SKIP_LIST="${SHORTCUT_SKIP_LIST//".desktop"/".lnk"}" - fi - - 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+=( "${prefix_dir}/drive_c/users/steamuser/Desktop" @@ -1039,7 +1007,6 @@ stop_portwine () { done for dir in "${DESKTOP_DIRS[@]}" ; do - shortcut_fix while IFS= read -r -d '' link_file; do LINKS+=("$link_file") done < <(find "$dir" -type f -iname "*.lnk" ${SHORTCUT_SKIP_LIST_NEW} -print0 2>/dev/null | sort -u) @@ -1404,9 +1371,7 @@ create_shortcut_from_link () { fi fi - if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] \ - && [[ "$DESKTOP_LIST_EMPTY" != "1" ]] ; then - rm -f "${link_file}" + if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then create_new_dir "${PORT_WINE_PATH}/dublicate" PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name}.desktop" export SHORTCUT_DUBLICATE="true" @@ -1414,6 +1379,7 @@ create_shortcut_from_link () { PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" export SHORTCUT_DUBLICATE="" fi + rm -f "${link_file}" echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}" @@ -1434,20 +1400,23 @@ create_shortcut_from_link () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" - echo "###PREFIX:${prefix_name}###" } >> "${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 [[ -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)" + 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 } @@ -1840,6 +1809,45 @@ pw_find_exe () { fi } +pw_dublicate () { + orig_IFS="$IFS" && IFS=$'\n' + PW_DUBLICATE="$(ls "${PORT_WINE_PATH}"/dublicate/ | grep .desktop)" + for PW_DUBLICATE_FILES_D in ${PW_DUBLICATE} ; do + PW_NAME_D_ICON_D="$(grep Icon "${PORT_WINE_PATH}/dublicate/${PW_DUBLICATE_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_DUBLICATE_HELPER_D="${PW_DUBLICATE_FILES_D// /@_@}" + PW_GENERATE_BUTTONS_D+="--field= ${PW_DUBLICATE_FILES_D//".desktop"/""}!${PW_NAME_D_ICON_48_D}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DUBLICATE_HELPER_D}"\"%" + done + + export USE_DUBLICATE_GUI="1" + + IFS="$orig_IFS" + old_IFS=$IFS && IFS="%" + GUI_DUBLICATE="$("${pw_yad}" --width="${PW_DUBLICATE_SIZE_W}" --height="${PW_DUBLICATE_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} 2>/dev/null)" + YAD_STATUS="$?" + IFS="$orig_IFS" + + if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then + exit 0 + fi + + pw_yad_set_form + [[ ! -z "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in + *.desktop) run_desktop_b_click ;; + esac +} + pw_create_unique_exe () { BASEDIR_GAME="$(dirname "$portwine_exe")" if [[ -d "$BASEDIR_GAME" ]] ; then @@ -4679,13 +4687,9 @@ portwine_create_shortcut () { fi name_desktop="$(echo "${name_desktop}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g")" name_desktop_png="${name_desktop// /_}" - create_menu_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $2}') - create_desktop_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $3}') - create_menu_steam_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $4}') - - PW_SHORTCUT_MENU="$create_menu_desktop_shortcut" - PW_SHORTCUT_DESKTOP="$create_desktop_desktop_shortcut" - PW_SHORTCUT_STEAM="$create_menu_steam_shortcut" + PW_SHORTCUT_MENU=$(echo "$OUTPUT" | awk -F'|' '{print $2}') + PW_SHORTCUT_DESKTOP=$(echo "$OUTPUT" | awk -F'|' '{print $3}') + PW_SHORTCUT_STEAM=$(echo "$OUTPUT" | awk -F'|' '{print $4}') edit_user_conf_from_gui PW_SHORTCUT_MENU PW_SHORTCUT_DESKTOP PW_SHORTCUT_STEAM @@ -4707,16 +4711,15 @@ portwine_create_shortcut () { echo "StartupNotify=true" echo "Path=${PORT_SCRIPTS_PATH}/" echo "Icon=${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" - echo "###PREFIX:${PW_PREFIX_NAME}###" } >> "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" - if [[ "${create_menu_desktop_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_MENU}" == "TRUE" ]] ; then try_remove_file "${HOME}/.local/share/applications/${name_desktop}.desktop" cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/.local/share/applications/" fi - if [[ "${create_desktop_desktop_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_DESKTOP}" == "TRUE" ]] ; then if [[ -d "${HOME}/Desktop" ]] ; then cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/Desktop/" elif [[ -d "${HOME}/Рабочий стол" ]] ; then @@ -4726,7 +4729,7 @@ portwine_create_shortcut () { fi fi - if [[ "${create_menu_steam_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_STEAM}" == "TRUE" ]] ; then export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts" create_new_dir "${STEAM_SCRIPTS}" echo "#!/usr/bin/env bash" > "${STEAM_SCRIPTS}/${name_desktop}.sh" @@ -4771,23 +4774,15 @@ portwine_create_shortcut () { } portwine_delete_shortcut () { - rm_helper="$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop 2>/dev/null)" - rm_helper="${rm_helper//"${PORT_WINE_PATH}/"/""}" - rm_helper="${rm_helper//".desktop"/""}" - rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/steamuser/Desktop/${rm_helper}.lnk" - rm -f "${PORT_WINE_PATH}/data/prefixes/$PW_PREFIX_NAME/drive_c/users/Public/Desktop/${rm_helper}.lnk" - - # rm -f "${STEAM_SCRIPTS}/${rm_helper}.sh" - - rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" - rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" - + 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}" "${STEAM_SCRIPTS}"/*.sh)" &>/dev/null if [[ -d "${HOME}/Desktop" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null elif [[ -d "${HOME}/Рабочий стол" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" &>/dev/null elif [[ $(xdg-user-dir DESKTOP) ]] ; then - rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" + rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null fi } @@ -5196,13 +5191,22 @@ export -f button_click_start run_desktop_b_click () { [[ ! -z "$1" ]] && echo "$1" > "${PW_TMPFS_PATH}/tmp_yad_form" - 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}')" + if [[ "${USE_DUBLICATE_GUI}" == "1" ]] ; then + if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then + kill -s SIGUSR1 $(pgrep -a yad | grep "\--width="${PW_DUBLICATE_SIZE_W}" \--height="${PW_DUBLICATE_SIZE_H}"" | awk '{print $1}') > /dev/null 2>&1 + fi + if check_flatpak + then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/dublicate/${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}/dublicate/${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 fi print_info "Restarting PP after choose desktop file..." diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index c1c376d..c7d717d 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -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 +unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR USE_DUBLICATE_GUI export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* @@ -629,6 +629,9 @@ 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}/dublicate"/* &>/dev/null ; then + PW_GENERATE_BUTTONS+="--field= $(gettext "Dublicate")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_dublicate\"%" + 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"}" @@ -837,6 +840,7 @@ fi gui_credits) gui_credits ;; pw_start_cont_xterm) pw_start_cont_xterm ;; pw_find_exe) pw_find_exe ;; + pw_dublicate) pw_dublicate ;; PW_*) pw_autoinstall_from_db ;; *.desktop) run_desktop_b_click ;; 1|252|*) exit 0 ;; diff --git a/data_from_portwine/themes/classic.pptheme b/data_from_portwine/themes/classic.pptheme index 23caed2..67eeb32 100755 --- a/data_from_portwine/themes/classic.pptheme +++ b/data_from_portwine/themes/classic.pptheme @@ -23,6 +23,9 @@ export TAB_SIZE=28 export PW_MAIN_SIZE_W=1100 export PW_MAIN_SIZE_H=350 +export PW_DUBLICATE_SIZE_W=800 +export PW_DUBLICATE_SIZE_H=350 + export PW_START_SIZE_W=600 export PW_START_SIZE_H=350 export PW_TAB_POSITON=top diff --git a/data_from_portwine/themes/compact.pptheme b/data_from_portwine/themes/compact.pptheme index 8e627df..a0349ba 100755 --- a/data_from_portwine/themes/compact.pptheme +++ b/data_from_portwine/themes/compact.pptheme @@ -24,10 +24,13 @@ export BUTTON_SIZE=32 # 24, 28, 32, 36, 40 export TAB_SIZE=32 # 24, 28, 32, 36, 40 -export PW_MAIN_SIZE_W=1 +export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=350 -export PW_START_SIZE_W=1 +export PW_DUBLICATE_SIZE_W=800 +export PW_DUBLICATE_SIZE_H=350 + +export PW_START_SIZE_W=500 export PW_START_SIZE_H=350 export PW_TAB_POSITON=top diff --git a/data_from_portwine/themes/default.pptheme b/data_from_portwine/themes/default.pptheme index 3ee636d..14b0484 100755 --- a/data_from_portwine/themes/default.pptheme +++ b/data_from_portwine/themes/default.pptheme @@ -31,9 +31,13 @@ export BUTTON_SIZE=28 # 24, 28, 32, 36, 40 export TAB_SIZE=32 # 24, 28, 32, 36, 40 # размер главного меню -export PW_MAIN_SIZE_W=1 +export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=330 +# размер окна для дубликатов +export PW_DUBLICATE_SIZE_W=800 +export PW_DUBLICATE_SIZE_H=330 + # размер меню запуска и положения табов export PW_START_SIZE_W=800 export PW_START_SIZE_H=330 From c08f0142abf4a7d378b73c4940e2f2d0294bae69 Mon Sep 17 00:00:00 2001 From: Htylol Date: Sat, 20 Jul 2024 16:41:41 +0500 Subject: [PATCH 6/9] Added numbering for duplicates and determining their uniqueness --- data_from_portwine/scripts/functions_helper | 29 ++++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 6a18985..56e6bde 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1009,7 +1009,7 @@ stop_portwine () { for dir in "${DESKTOP_DIRS[@]}" ; do while IFS= read -r -d '' link_file; do 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" -print0 2>/dev/null | sort -u) done for link_file in "${LINKS[@]}"; do @@ -1048,7 +1048,7 @@ stop_portwine () { else create_shortcut_from_link if [[ "${SHORTCUT_DUBLICATE}" == "true" ]] ; then - print_info "Created link for dublicate: $link_name - $prefix_name" + print_info "Created link for dublicate: $link_name - $prefix_name [$number_dublication]" else print_info "Created link for: $link_name" fi @@ -1371,15 +1371,30 @@ create_shortcut_from_link () { fi fi + rm -f "${link_file}" if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then - create_new_dir "${PORT_WINE_PATH}/dublicate" - PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name}.desktop" - export SHORTCUT_DUBLICATE="true" + if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" &>/dev/null ; then + create_new_dir "${PORT_WINE_PATH}/dublicate" + SHORTCUT_DUBLICATE="true" + number_dublication="1" + if [[ -f "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" ]] ; then + number_dublication="$(ls "${PORT_WINE_PATH}/dublicate"/ 2>/dev/null)" + number_dublication="${number_dublication//*[/}" + number_dublication="${number_dublication//]*/}" + if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" &>/dev/null ; then + number_dublication="$(($number_dublication+1))" + else + exit 0 + fi + fi + PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" + else + exit 0 + fi else PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - export SHORTCUT_DUBLICATE="" + SHORTCUT_DUBLICATE="" fi - rm -f "${link_file}" echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}" From 2633d813dcb99518c53fda0661283e6868461dd6 Mon Sep 17 00:00:00 2001 From: Htylol Date: Sat, 20 Jul 2024 16:57:38 +0500 Subject: [PATCH 7/9] Title correction, added new --- data_from_portwine/scripts/functions_helper | 90 +++++++++++++-------- data_from_portwine/scripts/start.sh | 8 +- data_from_portwine/themes/classic.pptheme | 4 +- data_from_portwine/themes/compact.pptheme | 4 +- data_from_portwine/themes/default.pptheme | 4 +- 5 files changed, 65 insertions(+), 45 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 56e6bde..a45e34d 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1047,8 +1047,8 @@ stop_portwine () { print_warning "Removed broken link for: $link_name" else create_shortcut_from_link - if [[ "${SHORTCUT_DUBLICATE}" == "true" ]] ; then - print_info "Created link for dublicate: $link_name - $prefix_name [$number_dublication]" + if [[ "${SHORTCUT_DUPLICATE}" == "true" ]] ; then + print_info "Created link for duplicate: $link_name - $prefix_name [$number_duplication]" else print_info "Created link for: $link_name" fi @@ -1361,7 +1361,7 @@ create_shortcut_from_link () { try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then - if command -v exe-thumbnailer &>/dev/null ; then + if command -v exe-thumbnailer &>/dev/null && [[ ! $(sestatus | grep "Current mode: *enforcing" &>/dev/null) ]] ; 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/" \ @@ -1374,26 +1374,48 @@ create_shortcut_from_link () { rm -f "${link_file}" 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}/dublicate" - SHORTCUT_DUBLICATE="true" - number_dublication="1" - if [[ -f "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" ]] ; then - number_dublication="$(ls "${PORT_WINE_PATH}/dublicate"/ 2>/dev/null)" - number_dublication="${number_dublication//*[/}" - number_dublication="${number_dublication//]*/}" - if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" &>/dev/null ; then - number_dublication="$(($number_dublication+1))" + 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 exit 0 fi + else + number_duplication="1" fi - PW_NAME_DESKTOP="${PORT_WINE_PATH}/dublicate/${PORTPROTON_NAME} - ${prefix_name} [$number_dublication].desktop" + PW_NAME_DESKTOP="${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name} [$number_duplication].desktop" + SHORTCUT_DUPLICATE="true" else exit 0 fi else PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" - SHORTCUT_DUBLICATE="" + SHORTCUT_DUPLICATE="" fi echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" @@ -1824,11 +1846,12 @@ pw_find_exe () { fi } -pw_dublicate () { +pw_duplicate () { + export USE_DUPLICATE_GUI="1" orig_IFS="$IFS" && IFS=$'\n' - PW_DUBLICATE="$(ls "${PORT_WINE_PATH}"/dublicate/ | grep .desktop)" - for PW_DUBLICATE_FILES_D in ${PW_DUBLICATE} ; do - PW_NAME_D_ICON_D="$(grep Icon "${PORT_WINE_PATH}/dublicate/${PW_DUBLICATE_FILES_D}" | awk -F= '{print $2}')" + 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}" ]] \ @@ -1836,31 +1859,27 @@ pw_dublicate () { then convert "${PW_NAME_D_ICON_D}" -resize 48x48 "${PW_NAME_D_ICON_48_D}" fi - PW_DUBLICATE_HELPER_D="${PW_DUBLICATE_FILES_D// /@_@}" - PW_GENERATE_BUTTONS_D+="--field= ${PW_DUBLICATE_FILES_D//".desktop"/""}!${PW_NAME_D_ICON_48_D}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DUBLICATE_HELPER_D}"\"%" + 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 - - export USE_DUBLICATE_GUI="1" - IFS="$orig_IFS" + old_IFS=$IFS && IFS="%" - GUI_DUBLICATE="$("${pw_yad}" --width="${PW_DUBLICATE_SIZE_W}" --height="${PW_DUBLICATE_SIZE_H}" \ + PW_DUPLICATE_GUI="$("${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} 2>/dev/null)" - YAD_STATUS="$?" IFS="$orig_IFS" + YAD_STATUS="$?" - if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then - exit 0 - fi + if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi pw_yad_set_form - [[ ! -z "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in - *.desktop) run_desktop_b_click ;; - esac + if [[ "$PW_YAD_SET" == *.desktop ]] ; then + run_desktop_b_click + fi } pw_create_unique_exe () { @@ -4791,6 +4810,7 @@ portwine_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 @@ -5206,13 +5226,13 @@ export -f button_click_start run_desktop_b_click () { [[ ! -z "$1" ]] && echo "$1" > "${PW_TMPFS_PATH}/tmp_yad_form" - if [[ "${USE_DUBLICATE_GUI}" == "1" ]] ; then + 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_DUBLICATE_SIZE_W}" \--height="${PW_DUBLICATE_SIZE_H}"" | awk '{print $1}') > /dev/null 2>&1 + 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}/dublicate/${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}/dublicate/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + 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 diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index c7d717d..37cd44d 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -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_DUBLICATE_GUI +unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR USE_DUPLICATE_GUI export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* @@ -629,8 +629,8 @@ 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}/dublicate"/* &>/dev/null ; then - PW_GENERATE_BUTTONS+="--field= $(gettext "Dublicate")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_dublicate\"%" + if grep -i "[Desktop Entry]" "${PORT_WINE_PATH}/duplicate"/* &>/dev/null ; then + PW_GENERATE_BUTTONS+="--field= $(gettext "Duplicates")!${PW_GUI_ICON_PATH}/find_48.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}')" @@ -840,7 +840,7 @@ fi gui_credits) gui_credits ;; pw_start_cont_xterm) pw_start_cont_xterm ;; pw_find_exe) pw_find_exe ;; - pw_dublicate) pw_dublicate ;; + pw_duplicate) pw_duplicate ;; PW_*) pw_autoinstall_from_db ;; *.desktop) run_desktop_b_click ;; 1|252|*) exit 0 ;; diff --git a/data_from_portwine/themes/classic.pptheme b/data_from_portwine/themes/classic.pptheme index 67eeb32..93af8e2 100755 --- a/data_from_portwine/themes/classic.pptheme +++ b/data_from_portwine/themes/classic.pptheme @@ -23,8 +23,8 @@ export TAB_SIZE=28 export PW_MAIN_SIZE_W=1100 export PW_MAIN_SIZE_H=350 -export PW_DUBLICATE_SIZE_W=800 -export PW_DUBLICATE_SIZE_H=350 +export PW_DUPLICATE_SIZE_W=1100 +export PW_DUPLICATE_SIZE_H=350 export PW_START_SIZE_W=600 export PW_START_SIZE_H=350 diff --git a/data_from_portwine/themes/compact.pptheme b/data_from_portwine/themes/compact.pptheme index a0349ba..6638dda 100755 --- a/data_from_portwine/themes/compact.pptheme +++ b/data_from_portwine/themes/compact.pptheme @@ -27,8 +27,8 @@ export TAB_SIZE=32 # 24, 28, 32, 36, 40 export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=350 -export PW_DUBLICATE_SIZE_W=800 -export PW_DUBLICATE_SIZE_H=350 +export PW_DUPLICATE_SIZE_W=1000 +export PW_DUPLICATE_SIZE_H=350 export PW_START_SIZE_W=500 export PW_START_SIZE_H=350 diff --git a/data_from_portwine/themes/default.pptheme b/data_from_portwine/themes/default.pptheme index 14b0484..b1c61c6 100755 --- a/data_from_portwine/themes/default.pptheme +++ b/data_from_portwine/themes/default.pptheme @@ -35,8 +35,8 @@ export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=330 # размер окна для дубликатов -export PW_DUBLICATE_SIZE_W=800 -export PW_DUBLICATE_SIZE_H=330 +export PW_DUPLICATE_SIZE_W=1000 +export PW_DUPLICATE_SIZE_H=330 # размер меню запуска и положения табов export PW_START_SIZE_W=800 From 59e95078c5a58f8248f68d24a4d8fff00de6cc21 Mon Sep 17 00:00:00 2001 From: Htylol Date: Sun, 21 Jul 2024 19:11:49 +0500 Subject: [PATCH 8/9] Fixed for Icon File Name --- data_from_portwine/scripts/functions_helper | 30 +++++++++++++-------- data_from_portwine/scripts/start.sh | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index a45e34d..48e1fd3 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1015,7 +1015,8 @@ stop_portwine () { for link_file in "${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 grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; then + 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 @@ -1027,9 +1028,10 @@ stop_portwine () { else if ! command -v exiftool &>/dev/null ; then print_warning "use portable exiftool" - 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" - if grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" &>/dev/null ; 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 @@ -1865,21 +1867,27 @@ pw_duplicate () { IFS="$orig_IFS" old_IFS=$IFS && IFS="%" - PW_DUPLICATE_GUI="$("${pw_yad}" --width="${PW_DUPLICATE_SIZE_W}" --height="${PW_DUPLICATE_SIZE_H}" \ + "${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} 2>/dev/null)" + --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} \ + --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null IFS="$orig_IFS" - YAD_STATUS="$?" - - if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi pw_yad_set_form - if [[ "$PW_YAD_SET" == *.desktop ]] ; then - run_desktop_b_click - fi + [[ ! -z "$PW_YAD_SET" ]] && 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 () { diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 37cd44d..6ddceb7 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -630,7 +630,7 @@ else 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}/find_48.svg!:FBTN%@bash -c \"button_click pw_duplicate\"%" + 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}')" From 6a8e4d5a900125a5dac50de53b0915aa8e2817df Mon Sep 17 00:00:00 2001 From: Htylol Date: Tue, 23 Jul 2024 09:21:54 +0500 Subject: [PATCH 9/9] fix for selinux --- data_from_portwine/scripts/functions_helper | 25 ++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 48e1fd3..bbc4aa5 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1363,7 +1363,12 @@ create_shortcut_from_link () { try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then - if command -v exe-thumbnailer &>/dev/null && [[ ! $(sestatus | grep "Current mode: *enforcing" &>/dev/null) ]] ; 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/" \ @@ -1873,20 +1878,20 @@ pw_duplicate () { --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":0 2>/dev/null + --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null IFS="$orig_IFS" pw_yad_set_form - [[ ! -z "$PW_YAD_SET" ]] && case "$PW_YAD_SET" in + case "$PW_YAD_SET" in *.desktop) - run_desktop_b_click - ;; + 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 - ;; + export SKIP_CHECK_UPDATES=1 + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; esac }