diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot index 3bb5407..62eef70 100644 --- a/data_from_portwine/locales/PortProton.pot +++ b/data_from_portwine/locales/PortProton.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2024-10-24 12:43+0500\n" + "POT-Creation-Date: 2024-10-26 06:41+0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -59,10 +59,13 @@ msgstr "" msgid "Create shortcut for select file..." msgstr "" -msgid "DELETE SHORTCUT" +msgid "CHANGE SHORTCUT" msgstr "" -msgid "Delete shortcut for select file..." +msgid "Change shortcut for select file..." +msgstr "" + +msgid "Launching" msgstr "" msgid "Base settings" @@ -227,9 +230,6 @@ msgstr "" msgid "Downloading" msgstr "" -msgid "Launching" -msgstr "" - msgid "day" msgstr "" @@ -1426,6 +1426,9 @@ msgstr "" msgid "The shortcut will be created in the PortProton directory." msgstr "" +msgid "Name" +msgstr "" + msgid "Add shortcut to MENU -> GAMES" msgstr "" @@ -1435,19 +1438,18 @@ msgstr "" msgid "Add shortcut to STEAM library" msgstr "" -msgid "Name" -msgstr "" - -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 "" msgid "Restarting STEAM... Please wait." msgstr "" +msgid "The shortcut will be changed in the PortProton directory." +msgstr "" + +msgid "REMOVE SHORTCUT" +msgstr "" + msgid "Could not find the file:" msgstr "" @@ -1455,6 +1457,9 @@ msgid "ATTENTION:\\nIf you forgot to mount the disk with the running " "application, click CANCEL!" msgstr "" +msgid "DELETE SHORTCUT" +msgstr "" + msgid "Starting prefix manager:" msgstr "" diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po index 0b3677c..e4b5999 100644 --- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po +++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po @@ -8,15 +8,15 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-24 13:48+0500\n" -"PO-Revision-Date: 2024-10-24 13:51+0500\n" +"POT-Creation-Date: 2024-10-26 06:41+0500\n" +"PO-Revision-Date: 2024-10-26 13:58+0500\n" "Last-Translator: \n" "Language-Team: \n" "Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "" "A running PortProton session was detected.\\nDo you want to end the previous " @@ -64,11 +64,14 @@ msgstr "CREAR ACCESO DIRECTO" msgid "Create shortcut for select file..." msgstr "Crear un acceso directo para el archivo seleccionado..." -msgid "DELETE SHORTCUT" -msgstr "ELIMINAR ACCESO DIRECTO" +msgid "CHANGE SHORTCUT" +msgstr "CAMBIAR ACCESO DIRECTO" -msgid "Delete shortcut for select file..." -msgstr "Eliminar el acceso directo del archivo seleccionado..." +msgid "Change shortcut for select file..." +msgstr "Cambiar un acceso directo para el archivo seleccionado..." + +msgid "Launching" +msgstr "Lanzamiento" msgid "Base settings" msgstr "Configuración básica" @@ -247,9 +250,6 @@ msgstr "" msgid "Downloading" msgstr "Descargando" -msgid "Launching" -msgstr "Lanzamiento" - msgid "day" msgstr "día" @@ -1858,6 +1858,9 @@ msgstr "¿Realmente deseas restablecer la configuración de" msgid "The shortcut will be created in the PortProton directory." msgstr "El acceso directo se creará en el directorio de PortProton." +msgid "Name" +msgstr "Nombre" + msgid "Add shortcut to MENU -> GAMES" msgstr "Agregar acceso directo a MENU -> JUEGOS" @@ -1867,16 +1870,6 @@ msgstr "Agregar acceso directo al escritorio" msgid "Add shortcut to STEAM library" 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 "" -"Se encontraron un mayor número de archivos de escritorio duplicados para " -"este archivo.\\n¿Debería eliminar los adicionales o no?" - 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 " @@ -1885,6 +1878,12 @@ msgstr "" msgid "Restarting STEAM... Please wait." msgstr "Restarting STEAM... Please wait." +msgid "The shortcut will be changed in the PortProton directory." +msgstr "El acceso directo se cambiará en el directorio de PortProton." + +msgid "REMOVE SHORTCUT" +msgstr "ELIMINAR ACCESO DIRECTO" + msgid "Could not find the file:" msgstr "No se pudo encontrar el archivo:" @@ -1896,6 +1895,9 @@ msgstr "" "Si olvidaste montar el disco con la aplicación en ejecución, ¡haz clic en " "CANCELAR!" +msgid "DELETE SHORTCUT" +msgstr "ELIMINAR ACCESO DIRECTO" + msgid "Starting prefix manager:" msgstr "Iniciando el administrador de prefijos:" @@ -2173,6 +2175,16 @@ msgstr "" msgid "Please wait. downloading covers for" msgstr "Por favor, espera. Descargando portadas para" +#~ msgid "" +#~ "A higher number of duplicate desktop files were found for this file." +#~ "\\nShould I delete the extra ones or not?" +#~ msgstr "" +#~ "Se encontraron un mayor número de archivos de escritorio duplicados para " +#~ "este archivo.\\n¿Debería eliminar los adicionales o no?" + +#~ msgid "Delete shortcut for select file..." +#~ msgstr "Eliminar el acceso directo del archivo seleccionado..." + #~ msgid "Forced activation of vertical sync" #~ msgstr "Activación forzada de la sincronización vertical" diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po index 7d01219..3c2bff3 100644 --- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po +++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-24 12:43+0500\n" -"PO-Revision-Date: 2024-10-24 12:45+0500\n" +"POT-Creation-Date: 2024-10-26 06:41+0500\n" +"PO-Revision-Date: 2024-10-26 06:43+0500\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru_RU\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "" "A running PortProton session was detected.\\nDo you want to end the previous " @@ -64,11 +64,14 @@ msgstr "СОЗДАТЬ ЯРЛЫК" msgid "Create shortcut for select file..." msgstr "Создать ярлык для выбранного файла..." -msgid "DELETE SHORTCUT" -msgstr "УДАЛИТЬ ЯРЛЫК" +msgid "CHANGE SHORTCUT" +msgstr "ИЗМЕНИТЬ ЯРЛЫК" -msgid "Delete shortcut for select file..." -msgstr "Удалить ярлык для выбранного файла..." +msgid "Change shortcut for select file..." +msgstr "Изменить ярлык для выбранного файла..." + +msgid "Launching" +msgstr "Запуск" msgid "Base settings" msgstr "Основные настройки" @@ -249,9 +252,6 @@ msgstr "" msgid "Downloading" msgstr "Загружается" -msgid "Launching" -msgstr "Запуск" - msgid "day" msgstr "день" @@ -1836,6 +1836,9 @@ msgstr "Вы действительно хотите сбросить настр msgid "The shortcut will be created in the PortProton directory." msgstr "Ярлык будет создан в каталоге PortProton." +msgid "Name" +msgstr "Имя" + msgid "Add shortcut to MENU -> GAMES" msgstr "Добавить ярлык в МЕНЮ -> ИГРЫ" @@ -1845,14 +1848,6 @@ msgstr "Добавить ярлык на рабочий стол" msgid "Add shortcut to STEAM library" msgstr "Добавить ярлык в библиотеку STEAM" -msgid "Name" -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 "For adding shortcut to STEAM, needed restart.\\n\\nRestart STEAM now?" msgstr "" "Для добавления ярлыка в STEAM требуется перезапуск.\\n\\nПерезапустить STEAM " @@ -1861,6 +1856,12 @@ msgstr "" msgid "Restarting STEAM... Please wait." msgstr "Перезапускаем STEAM... Пожалуйста, подождите." +msgid "The shortcut will be changed in the PortProton directory." +msgstr "Ярлык будет изменён в каталоге PortProton." + +msgid "REMOVE SHORTCUT" +msgstr "УДАЛИТЬ ЯРЛЫК" + msgid "Could not find the file:" msgstr "Не удалось найти файл:" @@ -1871,6 +1872,9 @@ msgstr "" "ВНИМАНИЕ:\\nЕсли вы забыли примонтировать диск с запускаемым приложением, " "нажмите ОТМЕНИТЬ!" +msgid "DELETE SHORTCUT" +msgstr "УДАЛИТЬ ЯРЛЫК" + msgid "Starting prefix manager:" msgstr "Запуск менеджера префиксов:" @@ -2157,6 +2161,14 @@ msgstr "SteamGridDB не отвечает, принудительно отклю msgid "Please wait. downloading covers for" 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 "Delete shortcut for select file..." +#~ msgstr "Удалить ярлык для выбранного файла..." + #~ msgid "Forced activation of vertical sync" #~ msgstr "Принудительное включение вертикальной синхронизации" diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 0e2efb4..67635b2 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -248,9 +248,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 + [[ ! -d $PW_CACHE_LANG_PATH ]] && create_new_dir "$PW_CACHE_LANG_PATH" cat << EOF > "${PW_CACHE_LANG_PATH}/$LANGUAGE" #!/usr/bin/env bash TRANSLATIONS_VER=$scripts_install_ver @@ -769,10 +767,10 @@ background_pid () { case $arg1 in --start) eval "$arg2 &" - PID=$! + local PID=$! export bg_pid"${arg3}"="$PID" ;; --end) - PID=$(get_bg_pid bg_pid"${arg3}") + local PID=$(get_bg_pid bg_pid"${arg3}") [[ -z $PID ]] && return 1 wait "$PID" 2>/dev/null && return 0 ;; esac @@ -849,80 +847,74 @@ debug_timer () { fi } -# Поиск нужного .desktop файла по $portwine_exe +# Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени) +# Параллельное создание базы по времени после завершения приложения search_desktop_file () { - 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 + local desktop_file desktop_file_new EXEC_DESKTOP line1 line2 TIME_TOTAL for desktop_file in "$PORT_WINE_PATH"/* ; do desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}" if [[ $desktop_file_new =~ .desktop$ ]] ; then if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then - while IFS= read -r line ; do - if [[ $line =~ ^Exec= ]] ; then + while IFS= read -r line1 ; do + if [[ $line1 =~ ^Exec= ]] ; then if check_flatpak ; then - EXEC_DESKTOP=${line//Exec=flatpak run ru.linux_gaming.PortProton /} + EXEC_DESKTOP=${line1//Exec=flatpak run ru.linux_gaming.PortProton /} else - EXEC_DESKTOP=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} + EXEC_DESKTOP=${line1//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} fi 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 - 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="0" - fi + while IFS=" " read -r -a line2 ; do + if [[ ${line2[1]} == "$ENTRY_POINT" ]] ; then + break fi - DESKTOP_FILES_ARRAY["$count"]="$desktop_file" - (( count++ )) + done < "$PW_DATABASE_PATH/database" + if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then + DESKTOP_CORRECT_FILE="$desktop_file" fi - unset TIME_CURRENT_PROXY fi fi done IFS="$orig_IFS" - - [[ -z $TIME_CURRENT ]] && TIME_CURRENT=0 + if [[ -n ${line2[2]} ]] + then TIME_CURRENT=${line2[2]} + else TIME_CURRENT=0 + fi export TIME_CURRENT - + # Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню + if [[ $PW_NEW_DESKTOP == 1 ]] && [[ ${line2[3]} != NEW_DESKTOP ]] ; then + if [[ -n ${line2[1]} ]] ; then + sed -i "s|$ENTRY_POINT $TIME_CURRENT OLD_DESKTOP|$ENTRY_POINT $TIME_CURRENT NEW_DESKTOP|" "$PW_DATABASE_PATH/database" + else + echo "${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_CURRENT NEW_DESKTOP" >> "$PW_DATABASE_PATH/database" + fi + fi + unset PW_NEW_DESKTOP + # Когда приложение было запущено и завершено 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 + if [[ -n ${line2[1]} ]] ; then + # Когда есть предыдущее время + sed -i "s|$ENTRY_POINT $TIME_CURRENT|$ENTRY_POINT $TIME_TOTAL|" "$PW_DATABASE_PATH/database" + else + # Когда только запустили приложение первый раз + echo "${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_TOTAL OLD_DESKTOP" >> "$PW_DATABASE_PATH/database" + fi + # Здесь добавляются новые линии для статистики по аналогии, к примеру ${line2[4]} + # L4 важен, чтобы не было путаницы из-за sed, то что используется \(.*\), для ${line2[5]} это будет L5 и т.д. + if [[ -z ${line2[4]} ]] ; then + line2[4]=1 + sed -i "s|$ENTRY_POINT \(.*\)|$ENTRY_POINT \1 L4-${line2[4]}|" "$PW_DATABASE_PATH/database" + else + line2[4]=${line2[4]//L4-/} + NUMBER_OF_STARTS=$(( line2[4] + 1 )) + sed -i "s|$ENTRY_POINT \(.*\) L4-${line2[4]}|$ENTRY_POINT \1 L4-$NUMBER_OF_STARTS|" "$PW_DATABASE_PATH/database" + fi + fi + # Ремонтирует путь на новый, если вдруг путь до .exe файла битый или изменился, но .exe файл он опознал + if [[ -n ${line2[1]} ]] && [[ ${line2[0]} != "${portwine_exe// /#@_@#}" ]] ; then + [[ -z $TIME_TOTAL ]] && TIME_TOTAL=$TIME_CURRENT + sed -i "s|${line2[0]} $ENTRY_POINT $TIME_CURRENT|${portwine_exe// /#@_@#} $ENTRY_POINT $TIME_TOTAL|" "$PW_DATABASE_PATH/database" fi } @@ -938,9 +930,9 @@ create_name_desktop () { elif [[ -n $name_desktop ]] ; then DESKTOP_NAME_FILE="$name_desktop" unset name_desktop - elif [[ -n ${DESKTOP_FILES_ARRAY[0]} ]] \ - && [[ -z ${DESKTOP_FILES_ARRAY[1]} ]] ; then - DESKTOP_NAME_FILE="${DESKTOP_FILES_ARRAY[0]//"$PORT_WINE_PATH/"/}" + elif [[ -n $DESKTOP_CORRECT_FILE ]] ; then + DESKTOP_NAME_FILE="${DESKTOP_CORRECT_FILE//"$PORT_WINE_PATH/"/}" + unset DESKTOP_CORRECT_FILE DESKTOP_NAME_FILE="${DESKTOP_NAME_FILE//.desktop/}" fi @@ -2483,6 +2475,7 @@ pw_create_gui_png () { fi if [[ -z "$PORTPROTON_NAME" ]] \ || [[ -z "$FILE_DESCRIPTION" ]] \ + || [[ -z "$ENTRY_POINT" ]] \ || [[ "$PW_NO_RESTART_PPDB" == "1" ]] then if [[ -n "${PORTWINE_CREATE_SHORTCUT_NAME}" ]] ; then @@ -2492,6 +2485,7 @@ pw_create_gui_png () { 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") + ENTRY_POINT=$(sed -n 's/^Entry Point\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") else print_error "exiftool - broken!" fi @@ -2500,6 +2494,7 @@ pw_create_gui_png () { 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") + ENTRY_POINT=$(sed -n 's/^Entry Point\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") fi if [[ "$PW_PRODUCTNAME" =~ (Launcher|RU) ]] @@ -2518,7 +2513,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 FILE_DESCRIPTION + edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION ENTRY_POINT fi resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128" @@ -5600,25 +5595,22 @@ portwine_create_shortcut () { --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ --button="${translations[CREATE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) PW_YAD_OUT=$? + portwine_output_yad_shortcut +} +portwine_output_yad_shortcut () { if [[ "$PW_YAD_OUT" == "0" ]] ; then name_desktop=$(echo "$OUTPUT" | awk -F'|' '{print $1}' | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g" | sed "s/\!//g") 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 - - 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 - fi - else - try_remove_file "${PORT_WINE_PATH}/${name_desktop}.desktop" + if [[ $PORTWINE_CHANGE_SHORTCUT != 1 ]] ; then + edit_user_conf_from_gui PW_SHORTCUT_MENU PW_SHORTCUT_DESKTOP PW_SHORTCUT_STEAM fi + portwine_delete_shortcut + [[ -z $name_desktop ]] && create_name_desktop && export name_desktop="$PW_NAME_DESKTOP_PROXY" echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop" @@ -5690,15 +5682,14 @@ portwine_create_shortcut () { unset PW_SKIP_RESTART_STEAM fi - # Когда новый .desktop файл - echo "#NEW_DESKTOP" >> "$PORT_WINE_PATH/$name_desktop.desktop" + export PW_NEW_DESKTOP="1" if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then print_info "Restarting PP..." [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB restart_pp fi - elif [[ "$PW_YAD_OUT" == "2" ]] ; then + elif [[ "$PW_YAD_OUT" =~ (^1$|^2$|^252$) ]] ; then print_info "Restarting PP..." [[ -n $KEY_MENU ]] && unset portwine_exe [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB @@ -5773,27 +5764,79 @@ pw_auto_create_shortcut () { } export -f pw_auto_create_shortcut -portwine_delete_shortcut () { +# GUI CHANGE SHORTCUT +portwine_change_shortcut () { + export GDK_BACKEND="x11" + + portwine_search_shortcut + if [[ -n $PW_DELETE_MENU ]] + then PW_SHORTCUT_MENU="TRUE" + else PW_SHORTCUT_MENU="FALSE" + fi + if [[ -n ${PW_DELETE_SHORTCUT_DESKTOP[0]} ]] + then PW_SHORTCUT_DESKTOP="TRUE" + else PW_SHORTCUT_DESKTOP="FALSE" + fi + PW_SHORTCUT_STEAM="FALSE" + + unset name_desktop + create_name_desktop + export name_desktop="$PW_NAME_DESKTOP_PROXY" + + [[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}" + + OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \ + --gui-type="settings-shortcut" \ + --gui-type-box="${NOTEBOOK_GUI_TYPE_BOX}" --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" \ + --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" --gui-type-images="${NOTEBOOK_GUI_TYPE_IMAGE}" \ + --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \ + --image "${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" \ + --text-align="center" --text "${translations[The shortcut will be changed in the PortProton directory.]}" \ + --field="${translations[Name]}" "${name_desktop}" \ + --field=" ${translations[Add shortcut to MENU -> GAMES]}":CHK "$PW_SHORTCUT_MENU" \ + --field=" ${translations[Add shortcut to Desktop]}":CHK "$PW_SHORTCUT_DESKTOP" \ + --field=" ${translations[Add shortcut to STEAM library]}":CHK "$PW_SHORTCUT_STEAM" \ + --button="${translations[REMOVE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[CHANGE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) + PW_YAD_OUT=$? + PORTWINE_CHANGE_SHORTCUT=1 + if [[ $PW_YAD_OUT == 1 ]] ; then + [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB + portwine_delete_shortcut + restart_pp + fi + portwine_output_yad_shortcut +} + +portwine_search_shortcut () { + unset PW_DELETE_SHORTCUT_MENU PW_DELETE_SHORTCUT_DESKTOP PW_DELETE_MENU="$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT+=(${PW_DELETE_MENU// /@_@}) + PW_DELETE_SHORTCUT_MENU+=(${PW_DELETE_MENU// /@_@}) PW_DELETE_PP="$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT+=(${PW_DELETE_PP// /@_@}) + PW_DELETE_SHORTCUT_MENU+=(${PW_DELETE_PP// /@_@}) if [[ -d "${HOME}/Desktop" ]] ; then PW_DELETE_DESKTOP="$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT+=(${PW_DELETE_DESKTOP// /@_@}) + PW_DELETE_SHORTCUT_DESKTOP+=(${PW_DELETE_DESKTOP// /@_@}) fi if [[ -d "${HOME}/Рабочий стол" ]] ; then PW_DELETE_DESKTOP="$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT+=(${PW_DELETE_DESKTOP// /@_@}) + PW_DELETE_SHORTCUT_DESKTOP+=(${PW_DELETE_DESKTOP// /@_@}) fi if [[ $(xdg-user-dir DESKTOP) ]] ; then PW_DELETE_DESKTOP="$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT+=(${PW_DELETE_DESKTOP// /@_@}) + PW_DELETE_SHORTCUT_DESKTOP+=(${PW_DELETE_DESKTOP// /@_@}) fi +} - for delete_shortcut in ${PW_DELETE_SHORTCUT[@]} ; do +portwine_delete_shortcut () { + if [[ $PORTWINE_CHANGE_SHORTCUT != 1 ]] ; then + portwine_search_shortcut + fi + unset PORTWINE_CHANGE_SHORTCUT + + for delete_shortcut in ${PW_DELETE_SHORTCUT_MENU[@]} ${PW_DELETE_SHORTCUT_DESKTOP[@]} ; do rm -f "${delete_shortcut//@_@/ }" done } @@ -6122,7 +6165,7 @@ portwine_start_debug () { } pw_create_prefix_backup () { - cd "$HOME" + cd "$HOME" || fatal PW_PREFIX_TO_BACKUP=$("${pw_yad}" --file --directory --width=800 --height=500 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[BACKUP PREFIX TO...]}" \ --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 1a2517f..db88809 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -151,6 +151,7 @@ source "${PORT_SCRIPTS_PATH}/var" export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts" export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}" export PW_CACHE_LANG_PATH="${PORT_WINE_TMP_PATH}/cache_lang/" +export PW_DATABASE_PATH="${PORT_WINE_TMP_PATH}/pw_database/" export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui" export PW_GUI_THEMES_PATH="${PORT_WINE_PATH}/data/themes" export pw_yad="${PW_GUI_THEMES_PATH}/gui/yad_gui_pp" @@ -178,9 +179,11 @@ try_remove_file "${PW_TMPFS_PATH}/update_pfx_log" # shellcheck source=/dev/null source "${USER_CONF}" -if [[ ! -f "${PW_CACHE_LANG_PATH}/$LANGUAGE" ]] ; then - create_translations +if [[ ! -f $PW_DATABASE_PATH/database ]] ; then + create_new_dir "$PW_DATABASE_PATH" + touch "$PW_DATABASE_PATH/database" fi +[[ ! -f "${PW_CACHE_LANG_PATH}/$LANGUAGE" ]] && create_translations unset translations # shellcheck source=/dev/null @@ -491,10 +494,10 @@ if [[ -f "${portwine_exe}" ]] ; then fi if [[ "${PW_GUI_DISABLED_CS}" != 1 ]] ; then pw_create_gui_png - if ! grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop &>/dev/null ; then + if ! grep -il "${portwine_exe}" "$PORT_WINE_PATH"/*.desktop &>/dev/null ; then PW_SHORTCUT="${translations[CREATE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Create shortcut for select file...]}:100" else - PW_SHORTCUT="${translations[DELETE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Delete shortcut for select file...]}:98" + PW_SHORTCUT="${translations[CHANGE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Change shortcut for select file...]}:98" fi create_name_desktop @@ -616,49 +619,43 @@ else desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}" if [[ $desktop_file_new =~ .desktop$ ]] ; then if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then - while IFS= read -r line ; do - if [[ $line =~ ^Exec= ]] ; then + while IFS= read -r line1 ; do + if [[ $line1 =~ ^Exec= ]] ; then if check_flatpak ; then - PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=flatpak run ru.linux_gaming.PortProton /} + PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line1//Exec=flatpak run ru.linux_gaming.PortProton /} else - PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} + PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line1//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} fi 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 + [[ $line1 =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]=${line1//Icon=/} done < "$desktop_file" PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new" - if [[ $SORT_WITH_TIME == enabled ]] && [[ $NEW_DESKTOP == 1 ]] ; then - unset NEW_DESKTOP - sed -i '/^#NEW_DESKTOP/d' "$desktop_file" + # Для конвертации существующих .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 /} + sed -i "s|Exec=flatpak run ru.linux_gaming.PortProton|Exec=env \"$PORT_SCRIPTS_PATH/start.sh\"|" "$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\" /} + sed -i "s|Exec=env \"$PORT_SCRIPTS_PATH/start.sh\"|Exec=flatpak run ru.linux_gaming.PortProton|" "$desktop_file" + fi + while IFS=" " read -r -a line2 ; do + if [[ \"${line2[0]//#@_@#/ }\" == "${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]}" ]] ; then + PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]=${line2[2]} + break + else + PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]=0 + fi + done < "$PW_DATABASE_PATH/database" + if [[ $SORT_WITH_TIME == enabled ]] && [[ ${line2[3]} == NEW_DESKTOP ]] ; then + sed -i "s/${line2[1]} ${line2[2]} NEW_DESKTOP/${line2[1]} ${line2[2]} OLD_DESKTOP/" "$PW_DATABASE_PATH/database" 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 )) \ - || [[ $NEED_FIXES_DESKTOP == 1 ]] - then - portwine_exe=${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]//\"/} - search_desktop_file - unset portwine_exe NEED_FIXES_DESKTOP - PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]=$TIME_CURRENT - fi (( AMOUNT_GENERATE_BUTTONS++ )) fi fi done - # Переопределение элементов в массивах в зависимости от PW_GAME_TIME, от большего значения к меньшему. # 10 миллисекунд на 40 .desktop файлов, работает быстро if [[ $SORT_WITH_TIME == enabled ]] && [[ -n ${PW_GAME_TIME[1]} ]] ; then @@ -683,7 +680,6 @@ else done done fi - # Генерация .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\"%" @@ -903,7 +899,7 @@ case "$PW_YAD_SET" in esac case "$PW_YAD_SET" in - 98) portwine_delete_shortcut ;; + 98) portwine_change_shortcut ;; 100) portwine_create_shortcut ;; DEBUG|102) portwine_start_debug ;; 106) portwine_launch ;;