#!/bin/bash
#   /usr/LH/bin/ripD_eject.sh
#	A DVD rip and eject script.
########################################################################
DEV='/dev/sr0'				# DVD device
MPNT='media/cdrom'				# Mount Point
Ddir='/myth/video'		# DVD output dir List
Bsnd='/usr/share/sounds/init.wav'	# Begin sound file
Esnd='/usr/share/sounds/complete.wav'	# End   sound file
DATE=$(date +%Y%m%d_%H%M)		# current date/time
LOG='/var/log/mythtv/ripD.log'			# name of Log file.
#TRACK=$(lsdvd | grep -i longest | awk '{print $3}')		#Finds longest track
FILE=$TITLE
#-----------------------------------------------------------------------
[ -r /etc/rip.cfg ] && . /etc/rip.cfg
#-----------------------------------------------------------------------
LOCK=/tmp/.ripLock.$$
[ "$DISPLAY" == "" ] && export DISPLAY=:0
########################################################################
function osd { # $1=text, $2=delay
    msg_client.py --clear ripD
    msg_client.py --kill
    msg_client.py --msg "$1" --timeout $2 --tag ripD
} >& /dev/null

function osd_loop() {
    FN=$1 ; shift
    TXT="to $dir/$FILE"
    N=0
    while [ -f "$LOCK" ]; do
        osd "Backing up '$TITLE' $TXT" 70
        N=$(($N+1))
        TXT="($N min. elapsed)"
        sleep 60
    done
}
########################################################################
osd "Detecting DVD..." 60 &
# first make sure DMA is on:
sudo hdparm -d1 -u1 $DEV >& /dev/null
dvdFound=false
for c in {1..10}; do
    dvdBACKlog=$(dvdbackup -i /dev/sr0 -I)
    if [[ $dvdBACKlog == *"information"* ]]; then
        echo "`date` detected DVD" >> $LOG
        rm -f /tmp/.ripLock.*
        # attempt to get the DVD information:
        TITLE=$(dvdbackup -i /dev/sr0 -I | grep information | awk '{ s = ""; for (i = 8; i <= NF; i++) s = s $i " "; print s }' | tr -d '"' | sed 's/ /_/g' | sed 's/_$//g')
        dvdFound=true
        osd "Found DVD '$TITLE'" 10 &
        sleep 1
        break
    fi
    sleep 3
done
if ! $dvdFound ; then
    echo "no DVD" >> $LOG
    osd "DVD not found" 10 &
    eject ; eject
    exit 0
fi
#=======================================================================
for dir in $Ddir ; do
    if [ -d $dir -a -w $dir ]; then
	    break
    fi
done
#-----------------------------------------------------------------------
if [ ! -d "$dir" ]; then
    echo "no $dir" >> $LOG
    osd "$dir Not Found!" 10 &
    eject ; eject
    exit 0
fi
if [ ! -w "$dir" ]; then
    echo "$dir not writable" >> $LOG
    osd "$dir Not Writable!" 10 &
    eject ; eject
    exit 0
fi
#-----------------------------------------------------------------------
#mount $DEV >& /dev/null
#dev=$(readlink $DEV)
#df=$(df -h /dev/$dev | grep /dev/$dev)
#MAX=$(echo $df | while read d v r ; do echo $v ; done)
#echo " backup $MAX to $dir" >> $LOG
#=======================================================================
if [ "$TITLE" == "DVD_VIDEO" -o "$TITLE" == "" \
    -o "$TITLE" == " " -o "$TITLE" == "[ ].*" ]; then
    # if not a good title,
    TITLE="dvdbackup_$DATE"
fi
echo " $TITLE" >> $LOG
if [[ $1 = "m" ]]; then
    COMMAND='dvdbackup -M -i $DEV -o $dir -n $TITLE'
    FILE=$TITLE
elif [[ $1 = "h" ]]; then
    COMMAND='HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "HQ 480p30 Surround" --main-feature'
    FILE=$TITLE.mp4
elif [[ $1 = "n" ]]; then
    COMMAND='HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "Fast 480p30" --main-feature'
    FILE=$TITLE.mp4
elif [[ $1 = "l" ]]; then
    COMMAND='HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "Very Fast 480p30" --main-feature'
    FILE=$TITLE.mp4
else
    COMMAND='dd if=$DEV of=$dir/$TITLE.iso bs=2048'
    FILE=$TITLE.iso
fi
{ # for the redir below:
    # Begin:
    touch $LOCK
    osd_loop "$dir/$TITLE" "$TITLE" &
    sleep 1 ; aplay $Bsnd
    eval $COMMAND
    # Finish:
    rm -f $LOCK
    sleep 1
    osd "Done Backing up '$TITLE' to $dir/$FILE" 5 &
    sleep 1
    aplay $Esnd
    # Eject the media:
    sudo eject ; sudo eject
} > $dir/.$TITLE.log 2>&1
echo " `du -sh $dir/$FILE`" >> $LOG
echo " `date` finished DVD"  >> $LOG
echo "" >> $LOG
exit 0
########################################################################
# End