Commit cb8f27e6 authored by Vladislav's avatar Vladislav

resize_png can now create multiple icons at once

parent d91580f1
...@@ -975,10 +975,25 @@ debug_timer () { ...@@ -975,10 +975,25 @@ debug_timer () {
fi fi
} }
fix_icon_name_png () {
if [[ $1 =~ [\!\%\$\&\<] ]] ; then
local ICON_NAME_OLD=$1
local ICON_NAME_NEW=$ICON_NAME_OLD
local ICON_NAME_REGEX=(\! % \$ \& \<)
for i in "${ICON_NAME_REGEX[@]}" ; do
ICON_NAME_NEW="${ICON_NAME_NEW//$i/}"
done
sed -i "s|Icon=$ICON_NAME_OLD|Icon=$ICON_NAME_NEW|" "$2"
return 0
else
return 1
fi
}
# Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени) # Поиск нужного .desktop файла по $portwine_exe (для показа в комментариях нужного времени)
# Параллельное создание базы по времени после завершения приложения # Параллельное создание базы по времени после завершения приложения
search_desktop_file () { search_desktop_file () {
local desktop_file desktop_file_new line1 line2 FILE_SHA256SUM_ARRAY EXEC_DESKTOP BROKEN_LINE FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND local desktop_file desktop_file_new line1 line2 FILE_SHA256SUM_ARRAY EXEC_DESKTOP ICON_NAME BROKEN_LINE FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND
if [[ -z $FILE_SHA256SUM ]] ; then if [[ -z $FILE_SHA256SUM ]] ; then
read -r -a FILE_SHA256SUM_ARRAY < <(sha256sum "$portwine_exe") read -r -a FILE_SHA256SUM_ARRAY < <(sha256sum "$portwine_exe")
FILE_SHA256SUM=${FILE_SHA256SUM_ARRAY[0]} FILE_SHA256SUM=${FILE_SHA256SUM_ARRAY[0]}
...@@ -996,7 +1011,9 @@ search_desktop_file () { ...@@ -996,7 +1011,9 @@ search_desktop_file () {
EXEC_DESKTOP=${line1//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} EXEC_DESKTOP=${line1//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /}
fi fi
fi fi
[[ $line1 =~ ^Icon= ]] && ICON_NAME=${line1//Icon=/}
done < "$desktop_file" done < "$desktop_file"
fix_icon_name_png "$ICON_NAME" "$desktop_file"
if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then
DESKTOP_CORRECT_FILE="$desktop_file" DESKTOP_CORRECT_FILE="$desktop_file"
break break
...@@ -2982,9 +2999,15 @@ pw_create_gui_png () { ...@@ -2982,9 +2999,15 @@ pw_create_gui_png () {
edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION
fi fi
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128" resize_png "$portwine_exe" "${PORTPROTON_NAME}" "48" "128"
PORTPROTON_NAME_PNG="${PORTPROTON_NAME// /_}" PORTPROTON_NAME_PNG="${PORTPROTON_NAME// /_}"
if [[ $PORTPROTON_NAME_PNG =~ [\!\%\$\&\<] ]] ; then
local ICON_NAME_REGEX=(\! % \$ \& \<)
for i in "${ICON_NAME_REGEX[@]}" ; do
PORTPROTON_NAME_PNG="${PORTPROTON_NAME_PNG//$i/}"
done
fi
if [[ -z "${PW_ICON_FOR_YAD}" ]] ; then if [[ -z "${PW_ICON_FOR_YAD}" ]] ; then
if [[ -n "$(file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}")" ]] ; then if [[ -n "$(file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}")" ]] ; then
export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png" export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME_PNG}.png"
...@@ -6074,35 +6097,49 @@ resize_png () { ...@@ -6074,35 +6097,49 @@ resize_png () {
print_error "no argument specified for resize_png" print_error "no argument specified for resize_png"
return 1 return 1
else else
local RESIZE_FILE="$1" local RESIZE_FILE RESIZE_NAME_PNG resize_to resize_to_helper
local RESIZE_NAME_PNG="${2// /_}" RESIZE_FILE="$1"
local RESIZE_TO="$3" RESIZE_NAME_PNG="${2// /_}"
fi fi
if [[ -f "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" ]] \ for resize_to in "${@:3}" ; do
|| [[ ! -f "${RESIZE_FILE}" ]] \ if [[ $resize_to == 128 ]]
|| [[ ! ${RESIZE_FILE,,} =~ .exe$ ]] then resize_to_helper=""
then else resize_to_helper="_$resize_to"
return 0 fi
fi
try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png"
try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png"
if check_flatpak ; then if [[ $RESIZE_NAME_PNG =~ [\!\%\$\&\<] ]] ; then
if ! timeout 3 \ local ICON_NAME_REGEX=(\! % \$ \& \<)
exe-thumbnailer --force-resize -s "$RESIZE_TO" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" \ for i in "${ICON_NAME_REGEX[@]}" ; do
&& [[ "$ALPINE_FP" != "1" ]] RESIZE_NAME_PNG="${RESIZE_NAME_PNG//$i/}"
done
fi
if [[ -f "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}${resize_to_helper}.png" ]] \
|| [[ ! -f "${RESIZE_FILE}" ]] \
|| [[ ! ${RESIZE_FILE,,} =~ .exe$ ]]
then then
print_error "exe-thumbnailer - broken!" return 0
fi fi
else
print_warning "use portable exe-thumbnailer" try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png"
env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png"
LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" \
"${PW_WINELIB}/runtime/files/bin/python3.9" \ if check_flatpak ; then
"${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" --force-resize -s "$RESIZE_TO" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" if ! timeout 3 \
fi exe-thumbnailer --force-resize -s "$resize_to" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}${resize_to_helper}.png" \
return 0 && [[ "$ALPINE_FP" != "1" ]]
then
print_error "exe-thumbnailer - broken!"
fi
else
print_warning "use portable exe-thumbnailer"
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" --force-resize -s "$resize_to" "$(readlink -f "${RESIZE_FILE}")" "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}${resize_to_helper}.png"
fi
done
} }
# GUI CREATE SHORTCUT # GUI CREATE SHORTCUT
...@@ -6122,6 +6159,12 @@ portwine_create_shortcut () { ...@@ -6122,6 +6159,12 @@ portwine_create_shortcut () {
export name_desktop="$PW_NAME_DESKTOP_PROXY" export name_desktop="$PW_NAME_DESKTOP_PROXY"
[[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}" [[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}"
if [[ $name_desktop_png =~ [\!\%\$\&\<] ]] ; then
local ICON_NAME_REGEX=(\! % \$ \& \<)
for i in "${ICON_NAME_REGEX[@]}" ; do
name_desktop_png="${name_desktop_png//$i/}"
done
fi
OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \ OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \
--gui-type="settings-shortcut" \ --gui-type="settings-shortcut" \
...@@ -6287,7 +6330,7 @@ pw_auto_create_shortcut () { ...@@ -6287,7 +6330,7 @@ pw_auto_create_shortcut () {
print_info "Created link for: $link_name" print_info "Created link for: $link_name"
PORTPROTON_NAME="$link_name" PORTPROTON_NAME="$link_name"
export portwine_exe="$exe_path" export portwine_exe="$exe_path"
resize_png "$portwine_exe" "${PORTPROTON_NAME}" "128" resize_png "$portwine_exe" "${PORTPROTON_NAME}" "48" "128"
export PW_NO_RESTART_PPDB=1 export PW_NO_RESTART_PPDB=1
portwine_create_shortcut portwine_create_shortcut
fi fi
...@@ -6327,6 +6370,12 @@ portwine_change_shortcut () { ...@@ -6327,6 +6370,12 @@ portwine_change_shortcut () {
pw_create_gui_png pw_create_gui_png
[[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}" [[ -z "${name_desktop_png}" ]] && name_desktop_png="${PORTPROTON_NAME// /_}"
if [[ $name_desktop_png =~ [\!\%\$\&\<] ]] ; then
local ICON_NAME_REGEX=(\! % \$ \& \<)
for i in "${ICON_NAME_REGEX[@]}" ; do
name_desktop_png="${name_desktop_png//$i/}"
done
fi
OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \ OUTPUT=$("${pw_yad}" --title="${translations[Choices]}" --form \
--gui-type="settings-shortcut" \ --gui-type="settings-shortcut" \
......
...@@ -645,6 +645,12 @@ else ...@@ -645,6 +645,12 @@ else
fi fi
[[ $line1 =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]=${line1//Icon=/} [[ $line1 =~ ^Icon= ]] && PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]=${line1//Icon=/}
done < "$desktop_file" done < "$desktop_file"
if fix_icon_name_png "${PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]}" "$desktop_file" ; then
ICON_NAME_REGEX=(\! % \$ \& \<)
for i in "${ICON_NAME_REGEX[@]}" ; do
PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]="${PW_ICON_PATH["$AMOUNT_GENERATE_BUTTONS"]//$i/}"
done
fi
PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new" PW_ALL_DF["$AMOUNT_GENERATE_BUTTONS"]="$desktop_file_new"
# Для конвертации существующих .desktop файлов flatpak в натив и наоборот # Для конвертации существующих .desktop файлов flatpak в натив и наоборот
if [[ ${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]} =~ ^"Exec=flatpak run ru.linux_gaming.PortProton " ]] ; then if [[ ${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]} =~ ^"Exec=flatpak run ru.linux_gaming.PortProton " ]] ; then
...@@ -702,20 +708,6 @@ else ...@@ -702,20 +708,6 @@ else
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_DESKTOP_FILES="${PW_ALL_DF[$dp]}" PW_DESKTOP_FILES="${PW_ALL_DF[$dp]}"
PW_DESKTOP_FILES_SHOW="$PW_DESKTOP_FILES" PW_DESKTOP_FILES_SHOW="$PW_DESKTOP_FILES"
PW_ICON_PATH[dp]=${PW_ICON_PATH[dp]%.png}
PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON[dp]//\"/}"
PW_NAME_D_ICON_128="${PW_ICON_PATH[dp]}"
resize_png "$PW_NAME_D_ICON_NEW" "${PW_NAME_D_ICON_128//"${PORT_WINE_PATH}/data/img/"/}" "128"
if [[ $PW_DESKTOP_FILES =~ [\!\%\$\&\<] || ${PW_ICON_PATH[dp]} =~ [\!\%\$\&\<] ]] ; then
PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
for i in "${PW_DESKTOP_FILES_SHOW_REGEX[@]}" ; do
PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//$i/}"
PW_ICON_PATH[dp]="${PW_ICON_PATH[dp]//$i/}"
done
fi
PW_NAME_D_ICON_48="${PW_ICON_PATH[dp]}_48"
resize_png "$PW_NAME_D_ICON_NEW" "${PW_NAME_D_ICON_48//"${PORT_WINE_PATH}/data/img/"/}" "48"
if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then if [[ $PW_DESKTOP_FILES =~ [\(\)\!\$\%\&\`\'\"\>\<\\\|\;] ]] ; then
PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;) PW_DESKTOP_FILES_REGEX=(\( \) \! \$ % \& \` \' \" \> \< \\ \| \;)
...@@ -726,7 +718,19 @@ else ...@@ -726,7 +718,19 @@ else
done done
fi fi
PW_GENERATE_BUTTONS+="--field= $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_NAME_D_ICON_48}.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%" if [[ $PW_DESKTOP_FILES_SHOW =~ [\!\%\$\&\<] ]] ; then
PW_DESKTOP_FILES_SHOW_REGEX=(\! % \$ \& \<)
for i in "${PW_DESKTOP_FILES_SHOW_REGEX[@]}" ; do
PW_DESKTOP_FILES_SHOW="${PW_DESKTOP_FILES_SHOW//$i/}"
done
fi
PW_ICON_PATH[dp]=${PW_ICON_PATH[dp]%.png}
PW_NAME_D_ICON_NEW="${PW_NAME_D_ICON[dp]//\"/}"
resize_png "$PW_NAME_D_ICON_NEW" "${PW_ICON_PATH[dp]//"${PORT_WINE_PATH}/data/img/"/}" "48" "128"
PW_GENERATE_BUTTONS+="--field= $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_ICON_PATH[dp]}_48.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%"
done done
if [[ $AMOUNT_GENERATE_BUTTONS == 1 ]] ; then if [[ $AMOUNT_GENERATE_BUTTONS == 1 ]] ; then
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment