forked from CastroFidel/PortWINE
		
	Fixes
This commit is contained in:
		@@ -7,7 +7,7 @@
 | 
			
		||||
msgid   ""
 | 
			
		||||
msgstr  "Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
        "Report-Msgid-Bugs-To: \n"
 | 
			
		||||
        "POT-Creation-Date: 2024-10-07 15:49+0500\n"
 | 
			
		||||
        "POT-Creation-Date: 2024-10-08 10:20+0500\n"
 | 
			
		||||
        "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
        "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
        "Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
@@ -239,7 +239,7 @@ msgstr  ""
 | 
			
		||||
msgid   "hours"
 | 
			
		||||
msgstr  ""
 | 
			
		||||
 | 
			
		||||
msgid   "not known yet"
 | 
			
		||||
msgid   "less than a minute"
 | 
			
		||||
msgstr  ""
 | 
			
		||||
 | 
			
		||||
msgid   "minute"
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: \n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2024-10-07 15:49+0500\n"
 | 
			
		||||
"POT-Creation-Date: 2024-10-08 10:15+0500\n"
 | 
			
		||||
"PO-Revision-Date: 2024-09-19 23:35+0500\n"
 | 
			
		||||
"Last-Translator: \n"
 | 
			
		||||
"Language-Team: \n"
 | 
			
		||||
@@ -262,7 +262,7 @@ msgstr ""
 | 
			
		||||
msgid "hours"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "not known yet"
 | 
			
		||||
msgid "less than a minute"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "minute"
 | 
			
		||||
 
 | 
			
		||||
@@ -7,8 +7,8 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: \n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2024-10-07 15:49+0500\n"
 | 
			
		||||
"PO-Revision-Date: 2024-10-07 15:52+0500\n"
 | 
			
		||||
"POT-Creation-Date: 2024-10-08 10:15+0500\n"
 | 
			
		||||
"PO-Revision-Date: 2024-10-08 10:15+0500\n"
 | 
			
		||||
"Last-Translator: \n"
 | 
			
		||||
"Language-Team: \n"
 | 
			
		||||
"Language: ru_RU\n"
 | 
			
		||||
@@ -73,7 +73,6 @@ msgstr "Основные настройки"
 | 
			
		||||
msgid "Edit database file for"
 | 
			
		||||
msgstr "Редактировать файл настроек для"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Global settings"
 | 
			
		||||
msgstr "Глобальные настройки"
 | 
			
		||||
 | 
			
		||||
@@ -152,7 +151,6 @@ msgstr "История изменений"
 | 
			
		||||
msgid "Change language"
 | 
			
		||||
msgstr "Сменить язык"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Global settings (user.conf)"
 | 
			
		||||
msgstr "Глобальные настройки (user.conf)"
 | 
			
		||||
 | 
			
		||||
@@ -263,8 +261,8 @@ msgstr "и"
 | 
			
		||||
msgid "hours"
 | 
			
		||||
msgstr "часов"
 | 
			
		||||
 | 
			
		||||
msgid "not known yet"
 | 
			
		||||
msgstr "пока неизвестно"
 | 
			
		||||
msgid "less than a minute"
 | 
			
		||||
msgstr "меньше минуты"
 | 
			
		||||
 | 
			
		||||
msgid "minute"
 | 
			
		||||
msgstr "минута"
 | 
			
		||||
@@ -1730,7 +1728,6 @@ msgstr "Выключить"
 | 
			
		||||
msgid "Enable"
 | 
			
		||||
msgstr "Включить"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Change global settings"
 | 
			
		||||
msgstr "Изменить глобальные настройки"
 | 
			
		||||
 | 
			
		||||
@@ -1815,7 +1812,6 @@ msgstr ""
 | 
			
		||||
"Эта настройка сортирует ярлыки в главном меню в зависимости от времени, "
 | 
			
		||||
"проведенного в приложении или игре"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "GLOBAL SETTINGS (USER.CONF)"
 | 
			
		||||
msgstr "ГЛОБАЛЬНЫЕ НАСТРОЙКИ (USER.CONF)"
 | 
			
		||||
 | 
			
		||||
@@ -2146,6 +2142,9 @@ msgstr "ПРИСОЕДЕНИТЬСЯ"
 | 
			
		||||
msgid "THIRD PARTY LIBRARIES"
 | 
			
		||||
msgstr "БИБЛИОТЕКИ"
 | 
			
		||||
 | 
			
		||||
#~ msgid "not known yet"
 | 
			
		||||
#~ msgstr "пока неизвестно"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Emulator for Nintendo game consoles with high compatibility"
 | 
			
		||||
#~ msgstr "Эмулятор игровых консолей Nintendo с высокой совместимостью"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -186,6 +186,7 @@ eval_translations () {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
create_translations () {
 | 
			
		||||
    local po_file msgid msgstr
 | 
			
		||||
    if [[ ! -d "${PW_CACHE_LANG_PATH}" ]] ; then
 | 
			
		||||
        create_new_dir "${PW_CACHE_LANG_PATH}"
 | 
			
		||||
    fi
 | 
			
		||||
@@ -456,12 +457,13 @@ try_download () {
 | 
			
		||||
                no_mirror=true
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    local filename
 | 
			
		||||
    if [[ -n "${PW_AUTOINSTALL_EXE}" ]] \
 | 
			
		||||
    && [[ "$no_mirror" == "true" ]]
 | 
			
		||||
    then
 | 
			
		||||
        local filename="$(basename "${PW_AUTOINSTALL_EXE}")"
 | 
			
		||||
        filename="$(basename "${PW_AUTOINSTALL_EXE}")"
 | 
			
		||||
    else
 | 
			
		||||
        local filename="$(basename "$1")"
 | 
			
		||||
        filename="$(basename "$1")"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "${MIRROR}" == CLOUD ]] \
 | 
			
		||||
@@ -778,6 +780,9 @@ 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
 | 
			
		||||
    unset TIME_CURRENT_ARRAY DESKTOP_FILES_ARRAY
 | 
			
		||||
    count=0
 | 
			
		||||
    for desktop_file in "$PORT_WINE_PATH"/* ; do
 | 
			
		||||
        desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}"
 | 
			
		||||
        if [[ $desktop_file_new =~ .desktop ]] ; then
 | 
			
		||||
@@ -789,89 +794,117 @@ search_desktop_file () {
 | 
			
		||||
                        else
 | 
			
		||||
                            EXEC_DESKTOP=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
 | 
			
		||||
                        fi
 | 
			
		||||
                        EXEC_DESKTOP_NEW="${EXEC_DESKTOP//\"/}"
 | 
			
		||||
                        EXEC_DESKTOP_NEW=${EXEC_DESKTOP//\"/}
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                    if [[ $line =~ ^#Time= ]] ; then
 | 
			
		||||
                        if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
 | 
			
		||||
                            TIME_CURRENT=${line//#Time=/}
 | 
			
		||||
                        fi
 | 
			
		||||
                    if [[ $line =~ ^#Time= ]] && [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
 | 
			
		||||
                        TIME_CURRENT=${line//#Time=/}
 | 
			
		||||
                    fi
 | 
			
		||||
                done < "$desktop_file"
 | 
			
		||||
                if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then
 | 
			
		||||
                    if [[ ! $TIME_CURRENT =~ [0-9]+ ]] ; then
 | 
			
		||||
                    # Когда новый .desktop файл
 | 
			
		||||
                    if [[ $TIME_CURRENT == "" ]] ; then
 | 
			
		||||
                        echo "#NEW_DESKTOP" >> "$desktop_file"
 | 
			
		||||
                        TIME_CURRENT="0"
 | 
			
		||||
                    # Для битых #Time=
 | 
			
		||||
                    elif [[ ! $TIME_CURRENT == "" ]] && [[ ! $TIME_CURRENT =~ [0-9]+ ]] ; then
 | 
			
		||||
                        TIME_CURRENT="0"
 | 
			
		||||
                        sed -i '/^#Time=/d' "$desktop_file"
 | 
			
		||||
                        echo "#Time=0" >> "$desktop_file"
 | 
			
		||||
                    fi
 | 
			
		||||
                    if [[ -n $PW_TIME_IN_GAME ]] ; then
 | 
			
		||||
                        TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
 | 
			
		||||
                        sed -i '/^#Time=/d' "$desktop_file"
 | 
			
		||||
                        echo "#Time=$TIME_TOTAL" >> "$desktop_file"
 | 
			
		||||
                    fi
 | 
			
		||||
                    TIME_CURRENT_ARRAY+=($TIME_CURRENT)
 | 
			
		||||
                    unset TIME_CURRENT
 | 
			
		||||
                    DESKTOP_FILES_ARRAY["$count"]="$desktop_file"
 | 
			
		||||
                    (( count++ ))
 | 
			
		||||
                fi
 | 
			
		||||
            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
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
            sed -i '/^#Time=/d' "$df"
 | 
			
		||||
            echo "#Time=$TIME_TOTAL" >> "$df"
 | 
			
		||||
        done
 | 
			
		||||
    else
 | 
			
		||||
        for df in "${DESKTOP_FILES_ARRAY[@]}" ; do
 | 
			
		||||
            sed -i '/^#Time=/d' "$df"
 | 
			
		||||
            echo "#Time=$TIME_CURRENT" >> "$df"
 | 
			
		||||
        done
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Конвертация секунд в дни, часы, минуты
 | 
			
		||||
seconds_to_time () {
 | 
			
		||||
    [[ -z $1 ]] && return 0
 | 
			
		||||
    local seconds=$1
 | 
			
		||||
    local seconds days hours minutes
 | 
			
		||||
    seconds=$1
 | 
			
		||||
 | 
			
		||||
    local days=$((seconds / (60 * 60 * 24)))
 | 
			
		||||
    local seconds=$((seconds % (60 * 60 * 24)))
 | 
			
		||||
    days=$((seconds / (60 * 60 * 24)))
 | 
			
		||||
    seconds=$((seconds % (60 * 60 * 24)))
 | 
			
		||||
 | 
			
		||||
    local hours=$((seconds / (60 * 60)))
 | 
			
		||||
    local seconds=$((seconds % (60 * 60)))
 | 
			
		||||
    hours=$((seconds / (60 * 60)))
 | 
			
		||||
    seconds=$((seconds % (60 * 60)))
 | 
			
		||||
 | 
			
		||||
    local minutes=$((seconds / 60))
 | 
			
		||||
    local seconds=$((seconds % 60))
 | 
			
		||||
    minutes=$((seconds / 60))
 | 
			
		||||
    seconds=$((seconds % 60))
 | 
			
		||||
 | 
			
		||||
    if [[ $days =~ ^0$ ]] ; then
 | 
			
		||||
        local days=
 | 
			
		||||
        days=
 | 
			
		||||
    elif [[ $days =~ ^1$ ]] ; then
 | 
			
		||||
        local days="$days ${translations[day]}, "
 | 
			
		||||
        days="$days ${translations[day]}, "
 | 
			
		||||
    elif [[ $days =~ ^([2-9]1|[1-9][0-9]+1)$ ]] && [[ $LANGUAGE == ru ]] ; then
 | 
			
		||||
        local days="$days ${translations[day]}, "
 | 
			
		||||
    elif [[ $days =~ ^([2-4]|[2-9][2-4]|[1-9][0-9]+[2-4])$ ]] \
 | 
			
		||||
    && [[ $LANGUAGE == ru ]] ; then
 | 
			
		||||
        local days="$days дня, "
 | 
			
		||||
        days="$days ${translations[day]}, "
 | 
			
		||||
    elif [[ $days =~ ^([2-4]|[2-9][2-4]|[1-9][0-9]+[2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
 | 
			
		||||
        days="$days дня, "
 | 
			
		||||
    else
 | 
			
		||||
        local days="$days ${translations[days]}, "
 | 
			
		||||
        days="$days ${translations[days]}, "
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ $hours =~ ^0$ ]] ; then
 | 
			
		||||
        local hours=
 | 
			
		||||
        hours=
 | 
			
		||||
    elif [[ $hours =~ ^1$ ]] ; then
 | 
			
		||||
        local hours="$hours ${translations[hour]} ${translations[and]} "
 | 
			
		||||
        hours="$hours ${translations[hour]} ${translations[and]} "
 | 
			
		||||
    elif [[ $hours =~ ^([2-4]|2[2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
 | 
			
		||||
        local hours="$hours часа ${translations[and]} "
 | 
			
		||||
        hours="$hours часа ${translations[and]} "
 | 
			
		||||
    elif [[ $hours =~ ^21$ ]] && [[ $LANGUAGE == ru ]] ; then
 | 
			
		||||
        local hours="$hours ${translations[hour]} ${translations[and]} "
 | 
			
		||||
        hours="$hours ${translations[hour]} ${translations[and]} "
 | 
			
		||||
    else
 | 
			
		||||
        local hours="$hours ${translations[hours]} ${translations[and]} "
 | 
			
		||||
        hours="$hours ${translations[hours]} ${translations[and]} "
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ $minutes =~ ^0$ ]] ; then
 | 
			
		||||
        local hours=${hours//" ${translations[and]} "/}
 | 
			
		||||
        local minutes=
 | 
			
		||||
        hours=${hours//" ${translations[and]} "/}
 | 
			
		||||
        minutes=
 | 
			
		||||
        if [[ $days == "" ]] || [[ $hours == "" ]] ; then
 | 
			
		||||
            local days=${days//","/}
 | 
			
		||||
            days=${days//","/}
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ $days == "" ]] && [[ $hours == "" ]] ; then
 | 
			
		||||
            local minutes="${translations[not known yet]}"
 | 
			
		||||
            minutes="${translations[less than a minute]}"
 | 
			
		||||
        fi
 | 
			
		||||
    elif [[ $minutes =~ ^1$ ]] ; then
 | 
			
		||||
        local minutes="$minutes ${translations[minute]}"
 | 
			
		||||
        minutes="$minutes ${translations[minute]}"
 | 
			
		||||
    elif [[ $minutes =~ ^[2-5]1$ ]] && [[ $LANGUAGE == ru ]] ; then
 | 
			
		||||
        local minutes="$minutes ${translations[minute]}"
 | 
			
		||||
        minutes="$minutes ${translations[minute]}"
 | 
			
		||||
    elif [[ $minutes =~ ^([2-4]|[2-5][2-4])$ ]] && [[ $LANGUAGE == ru ]] ; then
 | 
			
		||||
        local minutes="$minutes минуты"
 | 
			
		||||
        minutes="$minutes минуты"
 | 
			
		||||
    else
 | 
			
		||||
        local minutes="$minutes ${translations[minutes]}"
 | 
			
		||||
        minutes="$minutes ${translations[minutes]}"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    echo -e "<b>\n${translations[Time spent]}: $days$hours$minutes</b>"
 | 
			
		||||
@@ -882,32 +915,34 @@ combobox_fix () {
 | 
			
		||||
        print_error "no argument specified for combobox_fix"
 | 
			
		||||
        return 1
 | 
			
		||||
    else
 | 
			
		||||
        local name1 name2
 | 
			
		||||
        if [[ "$1" == "--disabled" ]] ; then
 | 
			
		||||
            if [[ -z "$3" ]] ; then
 | 
			
		||||
                echo "disabled"
 | 
			
		||||
                return 0
 | 
			
		||||
            fi
 | 
			
		||||
            local name1="$2"
 | 
			
		||||
            local name2="$3"
 | 
			
		||||
            name1="$2"
 | 
			
		||||
            name2="$3"
 | 
			
		||||
        elif [[ "$1" == "--empty" ]] ; then
 | 
			
		||||
            if [[ -z "$3" ]] ; then
 | 
			
		||||
                echo ""
 | 
			
		||||
                return 0
 | 
			
		||||
            fi
 | 
			
		||||
            local name1="$2"
 | 
			
		||||
            local name2="$3"
 | 
			
		||||
            name1="$2"
 | 
			
		||||
            name2="$3"
 | 
			
		||||
        else
 | 
			
		||||
            local name1="$1"
 | 
			
		||||
            name1="$1"
 | 
			
		||||
            if [[ -z "$2" ]] ; then
 | 
			
		||||
                echo "${name1}"
 | 
			
		||||
                return 0
 | 
			
		||||
            fi
 | 
			
		||||
            local name2="$2"
 | 
			
		||||
            name2="$2"
 | 
			
		||||
        fi
 | 
			
		||||
        local name3="${name2//\!${name1}\!/\!}"
 | 
			
		||||
        local name3="!${name3//${name1}\!/\!}"
 | 
			
		||||
        local name3="${name3//\!\!/\!}"
 | 
			
		||||
        local name4="${name3//*\!/}"
 | 
			
		||||
        local name3 name4
 | 
			
		||||
        name3="${name2//\!${name1}\!/\!}"
 | 
			
		||||
        name3="!${name3//${name1}\!/\!}"
 | 
			
		||||
        name3="${name3//\!\!/\!}"
 | 
			
		||||
        name4="${name3//*\!/}"
 | 
			
		||||
        if [[ ${name1} == "${name4}" ]] || [[ ${name1} == "\\${name4}" ]]
 | 
			
		||||
        then name3="${name3%\!"${name1}"}"
 | 
			
		||||
        fi
 | 
			
		||||
@@ -2320,14 +2355,12 @@ pw_find_exe () {
 | 
			
		||||
    --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \
 | 
			
		||||
    --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null)"
 | 
			
		||||
    YAD_STATUS="$?"
 | 
			
		||||
    if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then
 | 
			
		||||
        if [[ -z "${PW_SET_FIND_EXE}" ]] ; then
 | 
			
		||||
            print_info "Restarting..."
 | 
			
		||||
            restart_pp
 | 
			
		||||
        fi
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    IFS="$orig_IFS"
 | 
			
		||||
    if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then
 | 
			
		||||
        print_info "Restarting..."
 | 
			
		||||
        restart_pp
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ -n "${PW_SET_FIND_EXE}" ]] ; then
 | 
			
		||||
        portwine_exe="${PW_PATH_FOR_FIND}$(echo "${PW_SET_FIND_EXE}" | awk -F'|' '{print $1}')"
 | 
			
		||||
@@ -5483,6 +5516,7 @@ portwine_create_shortcut () {
 | 
			
		||||
        fi
 | 
			
		||||
    elif [[ "$PW_YAD_OUT" == "2" ]] ; then
 | 
			
		||||
        print_info "Restarting PP..."
 | 
			
		||||
        [[ -n $KEY_MENU ]] && unset portwine_exe
 | 
			
		||||
        [[ "${PW_GUI_START}" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
 | 
			
		||||
        restart_pp
 | 
			
		||||
    fi
 | 
			
		||||
@@ -5511,7 +5545,7 @@ pw_auto_create_shortcut () {
 | 
			
		||||
    [[ -z "${LINKS[0]}" ]] && return 0
 | 
			
		||||
    SORTED_LINKS=()
 | 
			
		||||
    while IFS= read -r line ; do
 | 
			
		||||
        SORTED_LINKS+=("$line");
 | 
			
		||||
        SORTED_LINKS+=("$line")
 | 
			
		||||
    done < <(echo ${LINKS[@]} | tr ' ' '\n' | sort -u) 
 | 
			
		||||
    IFS="$orig_IFS"
 | 
			
		||||
 | 
			
		||||
@@ -5562,6 +5596,7 @@ pw_auto_create_shortcut () {
 | 
			
		||||
            PORTPROTON_NAME="$link_name"
 | 
			
		||||
            export portwine_exe="$exe_path"
 | 
			
		||||
            resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128"
 | 
			
		||||
            export PW_NO_RESTART_PPDB=1
 | 
			
		||||
            portwine_create_shortcut
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
@@ -6002,8 +6037,8 @@ button_click () {
 | 
			
		||||
            kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY_MENU}" | awk '{print $1}') > /dev/null 2>&1
 | 
			
		||||
            PW_YAD_SET="${PORT_WINE_PATH}/${PW_YAD_SET//#@_@#/ }"
 | 
			
		||||
            if [[ -n $PW_DESKTOP_FILES_REGEX ]] ; then
 | 
			
		||||
                count=1
 | 
			
		||||
                for y in ${PW_DESKTOP_FILES_REGEX[@]} ; do
 | 
			
		||||
                local count=1
 | 
			
		||||
                for y in "${PW_DESKTOP_FILES_REGEX[@]}" ; do
 | 
			
		||||
                    PW_YAD_SET="${PW_YAD_SET//#+_$count#/$y}"
 | 
			
		||||
                    (( count++ ))
 | 
			
		||||
                done
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,8 @@ if PORT_SCRIPTS_PATH=$(readlink -f "${0%/*}") ; then
 | 
			
		||||
    export PORT_SCRIPTS_PATH
 | 
			
		||||
    export PORT_WINE_PATH=${PORT_SCRIPTS_PATH%/*/*}
 | 
			
		||||
else
 | 
			
		||||
    fatal
 | 
			
		||||
    echo "The PORT_SCRIPTS_PATH directory was not found!"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# shellcheck source=/dev/null
 | 
			
		||||
@@ -90,10 +91,11 @@ unset MANGOHUD MANGOHUD_DLSYM PW_NO_ESYNC PW_NO_FSYNC PW_VULKAN_USE WINEDLLOVERR
 | 
			
		||||
unset PW_CHECK_AUTOINSTALL PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PORTWINE_DB PORTWINE_DB_FILE RADV_PERFTEST
 | 
			
		||||
unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_TO_GAME PW_START_DEBUG PORTPROTON_NAME PW_PATH
 | 
			
		||||
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_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 RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT
 | 
			
		||||
unset PW_DESKTOP_FILES_REGEX PW_TERM
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
 | 
			
		||||
rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}*
 | 
			
		||||
@@ -324,7 +326,7 @@ export SKIP_CHECK_UPDATES="1"
 | 
			
		||||
 | 
			
		||||
[[ "$MISSING_DESKTOP_FILE" == "1" ]] && portwine_missing_shortcut
 | 
			
		||||
 | 
			
		||||
if [[ -n $(basename "${portwine_exe}" | grep .ppack) ]] ; then
 | 
			
		||||
if [[ $(basename "${portwine_exe}") =~ .ppack$ ]] ; then
 | 
			
		||||
    unset PW_SANDBOX_HOME_PATH
 | 
			
		||||
    pw_init_runtime
 | 
			
		||||
    if check_flatpak
 | 
			
		||||
@@ -500,9 +502,9 @@ if [[ -f "${portwine_exe}" ]] ; then
 | 
			
		||||
        [[ $DESKTOP_WITH_TIME == enabled ]] && search_desktop_file
 | 
			
		||||
        if [[ -z "${PW_COMMENT_DB}" ]] ; then
 | 
			
		||||
            if [[ -n "${PORTPROTON_NAME}" ]] ; then
 | 
			
		||||
                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")$(seconds_to_time "$TIME_CURRENT")</b>"
 | 
			
		||||
                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTPROTON_NAME}" "50")</b>$(seconds_to_time "$TIME_CURRENT")"
 | 
			
		||||
            else
 | 
			
		||||
                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")$(seconds_to_time "$TIME_CURRENT")</b>"
 | 
			
		||||
                PW_COMMENT_DB="${translations[Launching]} <b>$(print_wrapped "${PORTWINE_DB}" "50")</b>$(seconds_to_time "$TIME_CURRENT")"
 | 
			
		||||
            fi
 | 
			
		||||
        else
 | 
			
		||||
            PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time "$TIME_CURRENT")"
 | 
			
		||||
@@ -586,10 +588,14 @@ if [[ -f "${portwine_exe}" ]] ; then
 | 
			
		||||
            --button="${translations[LAUNCH]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Run file ...]}":106 2>/dev/null
 | 
			
		||||
            PW_YAD_SET="$?"
 | 
			
		||||
        fi
 | 
			
		||||
        case $PW_YAD_SET in
 | 
			
		||||
        case "$PW_YAD_SET" in
 | 
			
		||||
            128)
 | 
			
		||||
                [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
 | 
			
		||||
                unset portwine_exe KEY_START $(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g')
 | 
			
		||||
                PORTWINE_DB_FOR_UNSET=$(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g')
 | 
			
		||||
                for db_unset in $PORTWINE_DB_FOR_UNSET ; do
 | 
			
		||||
                    unset "$db_unset"
 | 
			
		||||
                done
 | 
			
		||||
                unset portwine_exe KEY_START
 | 
			
		||||
                print_info "Restarting..."
 | 
			
		||||
                restart_pp
 | 
			
		||||
                ;;
 | 
			
		||||
@@ -622,32 +628,25 @@ else
 | 
			
		||||
                            PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
 | 
			
		||||
                        fi
 | 
			
		||||
                    fi
 | 
			
		||||
                    if [[ $line =~ ^Icon= ]] ; then
 | 
			
		||||
                        PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
 | 
			
		||||
                    fi
 | 
			
		||||
                    if [[ $line =~ ^#Time= ]] ; then
 | 
			
		||||
                        WITH_TIME="1"
 | 
			
		||||
                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//#Time=/}"
 | 
			
		||||
                    fi
 | 
			
		||||
                    [[ $line =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${line//Icon=/}"
 | 
			
		||||
                    [[ $line =~ ^#Time= ]] && PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="${line//#Time=/}"
 | 
			
		||||
                    [[ $line =~ ^#NEW_DESKTOP ]] && NEW_DESKTOP=1
 | 
			
		||||
                done < "$desktop_file"
 | 
			
		||||
                PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new"
 | 
			
		||||
                # Чтобы новый ярлык показало первым при первом запуске, потом уже по времени
 | 
			
		||||
                if [[ $WITH_TIME != 1 ]] ; then
 | 
			
		||||
                    echo "#Time=0" >> "$desktop_file"
 | 
			
		||||
                    if [[ $SORT_WITH_TIME == enabled ]] ; then
 | 
			
		||||
                        PW_AMOUNT_NO_TIME+=($AMOUNT_GENERATE_BUTTONS)
 | 
			
		||||
                    else
 | 
			
		||||
                        PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)
 | 
			
		||||
                    fi
 | 
			
		||||
                if [[ $NEW_DESKTOP == 1 ]] && [[ $SORT_WITH_TIME == enabled ]] ; then
 | 
			
		||||
                    unset NEW_DESKTOP
 | 
			
		||||
                    sed -i '/^#NEW_DESKTOP/d' "$desktop_file"
 | 
			
		||||
                    PW_AMOUNT_NEW_DESKTOP+=($AMOUNT_GENERATE_BUTTONS)
 | 
			
		||||
                else
 | 
			
		||||
                    if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] ; then
 | 
			
		||||
                        sed -i '/^#Time=/d' "$desktop_file"
 | 
			
		||||
                        echo "#Time=0" >> "$desktop_file"
 | 
			
		||||
                        PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]="0"
 | 
			
		||||
                    fi
 | 
			
		||||
                    PW_AMOUNT_WITH_TIME+=($AMOUNT_GENERATE_BUTTONS)
 | 
			
		||||
                    PW_AMOUNT_OLD_DESKTOP+=($AMOUNT_GENERATE_BUTTONS)
 | 
			
		||||
                fi
 | 
			
		||||
                # Для фикса битых #Time=
 | 
			
		||||
                if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] ; 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]}
 | 
			
		||||
                fi
 | 
			
		||||
                unset WITH_TIME
 | 
			
		||||
                (( AMOUNT_GENERATE_BUTTONS++ ))
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
@@ -681,7 +680,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_NO_TIME[@]}" "${PW_AMOUNT_WITH_TIME[@]}" ; 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]//\"/}"
 | 
			
		||||
@@ -694,12 +693,12 @@ else
 | 
			
		||||
            PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
 | 
			
		||||
            PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;)
 | 
			
		||||
 | 
			
		||||
            for i in ${PW_DESKTOP_FILES_SHOW_REGEX[@]} ; do
 | 
			
		||||
            for i in "${PW_DESKTOP_FILES_SHOW_REGEX[@]}" ; do
 | 
			
		||||
                PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//$i/}"
 | 
			
		||||
            done
 | 
			
		||||
 | 
			
		||||
            count=1
 | 
			
		||||
            for j in ${PW_DESKTOP_FILES_REGEX[@]} ; do
 | 
			
		||||
            for j in "${PW_DESKTOP_FILES_REGEX[@]}" ; do
 | 
			
		||||
                PW_DESKTOP_FILES="${PW_DESKTOP_FILES//$j/#+_$count#}"
 | 
			
		||||
                (( count++ ))
 | 
			
		||||
            done
 | 
			
		||||
@@ -868,7 +867,7 @@ if [[ -f "${PORTWINE_DB_FILE}" ]] ; then
 | 
			
		||||
    edit_db_from_gui PW_VULKAN_USE PW_WINE_USE PW_PREFIX_NAME
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case $PW_YAD_SET in
 | 
			
		||||
case "$PW_YAD_SET" in
 | 
			
		||||
    gui_pw_reinstall_pp|open_changelog|\
 | 
			
		||||
    128|gui_pw_update|gui_rm_portproton|\
 | 
			
		||||
    change_loc|gui_open_scripts_from_backup|\
 | 
			
		||||
@@ -898,7 +897,7 @@ case $PW_YAD_SET in
 | 
			
		||||
        ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
case $PW_YAD_SET in
 | 
			
		||||
case "$PW_YAD_SET" in
 | 
			
		||||
    98) portwine_delete_shortcut ;;
 | 
			
		||||
    100) portwine_create_shortcut ;;
 | 
			
		||||
    DEBUG|102) portwine_start_debug ;;
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user