#!/bin/bash
#v2.0 - 11/08/2018

if [[ "$DISPLAY" && "$(which Xdialog 2>&1 | grep -v "which: no")" ]]; then
	dialog="Xdialog"
else
	dialog="dialog"
fi
if [ ! -e "$1" ]; then
	$dialog --title "No File Specified" --msgbox "\nMust be passed a PNG file\n" 10 36
	exit
fi

pth=`dirname "$1"`
cd $pth

echo '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
uf3PHv8DFMHdkAeXazMAAAAASUVORK5CYII=
' | base64 -d > /tmp/icon.png

bname=$(basename "$1")

hasAlpha=`identify -verbose "$1"`
cAlpha='Type: TrueColorAlpha'
gAlpha='Type: GrayscaleAlpha'

# first, if transparent
if [[ "$hasAlpha" =~ "$cAlpha" ]] || [[ "$hasAlpha" =~ "$gAlpha" ]]; then

	if [[ "$bname" =~ "_T.png" ]]; then
		newname="$(echo "$bname" | sed 's/ /_/g')"
		newname="$pth/$newname"	
	else
		toAlpha=`echo "$bname" | sed 's/\.png/\_T.png/'`
		toAlpha="$(echo "$toAlpha" | sed 's/ /_/g')"
		newname="$pth/$toAlpha"
	fi

# if not transparent
else
	if [[ "$bname" =~ "_T.png" ]]; then
		noAlpha=`echo "$bname" | sed 's/\_T.png/\.png/'`
		toAlpha="$(echo "$noAlpha" | sed 's/ /_/g')"
		newname="$pth/$noAlpha"
	else
		newname="$(echo "$bname" | sed 's/ /_/g')"
		newname="$pth/$newname"	
	fi
fi

cp -f "$1" $newname 2> /dev/null

if [[ ! "$newname" =~ "_T.png" ]]; then
	jname=`echo "$newname" | sed 's/\.png/\.jpg/'`
	wname=`echo "$newname" | sed 's/\.png/\.webp/'`
	cwebp -q 90 $newname -o $wname
	flatty=`echo "$newname" | sed 's/\.png/\X.png/'`
	convert -background white -alpha remove -flatten "$newname" "$flatty"
	if type "guetzli" > /dev/null; then
		zenity --width=400 --window-icon="/tmp/icon.png" --info --text="\nGoogles GUETZLI jpg compression utility will be used...\n" --timeout 2 2>/dev/null
		guetzli --quality 93 "$flatty" "$jname" 2>&1 | zenity --width=300 --window-icon="/tmp/icon.png" --progress --pulsate --no-cancel --auto-close --title="Converting File..." 2>/dev/null
		rm -f "$flatty" 2>/dev/null
	else
		zenity --info --window-icon="/tmp/icon.png" --text="\nGoogles GUETZLI is not installed, \nso imagemagick CONVERT will generate the JPG file...\n" --timeout 3  2>/dev/null
		convert -background white -alpha remove -quality 92 $newname $jname
	fi	

	echo "Done."
	play /usr/share/sounds/opcomp.wav 2>/dev/null
	rm -f /tmp/icon.png 2>/dev/null
	exit 0
fi

# leaves script already if we did not start with a transparent PNG
##################################################################################################

flatpng=`echo "$newname" | sed 's/\_T.png/\.png/'`
jname=`echo "$flatpng" | sed 's/\.png/\.jpg/'`
wname=`echo "$flatpng" | sed 's/\.png/\.webp/'`
cwebp -q 90 $newname -o $wname
convert -background white -alpha remove -flatten "$newname" "$flatpng"
if type "guetzli" > /dev/null; then
	guetzli --quality 91 "$flatpng" "$jname" | zenity --width=300 --progress --pulsate --window-icon="/tmp/icon.png"  --auto-close --text="Converting File using GUETZLI utility -- This can take a while.  "  2> /dev/null&
	####  THE REST of this simply stops guetzli if the dialog is cancelled #########
	# get zenity process id
	PID_ZENITY=${!}
	# get firstly created child process id, which is running all tasks
	PID_CHILD=$(pgrep -o -P $$)
	# loop to check that progress dialog has not been cancelled
	while [ "$PID_ZENITY" != "" ]
	do
	  # get PID of all running tasks
	  PID_TASKS=$(pgrep -d ' ' -P ${PID_CHILD})
	  # check if zenity PID is still there (dialog box still open)
	  PID_ZENITY=$(ps h -o pid --pid ${PID_ZENITY} | xargs)
	  # sleep for 2 second
	  sleep 2
	done
	# since dialog is finished or cancelled...
	killall -9 guetzli 2>/dev/null
	###################################################################	
else
	zenity --window-icon="/tmp/icon.png" --width=400 --info --text="\nGoogles GUETZLI is not installed, \nso imagemagick CONVERT will generate the JPG file...\n" --timeout 3  2>/dev/null
	convert -quality 92 $flatpng $jname
fi
rm -f /tmp/icon.png 2>/dev/null
echo "Done."
play /usr/share/sounds/opcomp.wav 2>/dev/null
