diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot index 2df5c6b..428a272 100644 --- a/data_from_portwine/locales/PortProton.pot +++ b/data_from_portwine/locales/PortProton.pot @@ -44,6 +44,10 @@ msgstr "" msgid "Newest DXVK, VKD3D, D8VK (Vulkan v1.3+)" msgstr "" +msgid "A higher number of duplicate desktop files were found for this file." + "\\nShould I delete the extra ones or not?" +msgstr "" + msgid "Gallium Nine (DirectX 9 for MESA)" msgstr "" diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po index 1082ec0..1401789 100644 --- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po +++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po @@ -1878,6 +1878,11 @@ msgstr "Agregar acceso directo a la biblioteca de STEAM" msgid "Name" msgstr "Nombre" +msgid "" +"A higher number of duplicate desktop files were found for this file." +"\\nShould I delete the extra ones or not?" +msgstr "" + msgid "For adding shortcut to STEAM, needed restart.\\n\\nRestart STEAM now?" msgstr "" "Para agregar el acceso directo a STEAM, es necesario reiniciar.\\n\\¿Quieres " diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po index 1a49c8b..ffee825 100644 --- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po +++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po @@ -61,6 +61,13 @@ msgstr "Скачать другие версии wine" msgid "CREATE SHORTCUT" msgstr "СОЗДАТЬ ЯРЛЫК" +msgid "" +"A higher number of duplicate desktop files were found for this file." +"\\nShould I delete the extra ones or not?" +msgstr "" +"Для этого файла было обнаружено большее количество дубликатов\\nфайлов " +"рабочего стола. Удалить лишние или нет?" + msgid "Create shortcut for select file..." msgstr "Создать ярлык для выбранного файла..." diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index abdbbc0..b1d4700 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -38,6 +38,18 @@ print_wrapped () { } export -f print_wrapped +make_abbreviation () { + local words new_word i + words=($1) + # Создаем новое слово, состоящее из начальных букв слов + new_word="${words[0]:0:1}" + for ((i=1 ; i<${#words[@]} ; i++)) ; do + new_word+="${words[$i]:0:1}" + done + echo "$new_word" +} +export -f make_abbreviation + check_variables () { [[ -z ${!1} ]] && export $1="$2" ;} add_to_var () { @@ -818,7 +830,7 @@ debug_timer () { # Поиск нужного .desktop файла по $portwine_exe search_desktop_file () { - local count desktop_file desktop_file_new EXEC_DESKTOP EXEC_DESKTOP_NEW TIME_TOTAL i j df + local count desktop_file desktop_file_new EXEC_DESKTOP TIME_CURRENT_PROXY EXEC_DESKTOP_NEW TIME_TOTAL i j df unset TIME_CURRENT_ARRAY DESKTOP_FILES_ARRAY count=0 for desktop_file in "$PORT_WINE_PATH"/* ; do @@ -832,50 +844,53 @@ search_desktop_file () { else EXEC_DESKTOP=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} fi - EXEC_DESKTOP_NEW=${EXEC_DESKTOP//\"/} - fi - if [[ $line =~ ^#Time= ]] && [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then - TIME_CURRENT=${line//#Time=/} fi + [[ $line =~ ^#Time= ]] && TIME_CURRENT_PROXY=${line//#Time=/} done < "$desktop_file" + # Для конвертации существующих .desktop файлов flatpak в натив и наоборот + if [[ $EXEC_DESKTOP =~ ^"Exec=flatpak run ru.linux_gaming.PortProton " ]] ; then + sed -i "s|Exec=flatpak run ru.linux_gaming.PortProton|Exec=env \"$PORT_SCRIPTS_PATH/start.sh\"|" "$desktop_file" + elif [[ $EXEC_DESKTOP =~ ^"Exec=env \"$PORT_SCRIPTS_PATH/start.sh\" " ]] ; then + sed -i "s|Exec=env \"$PORT_SCRIPTS_PATH/start.sh\"|Exec=flatpak run ru.linux_gaming.PortProton|" "$desktop_file" + fi + EXEC_DESKTOP_NEW=${EXEC_DESKTOP//\"/} if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then - # Когда новый .desktop файл - if [[ $TIME_CURRENT == "" ]] ; then - echo "#NEW_DESKTOP" >> "$desktop_file" - TIME_CURRENT="0" - # Для битых #Time= - else + if [[ -n $TIME_CURRENT_PROXY ]] ; then + TIME_CURRENT=$TIME_CURRENT_PROXY + TIME_CURRENT_ARRAY+=($TIME_CURRENT) + # Если существует несколько .desktop файлов на один и тот же .exe файл, + # то среди них время берётся из того .desktop файла, в котором проведено дольше времени + # и данное время будет потом записываться во все .desktop файлы у которых общий .exe файл + if [[ -n ${TIME_CURRENT_ARRAY[1]} ]] ; then + for i in "${!TIME_CURRENT_ARRAY[@]}" ; do + for j in "${!TIME_CURRENT_ARRAY[@]}" ; do + if (( ${TIME_CURRENT_ARRAY[$i]} > ${TIME_CURRENT_ARRAY[$j]} )) ; then + tmp=${TIME_CURRENT_ARRAY[$i]} + TIME_CURRENT_ARRAY[i]=${TIME_CURRENT_ARRAY[$j]} + TIME_CURRENT_ARRAY[j]=$tmp + fi + done + done + fi + TIME_CURRENT="${TIME_CURRENT_ARRAY[0]}" + # Для битых #Time= if [[ ! $TIME_CURRENT =~ [0-9]+ ]] \ - || (( $TIME_CURRENT >= 999999999 )) ; then + || (( TIME_CURRENT >= 999999999 )) ; then TIME_CURRENT="0" fi fi - TIME_CURRENT_ARRAY+=($TIME_CURRENT) - unset TIME_CURRENT DESKTOP_FILES_ARRAY["$count"]="$desktop_file" (( count++ )) fi + unset TIME_CURRENT_PROXY fi fi done IFS="$orig_IFS" - # Если существуют .desktop файлы на один и тот же .exe файл, то среди них выбирается - # текущее время берётся из того .desktop файла, в котором проведено больше времени - # и запись этого большего времени будет потом записываться во все .desktop файлы - # у которых общий .exe файл, это нужно для того, чтобы в главном меню .desktop файлы - # упорядочивались нормально. - for i in "${!TIME_CURRENT_ARRAY[@]}" ; do - for j in "${!TIME_CURRENT_ARRAY[@]}" ; do - if (( ${TIME_CURRENT_ARRAY[$i]} > ${TIME_CURRENT_ARRAY[$j]} )) ; then - tmp=${TIME_CURRENT_ARRAY[$i]} - TIME_CURRENT_ARRAY[i]=${TIME_CURRENT_ARRAY[$j]} - TIME_CURRENT_ARRAY[j]=$tmp - fi - done - done + [[ -z $TIME_CURRENT ]] && TIME_CURRENT=0 + export TIME_CURRENT - TIME_CURRENT="${TIME_CURRENT_ARRAY[0]}" if [[ -n $PW_TIME_IN_GAME ]] ; then TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME )) for df in "${DESKTOP_FILES_ARRAY[@]}" ; do @@ -890,8 +905,76 @@ search_desktop_file () { fi } +create_pw_comment () { + search_desktop_file + unset DESKTOP_NAME_FILE PW_SHORTCUT_PROXY + if [[ -n ${DESKTOP_FILES_ARRAY[0]} ]] ; then + for df in "${DESKTOP_FILES_ARRAY[@]}" ; do + df="${df//"$PORT_WINE_PATH/"/}" + DESKTOP_NAME_FILE="${df//.desktop/}" + done + fi + if [[ -z "${PW_COMMENT_DB}" ]] ; then + [[ $FILE_DESCRIPTION != "" ]] && FILE_DESCRIPTION_ABBR=$(make_abbreviation "$FILE_DESCRIPTION") + [[ $PORTPROTON_NAME != "" ]] && PORTPROTON_NAME_ABBR=$(make_abbreviation "$PORTPROTON_NAME") + if [[ -n $DESKTOP_NAME_FILE ]] && [[ $DESKTOP_NAME_FILE != "" ]] ; then + PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "$DESKTOP_NAME_FILE" "50")$(seconds_to_time "$TIME_CURRENT")" + PW_SHORTCUT_PROXY="$DESKTOP_NAME_FILE" + elif [[ ${PORTPROTON_NAME^^} =~ ${PORTWINE_DB^^} ]] && [[ ${PORTPROTON_NAME^^} != "${PORTWINE_DB^^}" ]] ; then + PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "$PORTPROTON_NAME" "50")$(seconds_to_time "$TIME_CURRENT")" + PW_SHORTCUT_PROXY="$PORTPROTON_NAME" + elif (( ${#PORTPROTON_NAME_ABBR} > 2 )) && [[ ${PORTPROTON_NAME_ABBR^^} =~ ${PORTWINE_DB^^} ]] ; then + PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "$PORTPROTON_NAME" "50")$(seconds_to_time "$TIME_CURRENT")" + PW_SHORTCUT_PROXY="$PORTPROTON_NAME" + elif [[ ${FILE_DESCRIPTION^^} =~ ${PORTWINE_DB^^} ]] && [[ ${FILE_DESCRIPTION^^} != "${PORTWINE_DB^^}" ]] ; then + PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "$FILE_DESCRIPTION" "50")$(seconds_to_time "$TIME_CURRENT")" + PW_SHORTCUT_PROXY="$FILE_DESCRIPTION" + elif (( ${#FILE_DESCRIPTION_ABBR} > 2 )) && [[ ${FILE_DESCRIPTION_ABBR^^} =~ ${PORTWINE_DB^^} ]] ; then + PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "$FILE_DESCRIPTION" "50")$(seconds_to_time "$TIME_CURRENT")" + PW_SHORTCUT_PROXY="$FILE_DESCRIPTION" + else + unset PORTWINE_DB_PROXY PORTWINE_DB_NEW + PORTWINE_DB="${PORTWINE_DB//_/ }" + if [[ ${PORTWINE_DB:0:1} =~ [a-z] ]] ; then + PORTWINE_DB_UPPER="${PORTWINE_DB^^}" + PORTWINE_DB="${PORTWINE_DB_UPPER:0:1}${PORTWINE_DB:1}" + fi + if (( ${#PORTWINE_DB} > 3 )) ; then + for ((i=0 ; i<${#PORTWINE_DB} ; i++)) ; do + if [[ ${PORTWINE_DB:i:2} =~ ([a-z][A-Z]|[a-z][0-9]) ]] \ + && [[ ! ${PORTWINE_DB:i:3} =~ ([a-z][A-Z]" "|[a-z][0-9]" ") ]] ; then + PORTWINE_DB_PROXY+="${PORTWINE_DB:i:1} " + elif [[ ${PORTWINE_DB:i:3} =~ [0-9][0-9][a-zA-Z] ]] ; then + PORTWINE_DB_PROXY+="${PORTWINE_DB:i:2} " + ((i++)) + else + PORTWINE_DB_PROXY+="${PORTWINE_DB:i:1}" + fi + done + for ((i=0 ; i<${#PORTWINE_DB_PROXY} ; i++)) ; do + if [[ ${PORTWINE_DB_PROXY:i:2} =~ " "[a-z] ]] ; then + PORTWINE_DB_UPPER="${PORTWINE_DB_PROXY:i:2}" + PORTWINE_DB_NEW+="${PORTWINE_DB_UPPER^^}" + ((i++)) + else + PORTWINE_DB_NEW+="${PORTWINE_DB_PROXY:i:1}" + fi + done + else + PORTWINE_DB_NEW="$PORTWINE_DB" + fi + PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "$PORTWINE_DB_NEW" "50")$(seconds_to_time "$TIME_CURRENT")" + PW_SHORTCUT_PROXY="$PORTWINE_DB_NEW" + fi + else + PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time "$TIME_CURRENT")" + PW_SHORTCUT_PROXY="$DESKTOP_NAME_FILE" + fi +} + # Конвертация секунд в дни, часы, минуты seconds_to_time () { + [[ ! $DESKTOP_WITH_TIME == enabled ]] && return 0 [[ -z $1 ]] && return 0 local seconds days hours minutes seconds=$1 @@ -2333,25 +2416,25 @@ pw_create_gui_png () { export name_desktop_png="bat" return 0 fi - if [[ -z "$PORTPROTON_NAME" ]] \ + || [[ -z "$FILE_DESCRIPTION" ]] \ || [[ "$PW_NO_RESTART_PPDB" == "1" ]] then if [[ -n "${PORTWINE_CREATE_SHORTCUT_NAME}" ]] ; then PORTPROTON_NAME="${PORTWINE_CREATE_SHORTCUT_NAME}" else if command -v exiftool &>/dev/null ; then - if ! PW_PRODUCTNAME=$(timeout 3 exiftool -ProductName "${portwine_exe}" 2>/dev/null | sed -n 's/^Product Name\s*:\s*//p') ; then + if timeout 3 exiftool "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp" ; then + PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + else print_error "exiftool - broken!" - if [[ -n "$PW_DEBUG" ]] ; then - debug_timer --start - timeout 5 exiftool -ProductName "${portwine_exe}" - debug_timer --end "exiftool" - fi fi else print_warning "use portable exiftool" - PW_PRODUCTNAME=$(env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" -ProductName "${portwine_exe}" | sed -n 's/^Product Name\s*:\s*//p') + env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$portwine_exe" &> "${PW_TMPFS_PATH}/exiftool.tmp" + PW_PRODUCTNAME=$(sed -n 's/^Product Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + FILE_DESCRIPTION=$(sed -n 's/^File Description\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") fi if [[ "$PW_PRODUCTNAME" =~ (Launcher|RU) ]] @@ -2370,7 +2453,7 @@ pw_create_gui_png () { PORTPROTON_NAME="$(echo "${PORTPROTON_NAME}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g" | sed "s/\!//g")" export PORTPROTON_NAME - edit_db_from_gui PORTPROTON_NAME + edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION fi resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128" @@ -5422,11 +5505,6 @@ resize_png () { && [[ "$ALPINE_FP" != "1" ]] then print_error "exe-thumbnailer - broken!" - if [[ -n "$PW_DEBUG" ]] ; then - debug_timer --start - timeout 5 exe-thumbnailer --force-resize -s "$RESIZE_TO" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" - debug_timer --end "exe-thumbnailer" - fi fi else print_warning "use portable exe-thumbnailer" @@ -5451,12 +5529,7 @@ portwine_create_shortcut () { [[ -z "${PW_SHORTCUT_DESKTOP}" ]] && PW_SHORTCUT_DESKTOP="TRUE" [[ -z "${PW_SHORTCUT_STEAM}" ]] && PW_SHORTCUT_STEAM="FALSE" - if [[ -z "${PORTPROTON_NAME}" ]] ; then - name_desktop="$(basename "$portwine_exe")" - else - name_desktop="${PORTPROTON_NAME}" - fi - export name_desktop + [[ -z $PW_SHORTCUT_PROXY ]] && create_pw_comment && export name_desktop="$PW_SHORTCUT_PROXY" [[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}" @@ -5504,7 +5577,16 @@ portwine_create_shortcut () { edit_user_conf_from_gui PW_SHORTCUT_MENU PW_SHORTCUT_DESKTOP PW_SHORTCUT_STEAM - try_remove_file "${PORT_WINE_PATH}/${name_desktop}.desktop" + if [[ -n ${DESKTOP_FILES_ARRAY[0]} ]] && [[ $name_desktop != $DESKTOP_NAME_FILE ]] || [[ -n ${DESKTOP_FILES_ARRAY[1]} ]] ; then + if yad_question "${translations[A higher number of duplicate desktop files were found for this file.\\nShould I delete the extra ones or not?]}" ; then + for rm in "${DESKTOP_FILES_ARRAY[@]}" ; do + rm -f "$rm" + done + [[ $name_desktop == "" ]] && create_pw_comment && export name_desktop="$PW_SHORTCUT_PROXY" + fi + else + try_remove_file "${PORT_WINE_PATH}/${name_desktop}.desktop" + fi echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" @@ -5571,6 +5653,9 @@ portwine_create_shortcut () { unset PW_SKIP_RESTART_STEAM fi + # Когда новый .desktop файл + echo "#NEW_DESKTOP" >> "$PORT_WINE_PATH/$name_desktop.desktop" + if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then print_info "Restarting PP..." [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB @@ -5620,11 +5705,6 @@ pw_auto_create_shortcut () { link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") else print_error "exiftool - broken!" - if [[ -n "$PW_DEBUG" ]] ; then - debug_timer --start - timeout 5 exiftool "$link_file" - debug_timer --end "exiftool" - fi fi else print_warning "use portable exiftool" diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index d3f1b70..ba1877f 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -96,9 +96,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 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 RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT -unset PW_NAME_D_ICON PW_ICON_PATH PW_GAME_TIME PW_ALL_DF PW_AMOUNT_NEW_DESKTOP PW_AMOUNT_OLD_DESKTOP PW_DESKTOP_FILES -unset AI_TYPE AI_NAME AI_IMAGE AI_INFO AI_FILE_ARRAY AI_TRUE_FILE AI_FILE_UNSORTED AI_FILE_SORTED PW_GENERATE_BUTTONS -unset PW_DESKTOP_FILES_REGEX PW_TERM PW_EXEC_FROM_DESKTOP +unset PW_TERM PW_EXEC_FROM_DESKTOP export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* @@ -502,16 +500,7 @@ if [[ -f "${portwine_exe}" ]] ; then PW_SHORTCUT="${translations[DELETE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Delete shortcut for select file...]}:98" fi - [[ $DESKTOP_WITH_TIME == enabled ]] && search_desktop_file - if [[ -z "${PW_COMMENT_DB}" ]] ; then - if [[ -n "${PORTPROTON_NAME}" ]] ; then - PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "${PORTPROTON_NAME}" "50")$(seconds_to_time "$TIME_CURRENT")" - else - PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "${PORTWINE_DB}" "50")$(seconds_to_time "$TIME_CURRENT")" - fi - else - PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time "$TIME_CURRENT")" - fi + create_pw_comment export KEY_START="$RANDOM" if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then @@ -617,6 +606,8 @@ else gui_userconf fi + unset PW_NAME_D_ICON PW_ICON_PATH PW_GAME_TIME PW_ALL_DF PW_AMOUNT_NEW_DESKTOP PW_AMOUNT_OLD_DESKTOP PW_DESKTOP_FILES + unset AI_TYPE AI_NAME AI_IMAGE AI_INFO AI_FILE_ARRAY AI_TRUE_FILE AI_FILE_UNSORTED AI_FILE_SORTED PW_DESKTOP_FILES_REGEX # Поиск .desktop файлов AMOUNT_GENERATE_BUTTONS="0" for desktop_file in "$PORT_WINE_PATH"/* ; do @@ -636,20 +627,30 @@ else [[ $line =~ ^#NEW_DESKTOP ]] && NEW_DESKTOP=1 done < "$desktop_file" PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new" - if [[ $NEW_DESKTOP == 1 ]] && [[ $SORT_WITH_TIME == enabled ]] ; then + if [[ $SORT_WITH_TIME == enabled ]] && [[ $NEW_DESKTOP == 1 ]] ; then unset NEW_DESKTOP sed -i '/^#NEW_DESKTOP/d' "$desktop_file" PW_AMOUNT_NEW_DESKTOP+=($AMOUNT_GENERATE_BUTTONS) else PW_AMOUNT_OLD_DESKTOP+=($AMOUNT_GENERATE_BUTTONS) fi + # Для конвертация .desktop файлов flatpak в натив и наоборот + if [[ ${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]} =~ ^"Exec=flatpak run ru.linux_gaming.PortProton " ]] ; then + PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]//Exec=flatpak run ru.linux_gaming.PortProton /} + NEED_FIXES_DESKTOP=1 + elif [[ ${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]} =~ ^"Exec=env \"$PORT_SCRIPTS_PATH/start.sh\" " ]] ; then + PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} + NEED_FIXES_DESKTOP=1 + fi # Для фикса битых #Time= if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] \ - || (( ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} >= 999999999 )) ; then + || (( ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} >= 999999999 )) \ + || [[ $NEED_FIXES_DESKTOP == 1 ]] + then portwine_exe=${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]//\"/} search_desktop_file - unset portwine_exe - PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]=${TIME_CURRENT_ARRAY[0]} + unset portwine_exe NEED_FIXES_DESKTOP + PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]=$TIME_CURRENT fi (( AMOUNT_GENERATE_BUTTONS++ )) fi @@ -658,11 +659,10 @@ else # Переопределение элементов в массивах в зависимости от PW_GAME_TIME, от большего значения к меньшему. # 10 миллисекунд на 40 .desktop файлов, работает быстро - if [[ $SORT_WITH_TIME == enabled ]] ; then - for i in "${!PW_GAME_TIME[@]}" ; do - for j in "${!PW_GAME_TIME[@]}" ; do - if (( ${PW_GAME_TIME[$i]} > ${PW_GAME_TIME[$j]} )) \ - && [[ ! ${PW_AMOUNT_NEW_DESKTOP[*]} =~ $j ]] ; then + if [[ $SORT_WITH_TIME == enabled ]] && [[ -n ${PW_GAME_TIME[1]} ]] ; then + for i in "${PW_AMOUNT_OLD_DESKTOP[@]}" ; do + for j in "${PW_AMOUNT_OLD_DESKTOP[@]}" ; do + if (( ${PW_GAME_TIME[$i]} > ${PW_GAME_TIME[$j]} )) ; then tmp_0=${PW_GAME_TIME[$i]} tmp_1=${PW_ALL_DF[$i]} tmp_2=${PW_NAME_D_ICON[$i]} @@ -685,7 +685,7 @@ else # Генерация .desktop баттанов для главного меню IFS=$'\n' PW_GENERATE_BUTTONS="--field= ${translations[Create shortcut...]}!${PW_GUI_ICON_PATH}/find_48.svg!:FBTNR%@bash -c \"button_click --normal pw_find_exe\"%" - for dp in ${PW_AMOUNT_NEW_DESKTOP[@]} ${PW_AMOUNT_OLD_DESKTOP[@]} ; do + for dp in "${PW_AMOUNT_NEW_DESKTOP[@]}" "${PW_AMOUNT_OLD_DESKTOP[@]}" ; do PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]%.png}_48" PW_NAME_D_ICON_128="${PW_ICON_PATH[dp]%.png}" PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON[dp]//\"/}" @@ -725,7 +725,6 @@ else --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" \ --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS} 2>/dev/null & IFS="$orig_IFS" - unset PW_GENERATE_BUTTONS "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[3]}" --form --columns=3 --align-buttons --separator=";" --homogeneous-column \ --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" \