#!/bin/sh
#this script builds the gui for burn options
. $CONFIG
echo "$OUTDIR" > $WORKDIR/OUTDIR
if [ "$BURN_DATA" = "true" ] && [ ! "$BURN" ]; then export BURN=data; fi
if [ "$BURN_AUDIO" = "true" ] && [ ! "$BURN" ]; then export BURN=audio; fi
if [ "$BURN_VIDEO" = "true" ] && [ ! "$BURN" ]; then export BURN=video; fi
if [ $BURN = video ] && grep -iq 'video_ts' $WORKDIR/burn ; then export BURN=video_ts; fi
#BURN ISO: check if there is only 1 file (*.iso) in burnlist. if not, chooser.
if [ $BURN = iso ]; then
	if grep -iq ".iso" $WORKDIR/burn && [ "`cat $WORKDIR/burn | wc -l`" = 1 ]; then
		echo 
	else
		TITLE="$LOC203"
		. $APPDIR/box_chooser
		if [ "$EXIT" = "OK" ]; then
			#file not found
			if [ ! -s "$CHOOSER" ]; then
				TXT1="<b>$LOC383</b>"
				. $APPDIR/box
				exit
			#---
			else
				rm -fr "$BURNLIST_DIR/*"
				cp -srpf "$CHOOSER" "$BURNLIST_DIR"
				CHOOSER="`echo "$CHOOSER" | sed -e "s/^.*\\///g"`"
				echo "$CHOOSER" > $WORKDIR/burn
				BURNLIST="$CHOOSER"
			fi
		else
			exit
		fi
	fi
fi

#check if there is only 1 file (*.iso), and mode is DATA. User wants probably to burn-iso 
if [ $BURN = data ]; then
	if grep -iq '.iso' $WORKDIR/burn && [ "`cat $WORKDIR/burn | wc -l`" = 1 ]; then
		. $APPDIR/box -quest_iso
		case $EXIT in
			iso) export BURN=iso
				. $APPDIR/func_burn_options
				exit
				;;
			Cancel) exit
				;;
		esac
	fi
fi


#############   ERROR CHECKING   #############

#check ALL optical drives for a valid video-DVD
if [ $BURN = copy_video ]; then
	. $APPDIR/func -find_devices
	echo "$CD_DRIVES" | cut -d ' ' -f 1 > $WORKDIR/tmp
	INDRIVE=""
	while read I; do
		umount $I > /dev/null 2>&1
		mount -t auto $I $HOME/.pburn/mnt/ > /dev/null 2>&1
		if ls $HOME/.pburn/mnt/ | grep -iq video_ts; then INDRIVE=$I; fi
		umount $HOME/.pburn/mnt/
	done < $WORKDIR/tmp
	if [ ! "$INDRIVE" ]; then
		TXT1="$LOC303"
		. $APPDIR/box
		exit
	fi
fi
#Nothing added to burnlist
if [ "`cat $WORKDIR/burn | wc -l`" = 0 ] && [ $BURN != blank ] && [ $BURN != copy ] && [ $BURN != copy_audio ] && [ $BURN != copy_video ]; then 
	TXT1="$LOC302"
	. $APPDIR/box
	exit
fi
if [ $BURN = data ] || [ $BURN = audio ] || [ $BURN = video ] || [ $BURN = video_ts ] || [ $BURN = iso ]; then
	#no burner
	if [ ! "$BURNDEV" ]; then
		TXT1="<b>$LOC393</b>"
		. $APPDIR/box
		exit
	fi
	#burner mounted
	if mount | grep -q "$BURNDEV" ; then
		TXT1="<b>$LOC375</b>"
		TXT2="$LOC261: $BURNDEV"
		. $APPDIR/box
		exit
	fi
	#if -c parameter: skip media checking
	if [ "$CHECK_MEDIA" != "false" ]; then
		echo "$LOC313 ..." > $WORKDIR/splashtext
		$APPDIR/box_splash &
		. $APPDIR/func -check_media
		#check if disc is not blank or closed.
		if [ ! "`echo "$CDINFO" | grep -E "Cannot read TOC|-1:59:74"`" ] && [ $BURN != data ]; then TMP=true; fi #Not blank disc
		if [ "`echo "$CDINFO" | grep -B 1 'track:lout' | grep 'mode: 1'`" ] && [ $BURN = data ]; then TMP=true; fi #closed disc
		if [ "$TMP" = "true" ]; then
			echo 100 > $WORKDIR/splash #reset progress bar
			. $APPDIR/box -quest_blank
			case $EXIT in
				blank)
					echo "$LOC340" > $WORKDIR/splashtext
					$APPDIR/box_splash &
					. $APPDIR/func -check_media
					if [ $MEDIATYPE = CD ]; then
						case $BURNDEV in \/dev\/hd*) DEV="ATAPI:$BURNDEV";; *) DEV="$BURNDEV";; esac #atapi for old kernels
						$CDRECORD blank=fast dev=$DEV
					else #DVD
						dvd+rw-format -force $BURNDEV
					fi
					. $APPDIR/func -check_media #read disc info second time to get blanked info
					. $APPDIR/func_build_command
					;;
				Cancel)
					exit
					;;
			esac
		fi
		
		#check if burn-data is more than valid space on disc --> overburn?
		if [ "$RAW_BURNMODE" != "true" ] && [ "$CHK_OVERBURN" != "true" ] && [ $BURN = data ]; then
			case $MEDIASIZE_FREE in *[0-9]*)
				TMP="`mkisofs --print-size -exclude-list $WORKDIR/exclude -graft-points -path-list=$WORKDIR/graft_points | tail -n 1`"
				ISOSIZE=$(($TMP*2048))
				MEDIASIZE_USED=$(($MEDIASIZE-$MEDIASIZE_FREE))
				NEEDED_SPACE=$(($MEDIASIZE_USED+$ISOSIZE))
				#make it human readable
				if [ "$NEEDED_SPACE" -gt "1000000000" ]; then
					NEEDED_SPACE_HUMAN="`echo "scale=2; $NEEDED_SPACE / 1024 / 1024 / 1024" | bc -l` Gb"
				else
					NEEDED_SPACE_HUMAN="`echo "scale=2; $NEEDED_SPACE / 1024 / 1024" | bc -l` Mb"
				fi
				if [ $NEEDED_SPACE -gt $MEDIASIZE ]; then
					TXT3="`echo "$HLPTXT32" | grep -B 1 -A 10 -C 1 '(88'`"
					IMG=dialog-question; FRAME="$LOC243"; TXT1="<b>$LOC352</b>"; TXT2="$TXT3

$LOC214: $NEEDED_SPACE_HUMAN
$LOC353"
					. $APPDIR/box -yesno
					if [ $EXIT = Yes ]; then
						export CHK_OVERBURN=true
					else #go back
						echo 100 > $WORKDIR/splash
						exit
					fi
				fi
				;;
			esac
		fi
		
		#get sections for off-the-fly multisession burning
		if [ $MEDIATYPE = CD ]; then
			ON_THE_FLY=false; OFF_THE_FLY=true
			export SECTIONS="`$CDRECORD dev=$BURNDEV -msinfo 2> /dev/null | grep -F ","`"  #get previous session
		else #DVD
			#check if trying to burn a audio-CD to a DVD
			if [ $BURN = audio ]; then
				echo 100 > $WORKDIR/splash
				TXT1="<b>$LOC345</b>"
				TXT2="$LOC261: $BURNDEV"
				. $APPDIR/box
				exit
			fi
			#---
			ON_THE_FLY=true; OFF_THE_FLY=false
			#check if valid multisession disc
			TMP="`echo "$DVDINFO" | grep "Media"`"
			case $TMP in
			*-RW*)
				if [ "`echo "$DVDINFO" | grep 'complete incremental'`" ]; then
					echo "$DVDINFO" | grep 'Track Start Address' | cut -d: -f2 | cut -d'*' -f1 | tr -d ' ' > $WORKDIR/tmp
					export SECTIONS="0,`tail -n 1 $WORKDIR/tmp`"
				fi
				;;
			*+RW*) #dvd+rw-mediainfo doesn't differ between first track and the rest on DVD+RW
				umount $BURNDEV > /dev/null 2>&1
				mount -t iso9660 $BURNDEV $HOME/.pburn/mnt/ > /dev/null 2>&1
				ls $HOME/.pburn/mnt/ > $WORKDIR/tmp
				if [ -s $WORKDIR/tmp ]; then
					echo "$DVDINFO" | grep 'Track Start Address' | cut -d: -f2 | cut -d'*' -f1 | tr -d ' ' > $WORKDIR/tmp
					export SECTIONS="0,`tail -n 1 $WORKDIR/tmp`"
				fi
				umount $HOME/.pburn/mnt/
				;;
			*) #ordinary discs +-R
				if [ "`echo -n "$DVDINFO" | grep "Disc status" | grep "appendable"`" ]; then
					echo "$DVDINFO" | grep 'Track Start Address' | cut -d: -f2 | cut -d'*' -f1 | tr -d ' ' > $WORKDIR/tmp
					export SECTIONS="0,`tail -n 1 $WORKDIR/tmp`"
				fi
				;;
			esac
		fi
	fi
fi

#=============================================================================
VISIBLE_ISO=enabled #burning ISO disables temporary storage
. $APPDIR/func_gui_options
echo $BURN > $WORKDIR/BURN #for rebuild command in advanced tab
echo 100 > $WORKDIR/splash
case $BURN in
copy)
	INDRIVE=$BURNDEV
	CONFIG_LABELS="$LOC428|$LOC260|$LOC267|$LOC279"
	GUI_EXPORT_ISO=""; GUI_AUDIO=""; GUI_VIDEO=""; GUI_FILESYSTEM=""
	GUI_PUBLISH=""; GUI_BURN=""; GUI_BLANK=""; GUI_CDTEXT=""; GUI_SLIDESHOW=""; GUI_COPY_VIDEO=""
	;;
copy_audio)
	INDRIVE=$BURNDEV
	#cleanup
	echo -n > $WORKDIR/cdtext
	echo -n > $WORKDIR/CDTEXT_ALBUM_TITLE
	echo -n > $WORKDIR/CDTEXT_ALBUM_ARTIST
	rm -f "$OUTDIR"/audio.cddb > /dev/null 2>&1
	rm -f "$OUTDIR"/audio.cdindex > /dev/null 2>&1
	rm -f "$OUTDIR"/pburn*.raw > /dev/null 2>&1
	rm -f "$OUTDIR"/pburn*.inf > /dev/null 2>&1
	#---
	CONFIG_LABELS="$LOC428|$LOC290|$LOC260|$LOC267|$LOC279"
	GUI_EXPORT_ISO=""; GUI_AUDIO=""; GUI_VIDEO=""; GUI_FILESYSTEM=""; GUI_PUBLISH=""
	GUI_BURN=""; GUI_BLANK=""; GUI_SLIDESHOW=""; GUI_COPY_VIDEO=""
	;;
copy_video)
	vobcopy -i $INDRIVE -I 2> $WORKDIR/tmp
	export COPY_VIDEO_NAME=`grep DVD-name $WORKDIR/tmp | cut -f 2 -d ':' | sed 's/^ //'`
	TMP="`grep 'Most chapters' $WORKDIR/tmp | cut -f 2 -d ']' | sed 's/ Most chapters has //' | cut -f 1 -d '.'`"
	export COPY_VIDEO_TITLE=`echo "$TMP" | sed 's/title //' | cut -f 1 -d ' '`
	rm "$OUTDIR/$COPY_VIDEO_NAME$COPY_VIDEO_TITLE.vob.partial"
	export DO_VOBCOPY=true
	if [ -f "$OUTDIR/$COPY_VIDEO_NAME$COPY_VIDEO_TITLE.vob" ]; then #file already exist
		IMG=warning; FRAME=Warning
		TXT1="<b>$LOC385</b>: $OUTDIR/$COPY_VIDEO_NAME$COPY_VIDEO_TITLE.vob"; TXT2="$LOC386"
		. $APPDIR/box -yesno
		if [ $EXIT = Yes ]; then
			rm "$OUTDIR/$COPY_VIDEO_NAME$COPY_VIDEO_TITLE.vob"
		else
			export DO_VOBCOPY=false
		fi
	fi
	. $APPDIR/func_gui_options
	CONFIG_LABELS="$LOC160|$LOC260|$LOC267|$LOC279"
	GUI_EXPORT_ISO=""; GUI_AUDIO=""; GUI_VIDEO=""; GUI_FILESYSTEM=""
	GUI_PUBLISH=""; GUI_BURN=""; GUI_BLANK=""; GUI_CDTEXT=""; GUI_SLIDESHOW=""; GUI_COPY=""
	;;
data)
	CONFIG_LABELS="$LOC120|$LOC249|$LOC260|$LOC274|$LOC279"
	GUI_AUDIO=""; GUI_VIDEO=""; GUI_EXPORT_ISO=""; GUI_CDTEXT=""; GUI_COPY=""
	GUI_COPY_DEVICE=""; GUI_SLIDESHOW=""; GUI_COPY_VIDEO=""
	;;
audio)
	export CDTEXT_INFO=`cut -d '|' -f 2 $WORKDIR/burn | sed -e 's/\.[^\.]*$//' | sed -e "s/(..)_//g"`  #generate CD-text info
	echo  "$CDTEXT_INFO" > $WORKDIR/cdtext #for <edit>
	CONFIG_LABELS="$LOC122|$LOC290|$LOC260|$LOC279"
	GUI_BURN=""; GUI_VIDEO=""; GUI_EXPORT_ISO=""; GUI_FILESYSTEM=""
	GUI_PUBLISH=""; GUI_COPY=""; GUI_COPY_DEVICE=""; GUI_SLIDESHOW=""; GUI_COPY_VIDEO=""
	;;
video)
	#set default values
	SLIDETIME=$PIC_VIEWTIME #use PIC_VIEWTIME only as default 
	echo -n > $WORKDIR/BACKGROUND_MUSIC
	echo -n > $WORKDIR/CHK_SLIDESHOW
	. $APPDIR/func -slideshow_time
	. $APPDIR/func_gui_options #update mediatype
	CONFIG_LABELS="$LOC129|$LOC710|$LOC260|$LOC279"
	GUI_BURN=""; GUI_AUDIO=""; GUI_CDTEXT=""; GUI_EXPORT_ISO=""; GUI_FILESYSTEM=""
	GUI_PUBLISH=""; GUI_COPY=""; GUI_COPY_DEVICE=""; GUI_COPY_VIDEO=""
	;;
video_ts)
	CONFIG_LABELS="$LOC260|$LOC279"
	GUI_BURN=""; GUI_AUDIO=""; GUI_CDTEXT=""; GUI_EXPORT_ISO=""; GUI_FILESYSTEM=""
	GUI_PUBLISH=""; GUI_COPY=""; GUI_COPY_DEVICE=""; GUI_COPY_VIDEO=""; GUI_VIDEO=""; GUI_SLIDESHOW=""
	;;
iso)
	#check if file is iso-file
	if ! grep -i ".iso" $WORKDIR/burn; then
		TXT1="$LOC306"
		. $APPDIR/box -yesno
		[ $EXIT != Yes ] && exit
	fi
	VISIBLE_ISO=disabled #disable temp storage
	. $APPDIR/func_gui_options #update
	CONFIG_LABELS="$LOC203|$LOC260|$LOC279"
	GUI_AUDIO=""; GUI_VIDEO=""; GUI_EXPORT_ISO=""; GUI_FILESYSTEM=""; GUI_COPY_VIDEO=""
	GUI_PUBLISH=""; GUI_CDTEXT=""; GUI_COPY=""; GUI_COPY_DEVICE=""; GUI_SLIDESHOW=""
	;;
export_iso)
	export EXPORT_ISO=true; export MEDIATYPE=CD; export BURN=data
	ISOFILE="$HOME/Pburn.iso" #save file
	echo "$ISOFILE" > $WORKDIR/isofile #reset <entry> input
	export GUI_EXPORT_ISO="
	<vbox>
	 <frame $LOC105> 
	  <text><label>$LOC230</label></text>
	  <hbox>
	   <entry>
	    <variable>ISOFILE</variable>
	    <input>cat $WORKDIR/isofile</input>
	   </entry>
	   <button>
	    <input file stock=\"gtk-open\"></input>
	    <action>SAVE_EXT=iso; TITLE=\$LOC_ISO; . $APPDIR/box_save</action>
	    <action>refresh:ISOFILE</action>
	   </button>
	  </hbox>
	 </frame>
	</vbox>"
	CONFIG_LABELS="$LOC_ISO|$LOC249|$LOC274|$LOC279"
	GUI_BURN=""; GUI_DEVICES=""; GUI_AUDIO=""; GUI_VIDEO=""; GUI_COPY_VIDEO=""
	GUI_CDTEXT=""; GUI_COPY=""; GUI_COPY_DEVICE=""; GUI_SLIDESHOW=""
	;;
blank)
	echo "$LOC313 ..." > $WORKDIR/splashtext
	$APPDIR/box_splash &
	. $APPDIR/func -check_media
	export GUI_BLANK="
	<vbox>
	 <frame $LOC403>
	  <radiobutton label=\"$LOC401\"></radiobutton>
	  <radiobutton label=\"$LOC402\"><variable>COMPLETE</variable></radiobutton>
	  <text><label>\"\"</label></text>
	  <hbox>
	   <text><label>$LOC236</label></text>
	   <combobox>
	    <variable>MEDIATYPE</variable>
	    <item>$MEDIATYPE</item>
	    <item>CD</item>
	    <item>DVD</item>
	    <item>Blu-Ray</item>
	   </combobox>
	  </hbox>
	 </frame>
	</vbox>"
	CONFIG_LABELS="$LOC400|$LOC260|$LOC279"
	GUI_BURN=""; GUI_PUBLISH=""; GUI_FILESYSTEM=""; GUI_AUDIO=""; GUI_VIDEO=""; GUI_EXPORT_ISO=""
	GUI_CDTEXT=""; GUI_COPY=""; GUI_COPY_DEVICE=""; GUI_SLIDESHOW=""; GUI_COPY_VIDEO=""
	;;
esac
. $APPDIR/func_build_command

#theme
if [ -s $APPDIR/themes/$THEME/button-burn.png ]; then
	LABEL_BUTTON_BURN="<input file>$APPDIR/themes/$THEME/button-burn.png</input>"
else
	LABEL_BUTTON_BURN="<input file stock=\"gtk-apply\"></input>"
fi
if [ -s $APPDIR/themes/$THEME/button-quit.png ]; then
	LABEL_BUTTON_CANCEL="<input file>$APPDIR/themes/$THEME/button-quit.png</input>"
else
	LABEL_BUTTON_CANCEL="<input file stock=\"gtk-cancel\"></input>"
fi
#---
export Pburn_config="
<window title=\"Pburn\" icon-name=\"gtk-cdrom\">
 <vbox>
  <pixmap><input file>$APPDIR/themes/$THEME/heading-preferences.png</input></pixmap>
  <notebook labels=\"$CONFIG_LABELS\">
   $GUI_BURN
   $GUI_BLANK
   $GUI_COPY
   $GUI_COPY_VIDEO
   $GUI_EXPORT_ISO
   $GUI_FILESYSTEM
   $GUI_AUDIO
   $GUI_CDTEXT
   $GUI_VIDEO
   $GUI_SLIDESHOW
   $GUI_DEVICES
   $GUI_COPY_DEVICE
   $GUI_PUBLISH
   <vbox>
    <frame $LOC282>
     <hbox>
      <checkbox label=\"$LOC281\">
       <variable>EDIT_COMMAND</variable>
       <action>. $APPDIR/func_build_command</action>
       <action>refresh:COMMAND</action>
       <action>refresh:COMMAND_PREBURN</action>
       <action>if true enable:COMMAND</action>
       <action>if true enable:COMMAND_PREBURN</action>
       <action>if false disable:COMMAND</action>
       <action>if false disable:COMMAND_PREBURN</action>
      </checkbox>
      <text><label>\"  \"</label></text>
      <button label=\"$LOC280\">
       <input file icon=\"gtk-refresh\"></input>
       <action>. $APPDIR/func_build_command</action>
       <action>refresh:COMMAND</action>
       <action>refresh:COMMAND_PREBURN</action>
      </button>
     </hbox>
     <edit>
      <variable>COMMAND_PREBURN</variable>
      <input file>$WORKDIR/exec_preburn</input>
      <visible>disabled</visible>
      <width>100</width><height>85</height>
     </edit>
     <edit>
      <variable>COMMAND</variable>
      <input file>$WORKDIR/exec</input>
      <visible>disabled</visible>
      <width>100</width><height>45</height>
     </edit>
    </frame>
    <hbox>
     <combobox width-request=\"90\">
      <variable>CPU_PRIORITY</variable>
      <item>$CPU_PRIORITY</item>
      <item>low</item>
      <item>normal</item>
      <item>high</item>
     </combobox>
     <text width-request=\"320\"><label>$LOC284</label></text>
     <text use-markup=\"true\"><label>\"<b>$LOC_INFO</b>\"</label></text>
     <button>
      <input file stock=\"gtk-info\"></input>
      <action>FRAME=$LOC_INFO; IMG=dialog-info; TXT1=\$HLPTXT311; . $APPDIR/box &</action>
     </button>
    </hbox>
   </vbox>
  </notebook>
  <hbox>
   $GUI_TEMPORARY_STORAGE
   <hbox width-request=\"340\">
	<button tooltip-text=\" $LOC120 \" height-request=\"72\" width-request=\"72\">
	 $LABEL_BUTTON_BURN
	 <action type=\"exit\">burn</action>
	</button>
   </hbox>
  </hbox>
 </vbox>
</window>"
	echo 100 > $WORKDIR/splash
	I=$IFS; IFS=""
	for STATEMENTS in  $($GTKDIALOG -p Pburn_config --center); do
		eval $STATEMENTS
	done
	IFS=$I
	if [ "$EXIT" = "burn" ]; then
		#execute burning
		if [ "$EDIT_COMMAND" = "true" ]; then #manual edit of command
			echo "$COMMAND_PREBURN" > $WORKDIR/exec_preburn
			echo "$COMMAND" > $WORKDIR/exec
		else
			. $APPDIR/func_build_command #build command of given settings
		fi
		. $APPDIR/func_exec
	fi
