#!/bin/sh
# rcrsn51 2013-06-03

export TEXTDOMAIN=peasymp3
export OUTPUT_CHARSET=UTF-8

export TRACKFILE="/tmp/peasymp3.track"
export PIDFILE="/tmp/peasymp3.pid"  	#for STOP
export PIDFILE2="/tmp/peasymp3.pid2"	#for PAUSE
export TMPFOLDER="/tmp/peasymp3"
export MODEFILE="/tmp/peasymp3.mode"

export SKIPLIST="jpg$|png$|pdf$|txt$|/$"

PLAY () {
while [ 1 ]; do
  STARTTRACK=$(cat $TRACKFILE)
  TRACKCOUNT=$(ls -1p "$MP3FOLDER" | grep -v -i -E $SKIPLIST | wc -l)
  for T in $(seq $STARTTRACK $TRACKCOUNT); do  
    echo $T > $TRACKFILE
    TRACKNAME=$(ls -1p "$MP3FOLDER" | grep -v -i -E $SKIPLIST | awk '{ if (NR == '$T') {print $0; exit}}')
    FULLPATH="$MP3FOLDER/$TRACKNAME"
    EXT=$(echo -n ${TRACKNAME##*.} | tr [:upper:] [:lower:])
    case "$EXT" in
      mp3) lame --decode -h "$FULLPATH" - 2>/dev/null | aplay >/dev/null 2>&1 ;;
      wav|au) aplay "$FULLPATH" >/dev/null 2>&1 ;;
      url) ffplay -nodisp $(cat "$FULLPATH" | tr -d [:cntrl:]) >/dev/null 2>&1 ;; 
      cd) cdda2wav -H $(cat "$FULLPATH") - 2>/dev/null | aplay -f cd >/dev/null 2>&1 ;;
      pls) ffplay -nodisp $(grep "File1" "$FULLPATH" | cut -d= -f2) >/dev/null 2>&1 ;;
      m3u) ffplay -nodisp $(head -n1 "$FULLPATH" | tr -d [:cntrl:]) >/dev/null 2>&1 ;;
      mid) timidity -Ow -o- "$FULLPATH" 2>/dev/null | aplay >/dev/null 2>&1 ;;
      mod|xm|it|pp) xmp -c -d wav "$FULLPATH" 2>/dev/null | aplay >/dev/null 2>&1 ;;
      *) ffplay "$FULLPATH" >/dev/null 2>&1 ;;
    esac
    MODE=$(cat $MODEFILE)
    [ $MODE = "once" -o $MODE = "repeat" ] && break
  done
  [ $MODE = "regular" -o $MODE = "once" ] && break
  [ $MODE = "loop" ] && echo 1 > $TRACKFILE
done
}
export -f PLAY

PAUSE () {
  PID=$(pidof aplay)
  [ -z "$PID" ] && PID=$(pidof ffplay | awk '{print $NF}')
  if [ -n "$PID" ]; then
    kill -STOP $PID
    echo $PID > $PIDFILE2
  fi
}
export -f PAUSE

RESUME () {
  if [ -f $PIDFILE2 ]; then
    kill -CONT $(cat $PIDFILE2) 2>/dev/null
    rm $PIDFILE2
  fi
}
export -f RESUME

STOP () {
  if [ -f $PIDFILE ]; then 
    RESUME
    kill $(cat $PIDFILE) 2>/dev/null
    rm $PIDFILE
    killall lame aplay ffplay cdda2wav timidity xmp 2>/dev/null
  fi
}
export -f STOP

PICKMODE () {
  M=$(cat $MODEFILE)
  MODE=$(Xdialog --stdout --no-tags --title " " --default-item $M --menubox "$(gettext 'Select a Play Mode')" 11 30 0 "regular" "$(gettext 'Play the folder once')" "loop" "$(gettext 'Repeat the folder')" "once" "$(gettext 'Play the track once')" "repeat" "$(gettext 'Repeat the track')")
  [ $? -eq 0 ] && echo $MODE > $MODEFILE
}
export -f PICKMODE

PLAYLIST () {
  [ -d "$MP3FOLDER" ] || return
  [ -f $TRACKFILE ] || echo 1 > $TRACKFILE
  T=$(cat $TRACKFILE)
  LIST=$(ls -1p "$MP3FOLDER" | grep -v -i -E $SKIPLIST | sed 's/\.[^\.]*$//' | awk '{print NR " \"" $0"\""}')
  [ -z "$LIST" ] && exit
  PICK=$(eval Xdialog --stdout --no-tags --title Playlist --default-item $T --menubox \"$(gettext 'Select another track or Cancel')\" 20 70 0 $LIST)
  if [ $? -eq 0 ]; then
    echo $PICK > $TRACKFILE
    STOP
    PLAY &
    echo $! > $PIDFILE
  fi
}
export -f PLAYLIST

CONTROL () {
  # 1=start 2=prev 3=next
  [ -d "$MP3FOLDER" ] || return
  STOP
  [ -f $TRACKFILE ] || echo 1 > $TRACKFILE
  T=$(cat $TRACKFILE)
  case $1 in 
    1) echo 1 > $TRACKFILE;;
    2) [ $T -gt 1 ] && echo $((--T)) > $TRACKFILE;;
    3) TRACKCOUNT=$(ls -1p "$MP3FOLDER" | grep -v -i -E $SKIPLIST | wc -l)
       echo $((T%$TRACKCOUNT+1)) > $TRACKFILE;;
  esac
  PLAY &
  echo $! > $PIDFILE
}
export -f CONTROL

############ End of Functions ##############

# check if currently running
if [ "$(pidof peasymp3)" != "$$" ]; then
  Xdialog --title " " --msgbox "$(gettext 'PeasyMP3 is already running!')" 0 0
  exit
fi

echo "regular" > $MODEFILE	# the default play mode

if [ -d "$1" ]; then
  START_FOLDER=$1
elif [ -f "$1" ]; then
  rm -rf $TMPFOLDER
  mkdir $TMPFOLDER
  ln -sf "$1" "$TMPFOLDER/$(basename "$1")"
  START_FOLDER=$TMPFOLDER
  MP3FOLDER=$START_FOLDER	# auto-play a file
  [ "$2" != "-b" ] && CONTROL 1
elif [ -d $HOME/.peasymp3 ]; then
  START_FOLDER=$HOME/.peasymp3
else
  START_FOLDER=\"\" 
fi

if [ "$2" = "-b" ]; then
  echo 1 > $TRACKFILE; MP3FOLDER=$START_FOLDER
  PLAY
  rm $TRACKFILE
  rm -rf $TMPFOLDER
  exit
fi

export PROG="
<window title=\"PeasyMP3 v3.9ff\">
<vbox>
  <frame $(gettext 'Drag a folder of media files here')>
    <hbox>
      <entry accept=\"directory\">
         <variable>MP3FOLDER</variable>
         <default>$START_FOLDER</default>
       </entry>
      <button>
        <input file stock=\"gtk-open\"></input>
        <action type=\"fileselect\">MP3FOLDER</action>
      </button>
    </hbox>
    <hbox>
      <button>
        <label>$(gettext 'Start')</label>
        <action>CONTROL 1</action>
      </button>
      <button>
        <label>$(gettext 'Pause')</label>
        <action>PAUSE</action>
      </button>
      <button>
        <label>$(gettext 'Resume')</label>
        <action>RESUME</action>
      </button>
      <button>
        <label>$(gettext 'Previous')</label>
        <action>CONTROL 2</action>
      </button>
      <button>
        <label>$(gettext 'Next')</label>
        <action>CONTROL 3</action>
      </button>
    </hbox>
    <hbox>
      <button>
        <label>$(gettext 'Help')</label>
        <action>defaultbrowser http://murga-linux.com/puppy/viewtopic.php?p=707844#707844 &</action>
      </button>
      <text><label>\"     \"</label></text>
      <button>
        <label>$(gettext 'Mode')</label>
        <action>PICKMODE &</action>
      </button>      
      <button>
        <label>$(gettext 'Playlist')</label>
        <action>PLAYLIST &</action>
      </button>
      <button>
        <label>$(gettext 'Volume')</label>
        <action>rxvt -e alsamixer &</action>
      </button>
      <button>
        <label>$(gettext 'Quit')</label>
      </button>
    </hbox>
  </frame>
 </vbox>
</window>
"

gtkdialog3 --program PROG >/dev/null

STOP
rm $TRACKFILE 2>/dev/null
rm -rf $TMPFOLDER

#emergency kill
kill $(ps | grep CONTROL | awk '{print $1}') 2>/dev/null
kill $(ps | grep PLAYLIST | awk '{print $1}') 2>/dev/null
killall lame aplay ffplay cdda2wav timidity xmp 2>/dev/null
