#!/bin/bash

# Created by Paweł "pavroo" Pijanowski <pavroo@onet.eu> 2014/07/21
# Copyright 2014-2024 Under the GNU GPL2 License
# Last update 2024/08/25 by pavroo

# get default's locale file
DEFLOCDIR="/usr/share/sparky/custom-iso-builder"
if [ "`cat /etc/default/locale | grep LANG= | grep de`" != "" ]; then
. $DEFLOCDIR/de
elif [ "`cat /etc/default/locale | grep LANG= | grep el`" != "" ]; then
. $DEFLOCDIR/el
elif [ "`cat /etc/default/locale | grep LANG= | grep es`" != "" ]; then
	if [ "`cat /etc/default/locale | grep LANG= | grep es_AR`" != "" ]; then
. $DEFLOCDIR/es_AR
	else
. $DEFLOCDIR/es_ES
	fi
elif [ "`cat /etc/default/locale | grep LANG= | grep fi`" != "" ]; then
. $DEFLOCDIR/fi
elif [ "`cat /etc/default/locale | grep LANG= | grep fr`" != "" ]; then
. $DEFLOCDIR/fr
elif [ "`cat /etc/default/locale | grep LANG= | grep hu`" != "" ]; then
. $DEFLOCDIR/hu
elif [ "`cat /etc/default/locale | grep LANG= | grep id_ID`" != "" ]; then
. $DEFLOCDIR/id_ID
elif [ "`cat /etc/default/locale | grep LANG= | grep it`" != "" ]; then
. $DEFLOCDIR/it
elif [ "`cat /etc/default/locale | grep LANG= | grep ja`" != "" ]; then
. $DEFLOCDIR/ja
elif [ "`cat /etc/default/locale | grep LANG= | grep pl`" != "" ]; then
. $DEFLOCDIR/pl
elif [ "`cat /etc/default/locale | grep LANG= | grep pt_BR`" != "" ]; then
. $DEFLOCDIR/pt_BR
elif [ "`cat /etc/default/locale | grep LANG= | grep pt_PT`" != "" ]; then
. $DEFLOCDIR/pt_PT
elif [ "`cat /etc/default/locale | grep LANG= | grep ru`" != "" ]; then
. $DEFLOCDIR/ru
elif [ "`cat /etc/default/locale | grep LANG= | grep uk`" != "" ]; then
. $DEFLOCDIR/uk
else
. $DEFLOCDIR/en
fi

testroot="`whoami`"
if [ "$testroot" != "root" ]; then
    echo "Must be root... Exiting now..."
    exit 1
fi

DIALOG400="yad --window-icon=media-cdrom --width=400 --height=200 --center"
DIALOG500="yad --window-icon=media-cdrom --width=500 --height=300 --center"
DIALOG700="yad --window-icon=media-cdrom --width=700 --height=500 --center"
DIALOG="yad --window-icon=media-cdrom --width=600 --height=350 --center"
TITLE="--always-print-result --dialog-sep --image=media-cdrom --title="
TEXT="--text="
ENTRY="--entry "
ENTRYTEXT="--entry-text "
MENU="--list --column=$LOCAL1 --column=$LOCAL2"
OKEXIT=" --button=Ok:0 --button=$LOCAL3:1 "
MSGBOX=" --button=Ok:0 "
FILESELECT="--file"
TITLETEXT="Custom ISO Builder"
DIRSELECT="--file --directory"
FILTER="--file-filter"
FIELD="--field"
if [ -f /usr/bin/sparky-xterm ];then
	SPARKYXTERM="/usr/bin/sparky-xterm"
else
	echo "sparky-xterm is missing... Exiting..."
	exit 1
fi

mainmenu () {
CHOICES=`$DIALOG $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL42" \
Unpack_ISO "$LOCAL43" \
Files "$LOCAL16" \
Edit "$LOCAL17" \
Rebuild "$LOCAL44" \
Back "$LOCAL47"`

if [ "$?" = "0" ]; then
	CHOICE=`echo $CHOICES | cut -d "|" -f 1`
else
	exit 0
fi

if [ "$CHOICE" = "Unpack_ISO" ]; then
	unpackisomenu
elif [ "$CHOICE" = "Files" ]; then
	filesmenu
elif [ "$CHOICE" = "Edit" ]; then
	editmenu
elif [ "$CHOICE" = "Rebuild" ]; then
	rebuildmenu
elif [ "$CHOICE" = "Back" ]; then
	/usr/bin/custom-iso-builder
else
	exit 0
fi
}

unpackisomenu () {
$DIALOG400 $TITLE"$TITLETEXT" $TEXT"$LOCAL45 \n\n$LOCAL33" $OKEXIT

if [ "$?" != "0" ]; then
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL21"
	mainmenu
fi

DIRTEMP=`$DIALOG700 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL29" $DIRSELECT`

OLDISO=`$DIALOG700 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL23" $FILESELECT $FILTER="ISO image |*.iso"`

rm -rf $DIRTEMP/ISOTEMP
rm -rf $DIRTEMP/ISOMOUNT
mkdir -p $DIRTEMP/ISOTEMP
mkdir -p $DIRTEMP/ISOMOUNT

# mount iso image
modprobe -r loop
modprobe loop
mount -o ro -o loop $OLDISO $DIRTEMP/ISOMOUNT

# copy all iso files
if [ -f $DIRTEMP/ISOMOUNT/live/*.squashfs ]; then

	rsync -a $DIRTEMP/ISOMOUNT $DIRTEMP/ISOTEMP/ | zenity --progress --pulsate --width=450 --height=100 --auto-close --window-icon=/usr/share/icons/sparky/iso-builder/iso-builder.png --text="$LOCAL24" --title="Custom ISO Builder" --no-cancel

	rm -rf $DIRTEMP/CONF
	mkdir -p $DIRTEMP/CONF
	cp -a /etc/custom-iso-builder.conf $DIRTEMP/CONF

	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL26 \n$DIRTEMP \n\n$LOCAL27"

	# umount the iso image
	umount $DIRTEMP/ISOMOUNT
	rm -rf $DIRTEMP/ISOMOUNT

	mainmenu

else
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL28"

	# umount iso image
	umount $DIRTEMP/ISOMOUNT
	rm -rf $DIRTEMP/ISOMOUNT
fi

mainmenu

}

filesmenu () {
$DIALOG400 $TITLE"$TITLETEXT" $TEXT"$LOCAL29 \n$LOCAL34 \n\n$LOCAL33" $OKEXIT

if [ "$?" != "0" ]; then
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL21"
	mainmenu
fi

FILESTEMP=`$DIALOG700 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL29" $DIRSELECT`

$SPARKYXTERM "mc $FILESTEMP"

mainmenu
}

editmenu () {
$DIALOG400 $TITLE"$TITLETEXT" $TEXT"$LOCAL32 \n\nC$LOCAL29 \n\n$LOCAL33" $OKEXIT

if [ "$?" != "0" ]; then
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL21"
	mainmenu
fi

EDITTEMP=`$DIALOG700 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL29" $FILESELECT`

$SPARKYXTERM "nano $EDITTEMP/CONF/custom-iso-builder.conf"

mainmenu
}

rebuildmenu () {
$DIALOG400 $TITLE"$TITLETEXT" $TEXT"$LOCAL46" $OKEXIT

if [ "$?" != "0" ]; then
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL21"
	mainmenu
fi

REBUILDTEMP=`$DIALOG700 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL29" $DIRSELECT`

# load the config file 
. $REBUILDTEMP/CONF/custom-iso-builder.conf

# build new iso
if [ -f $REBUILDTEMP/ISOTEMP/ISOMOUNT/live/filesystem.squashfs ]; then

	cd $REBUILDTEMP/ISOTEMP/ISOMOUNT

	if [ -f $REBUILDTEMP/ISOTEMP/ISOMOUNT/EFI/BOOT/*.efi ]; then

		$SPARKYXTERM "xorriso -as mkisofs -rock -omit-version-number -disable-deep-relocation -joliet -allow-leading-dots -volid "$ISOCUSTOMVOLIDFULL" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -o $REBUILDTEMP/$CUSTOMISOFULL $REBUILDTEMP/ISOTEMP/ISOMOUNT"

	else

	$SPARKYXTERM "xorriso -as mkisofs -iso-level 3 -volid "$ISOCUSTOMVOLID" -J -joliet-long -eltorito-boot isolinux/isolinux.bin -eltorito-catalog isolinux/boot.cat -iso-level 3 -no-emul-boot -boot-load-size 4 -boot-info-table -partition_offset 16 -o $REBUILDTEMP/$CUSTOMISO $REBUILDTEMP/ISOTEMP/ISOMOUNT"

	fi

else
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL38"
	mainmenu

fi

# crate isohybryde
cd $REBUILDTEMP

if [ -f $REBUILDTEMP/*.iso ]; then

	if [ -f $REBUILDTEMP/ISOTEMP/ISOMOUNT/EFI/BOOT/*.efi ]; then

		isohybrid -u $REBUILDTEMP/$CUSTOMISOFULL

	else
		isohybrid -u $REBUILDTEMP/$CUSTOMISO

	fi

else
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL39"
	mainmenu

fi

# create md5sum
if [ -f $REBUILDTEMP/*.iso ]; then

	if [ -f $REBUILDTEMP/ISOTEMP/ISOMOUNT/EFI/BOOT/*.efi ]; then

		md5sum $CUSTOMISOFULL > $CUSTOMISOFULL.md5

	else
		md5sum $CUSTOMISO > $CUSTOMISO.md5

	fi

else
	$DIALOG400 $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL40"
	mainmenu

fi

$DIALOG400 $TITLE"$TITLETEXT" $TEXT"$LOCAL41" $MSGBOX

mainmenu
}

mainmenu
