#!/bin/bash


function  help ()
	{
	echo "Poor Man's Play List"
	echo "Usage: $(basename $0) [player] [datadir] [player_opts] [player_exts]"
	echo " plays a sound or displays an image or video keeping a position in playlist."
	echo " argument player defaults to mpg123"
	echo " argument datadir defaults to /tmp/player"
	echo " arguments player_opts and player_exts defaults depend on player"
	}

function set_datadir ()
{
    debug_echo '$datadir' is $datadir
     if [ $datadir = ${datadir##\/} ]
     then # relative path given
      debug_echo "relative path given"
      datadir=$PWD/${datadir%%\/}
     else # absolute path given
      debug_echo "absolute path given"
      datadir=${datadir%%\/}; 
     fi
}  

# default options for various players
# you can add your own
mpg123_opts=
# mpg123_opts="-r 44100"
mpg123_exts="mp3"
xv_opts="-nolimits"
timidity_opts="-OdM -s22"
timidity_exts="mid"
consolekmid_opts="-d1"
consolekmid_exts="mid"
pmidi_exts="mid"
play_exts="wav"
aplaymidi_exts="mid"
pmidi_opts="-p128:0"
aplaymidi_opts="-p128:0"


# read functions y_or_n and debug_echo
source ${MYSOURCERDIR}/interact

# test help situations  
if [ z$1 = "z-?" ] || [ z$1 = "z-h" ] || [ z$1 = "z--help" ]
    then help; exit 0;    
fi

if  [ $# -eq 0 ]
    then 
    player=mpg123 # default
    datadir=/tmp/$player
    player_opts=$mpg123_opts
    player_exts=$mpg123_exts
    if [ -not -d $datadir ]; then echo "$datadir : no such directory."; exit 1; fi
# player and evt. datadir is provided, give defaults for the rest:
elif [ $# -eq 1 ] || [ $# -eq 2 ] 
    then
    player=$1
    if [ $# -eq 1 ]; 
    then 
     datadir=/tmp/$player; 
    else
     datadir=$2; 
     set_datadir
    fi
    if [ ! -d $datadir ]; then echo "$datadir : no such directory."; exit 1; fi
    if [ $player = mpg123 ] 
    then     
     player_opts=$mpg123_opts
     player_exts=$mpg123_exts
     # player_opts="-r 44100"
    elif  [ $player = xv ]
    then
     player_opts=$xv_opts
     player_exts=$xv_exts
    elif  [ $player = timidity ]
    then
     player_opts=$timidity_opts
     player_exts=$timidity_exts
    elif  [ $player = consolekmid ]
    then
     player_opts=$consolekmid_opts
     player_exts=$consolekmid_exts
    elif  [ $player = pmidi ]
    then
     player_opts=$pmidi_opts
     player_exts=$pmidi_exts
    elif  [ $player = play ]
    then
     player_opts=$play_opts
     player_exts=$play_exts
    fi
elif [ $# -eq 3 ] # player, datadir and player_opts are provided, just read them
    then
    player=$1
    datadir=${2%%\/}
    shift 2
    player_opts=$@
elif [ $# -eq 4 ] # player, datadir and player_opts are provided, just read them
    then
    player=$1
    datadir=${2%%\/}
    player_opts=$3
    shift 3
    player_exts=$@
fi

debug_echo  player is $player
debug_echo  datadir is $datadir
debug_echo  player_opts is $player_opts
debug_echo  player_exts is $player_exts

if [ -w ${datadir} ]; 
then 
 posfile=${datadir}/pmpl_pos; 
 # it might still be that [ -w ${datadir} ] gave true but the fs is readonly
 for name in $datadir/*
 do
  pmpl_pos=$(cat $posfile)
  debug_echo "$pmpl_pos" \> $posfile 
  cp -f $posfile ${posfile}~
  echo "$pmpl_pos" > $posfile 
  if [ $? -ne 0 ]; 
  then 
   posfile=/tmp/pmpl_pos_$(echo ${datadir} | sed 's/\//_/g')
  fi 
  break
 done

 else 
 posfile=/tmp/pmpl_pos_$(echo ${datadir} | sed 's/\//_/g')
fi
debug_echo posfile is $posfile
echo "Using posfile ${posfile}."


if [ -f $posfile ]
then
 pmpl_pos=`cat $posfile`
else
 pmpl_pos="0"
fi

debug_echo "pmpl_pos = $pmpl_pos"
if [ -z "$pmpl_pos" ]
then pmpl_pos="0"
fi 
inloop=0
for name in $datadir/*.${player_exts}
do
 debug_echo name is $name
 debug_echo pmpl_pos is $pmpl_pos
 if [ "$pmpl_pos" = "0" -o "$name" = "$pmpl_pos" -o  $inloop -eq 1 ]
 then
  echo Reaching $name 
  inloop=1
 # pmpl_pos=$name
  echo "$name" > $posfile
  echo "$player $player_opts $name" 
 debug_echo  $player $player_opts "$name" 
  $player $player_opts "$name" 2>&1 >/dev/null &

# begin
 while echo ""; 
  do
   echo Type "k" to skip, "x" to mute and quit, "q" to play current file
   source ./pmpone.sh $player
   echo typed char is $mychar
   if [ $mychar = k ]
   then 
       killall $player; break;
   elif [ $mychar = q ]
   then exit
   elif [ $mychar = x ]
   then killall $player; exit;
   fi
  done

 pmpl_pos=$name
# end
else
  echo Not playing $name
fi
killall $player
done

echo > $posfile #to restart from beginning next time if we reached the end


