#!/bin/bash
# Sunday, 04/25/2021

pth=`dirname "$1"`
if [ -z "$1" ]; then
	DIALOG=Xdialog
	$DIALOG   --rc-file /usr/share/pixmaps/colorboxDOH.rc  --icon /usr/share/pixmaps/doh.xpm  --title "DOH!" \
		--msgbox "\nFile to convert not found\n" 0 0
	exit 1
fi

if [[ ! $(file -b "$1") =~ JPEG ]]; then
	DIALOG=Xdialog
	$DIALOG   --rc-file /usr/share/pixmaps/colorboxDOH.rc  --icon /usr/share/pixmaps/doh.xpm  --title "DOH!" \
		--msgbox "\nFile not a JPEG\n" 0 0
	exit 1
fi

cd $pth


echo 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA6lAAAOpQEqZYgCAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAitJREFUOI2F0ktolHcUBfDf/5tv
Jg8jMcYYSTU1YOsLqQRf0BYFQZAsrG4UC+rC0oUgCEqxKoWiS0EQFHEpXVQN3dSKFFwoIr4QWyq2
oFCciloYk8yYx/hlvi7GjE0ieuCu7j3nnnP//4Cl+MjbcRGfYBlO4NXEgRB4usOMBxAJmTZxGl43
d2t/2CpXbHNne0VamCa37bHhq+MEMsKzxPKZIA4k6SQbh+Qd9kRG8KmmC1cUN465iVBdeLCDYjd7
Z00S2GQ6GJW6otjTLP4NXWM7I7BqClFgZRO4bMD3/nFdSdl4V/2SBbiF7XHNwdd/80ULvQWXDVjv
z0nECWhFj6zwIrUi/X8t0ZjinZUVnUH05gavcUPJ7wa1ih3T6b4lbls8bvWXWv1l4T5U4om+zilY
pMEl882WA70Ktf5X2pw0V0YuonrAaKxZwa8G/Oxj+YakRrrlJfhWh1O6ZASPDMdU714TuKnkOx8o
54INPSU/zCyBR0acNc8RswX8Ycha97dCLcIvjSXLB+ut0mTngoLnnVn7Vw9Z81Od48mH2mWNSPU2
FyX9ZYnRulqE3paSrRuHnJs16G79sB+XVcDjObHNn/XZ2f3CvfoRRzv7fLNuxLMoEVVfQ4xw4PMh
/e2xXVsSjX3DBqdla/mvdVdNPm8Z8GR6kJ8TO99REvJVgRBH4d/mpvoyQpqmkkolR5j0g0KoEtJU
KJeThrqKPf2jo6cDpqJtIuE9KCMP/wGSSr06Y/GDIAAAAABJRU5ErkJggg==' | base64 -d > /tmp/icon.png


zz=`command -v cjxl`
if [ -z "$zz" ]; then	
	DIALOG=Xdialog
	$DIALOG   --rc-file /usr/share/pixmaps/colorboxDOH.rc  --icon /usr/share/pixmaps/doh.xpm  --title "DOH!" \
		--msgbox "\nThe \"JPEG-XL\" library and tols are needed for this conversion.\n" 0 0
	exit 1
fi

# get rid of spaces in filename
newname="$(echo "$1" | sed 's/ /_/g')"
mv "$1" "$newname" 2> /dev/null
jname=`echo "$newname" | sed 's/\.jpg/\.jxl/I'`
VALUE=`yad --scale --window-icon="/tmp/icon.png" --value "85" --min-value "60" --max-value "100" --title "Output Quality" --center --on-top  --width=320`

# In case user cancels operation:
if [ -z "$VALUE" ]; then
	exit 
fi

# check if image is bigger than about a megabyte -- will make a progressive jxl if large...
imgSize=`wc -c  "$newname" | awk '{print $1}'`
$(sleep 1 && wmctrl -a "Converting" -b add,above)&
if [ $imgSize -gt 1000000 ]; then
	cjxl "$newname" "$jname" -q $VALUE -p | zenity --width=400 --title="Converting" --progress --pulsate --window-icon="/tmp/icon.png" --auto-close 2> /dev/null&
else
	cjxl "$newname" "$jname" -q $VALUE | zenity --width=400 --title="Converting" --progress --pulsate --window-icon="/tmp/icon.png" --auto-close 2> /dev/null&
fi

####  THE REST of this simply stops conversion 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...
rm -f /tmp/icon.png 2>/dev/null
killall -9 cjxl 2>/dev/null
###################################################################

rm -f /tmp/icon.png 2>/dev/null
echo "Conversion complete"
exit 0
