#!/bin/bash
# png2avif
# laast edited  Sunday, 10/04/2020
# script by Paul Sherman <psherman2001@gmail.com>
# c2020, GPL3

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
cd $pth


echo 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIxSURB
VDiNdZPPS1RRFMc/987TGdGxFjNlSZGk/bCyaFUtsoUwkRBGUm3aJBSuQvwDok07IZRgoCCkmqSw
iMywIDQpK6gI0k3jr5lS/G1WzIzPN6fFm3y+Mb9wuNxz7vmen1cZBq+KghzRGo0DpRW6tATrZYTf
d9rJ3bKZ9LHD+HFjEmAxHUMkjshI5syS908RpZD680gi6rJNApjWKCLXEKlApHk1QTqGFAURQPaX
I0Nvl21TGkAE6ARSwHN3jmMT8OI17Nxu378MwKGT8O6T82bJHEbkNiInEGmz2ecHkFPHEa3tyNmS
50MiN1gwFCgAqjICWBbU1EF3H2sikYS5ebvxljnsrvlu8/+jrpQrDYjEmQGwUkNugn277Ee11Ujv
I2TiM9L3xHG+cNZurMSZXUXwsRPJMZDHt9yk91ps51AlsuhkPKcVKBGntgcdcLURakLumns/wIE9
8DAMOYaj1/JvjCvG1ngJ6tvWk1x09BNT8KwV/AWO7uZ9vApIJ6Ion9dWdvXAz/w8zi1UcDExRLh6
ChGIjkBZiR1MKfg2DEdPk9YApgmXI35EIFQJ4e9BJEfT6tlKV7+XsWlFWQkMjmsa2tctj1p7EANQ
TW8KaSnazWzHCOWeP/QUbgIgmZ9L3WApRv8STTtidI37ieQXcyb6laDHRGEvkQSu72V6Q/ZHc2Pb
7DwzuT5+Ffiomv5B+GCMylqWVCCg4qIotiwklbQHDYiZEm1ZmS1dA8Ub6f4LXUBSiPgjWUoAAAAA
SUVORK5CYII=' | base64 -d > /tmp/icon.png

zz=`command -v avifenc`
if [ -z "$zz" ]; then	
	DIALOG=Xdialog
	$DIALOG   --rc-file /usr/share/pixmaps/colorboxDOH.rc  --icon /usr/share/pixmaps/doh.xpm  --title "DOH!" \
		--msgbox "\nThe \"AVIF\" encoder \"avifenc\" is 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
avname=`echo "$newname" | sed 's/\.png/\.avif/I'`
VALUE=`yad --scale --window-icon="/tmp/icon.png" --value "30" --min-value "0" --max-value "63" --title="Compression" --text='<span color=\"blue\" font= "11">\nLower is sharper, higher makes smaller file size\n</span>' --text-align=center --center --on-top  --width=440`
# In case user cancels operation:
if [ -z "$VALUE" ]; then
	exit 
fi

# Convert 
$(sleep .5 && wmctrl -F -a 'Converting' -b add,above)&
avifenc --min $VALUE --max $VALUE "$newname" "$avname" | zenity --width=400 --title="Converting" --progress --pulsate --window-icon="/tmp/icon.png" --auto-close --text="Converting to AVIF" &
####  THE REST of this simply stops the 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 1
done
# since dialog is finished or cancelled...
killall -9 avifenc 2>/dev/null
###################################################################

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