diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 87ce82ad..094e9ce4 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -786,7 +786,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 + local count desktop_file desktop_file_new EXEC_DESKTOP TIME_CURRENT_PROXY EXEC_DESKTOP_NEW TIME_TOTAL i j unset TIME_CURRENT_ARRAY DESKTOP_FILES_ARRAY count=0 for desktop_file in "$PORT_WINE_PATH"/* ; do @@ -800,12 +800,36 @@ 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 [[ -n $TIME_CURRENT_PROXY ]] && [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; 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]}" + fi + unset TIME_CURRENT_PROXY if [[ $portwine_exe == "$EXEC_DESKTOP_NEW" ]] ; then # Когда новый .desktop файл if [[ $TIME_CURRENT == "" ]] ; then @@ -814,12 +838,10 @@ search_desktop_file () { # Для битых #Time= else 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 @@ -827,23 +849,8 @@ search_desktop_file () { fi done IFS="$orig_IFS" + export TIME_CURRENT - # Если существуют .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 diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 819d1959..ee71414a 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -643,6 +643,14 @@ else 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 /} + search_desktop_file + 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\" /} + search_desktop_file + fi # Для фикса битых #Time= if [[ ! ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} =~ [0-9]+ ]] \ || (( ${PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]} >= 999999999 )) ; then @@ -658,7 +666,7 @@ else # Переопределение элементов в массивах в зависимости от PW_GAME_TIME, от большего значения к меньшему. # 10 миллисекунд на 40 .desktop файлов, работает быстро - if [[ $SORT_WITH_TIME == enabled ]] ; then + if [[ $SORT_WITH_TIME == enabled ]] && [[ -n ${PW_GAME_TIME[1]} ]] ; then for i in "${!PW_GAME_TIME[@]}" ; do for j in "${!PW_GAME_TIME[@]}" ; do if (( ${PW_GAME_TIME[$i]} > ${PW_GAME_TIME[$j]} )) \