#!/bin/bash
#Pmusic
#Copyright 2008, 2009
#Sigmund Berglund

WORKDIR=$HOME/.pmusic/tmp
#show tool-info instead of song ----- TOO SLOW WITH SLEEP 1 -------
#TMP=`cat $WORKDIR/pmusic-PERCENT_BAR`
#case "`cat $WORKDIR/pmusic-progressbar_status`" in
#	undo) echo $TMP; echo 'Go BACK in playlist history'; exit ;;
#	redo) echo $TMP; echo 'Go FORWARD in playlist history'; exit ;;
#esac
#make sure to give some output
if [ "`cat $WORKDIR/pmusic-ffmpeg_output`" = "pmusic_stop" ] || [ ! -s $WORKDIR/pmusic-ffmpeg_output ]; then
	echo " |0:00|" > $WORKDIR/pmusic-OLD_TIME
	echo 0
	echo "»»» Pmusic «««"
else
	#if new song (time (with decimals) differ from last played), then read song info
	if [ "`grep Duration $WORKDIR/pmusic-ffmpeg_output | awk '{print $2}' | cut -d ":" -f 2-`" != "`cut -f 1 -d '|' $WORKDIR/pmusic-ffmpeg_length`" ]; then
		#read song name
		FILE=`grep "from '" $WORKDIR/pmusic-ffmpeg_output | cut -d "'" -f 2- | sed -e "s/'://g"`
		FILE2="`grep -w "$FILE" $HOME/.pmusic/index_all | cut -d '|' -f 2`"
		if [ "$FILE2" ]; then FILE="$FILE2"; fi #show metainfo of file if exist. (in indexlist)
		NOW_PLAYING=`basename "$FILE" 2> /dev/null | sed -e 's/\.[^\.]*$//'`
		#calculate length in seconds
		LENGTH1=`grep Duration $WORKDIR/pmusic-ffmpeg_output | awk '{print $2}' | cut -d ":" -f 2-`
		LENGTH_SEC=`echo $LENGTH1 | cut -d ':' -f 2 | cut -d "." -f 1 `
		LENGTH_MIN=`echo $LENGTH1 | cut -d ':' -f 1`
		TMP=$[$LENGTH_MIN*60]
		LENGTH=$[$TMP+$LENGTH_SEC]
		echo "$LENGTH1|$LENGTH" > $WORKDIR/pmusic-ffmpeg_length
		echo "$NOW_PLAYING" > $WORKDIR/pmusic-ffmpeg_NOW_PLAYING
	else
		LENGTH=`cut -f 2 -d '|' $WORKDIR/pmusic-ffmpeg_length`
		NOW_PLAYING="`cat $WORKDIR/pmusic-ffmpeg_NOW_PLAYING`"
	fi
	#---
	FFMPEG_OUTPUT=`tail -c 120 $WORKDIR/pmusic-ffmpeg_output`
	SEC_PLAYED=`echo "$FFMPEG_OUTPUT" | cut -d '=' -f 3 | cut -d ' ' -f 1 | cut -d . -f 1`
	if [ "$NOW_PLAYING" ] && [ "$LENGTH" ] && [ "$[$SEC_PLAYED+1]" ] && [ ! "`echo "$SEC_PLAYED" | grep '10000000000'`" ] && [ ! "`echo "$FFMPEG_OUTPUT" | grep 'invalid'`" ]; then # +1 checks if it's a number
		#find percent for progress bar
		SEC_SKIPPED=`cat $WORKDIR/pmusic-SS`
		SEC_PLAYED=$[$SEC_PLAYED+$SEC_SKIPPED]
		PERCENT=$[$SEC_PLAYED*100/$LENGTH]
		PERCENT_BAR=$[$PERCENT+1]
		#calculate time of seconds played
		TIME_MIN=`expr $SEC_PLAYED / 60` #expr ends up with a truncate integer
		TIME_SEC=$[$SEC_PLAYED-($TIME_MIN*60)]
		if [ $TIME_SEC -lt 10 ]; then TIME_SEC="0$TIME_SEC"; fi #ensure 2 digits for seconds
		#---
		echo $PERCENT_BAR
		if [ `echo $NOW_PLAYING | cut -b 1` -le 9 2> /dev/null ]; then #first char is a number. This bugs progress bar.
			echo "|  $NOW_PLAYING  |$TIME_MIN:$TIME_SEC|"
		else
			echo "$NOW_PLAYING  |$TIME_MIN:$TIME_SEC|"
		fi
		#keep values incase of invalid output next loop
		echo "  |$TIME_MIN:$TIME_SEC|" > $WORKDIR/pmusic-OLD_TIME
		echo $PERCENT_BAR > $WORKDIR/pmusic-PERCENT_BAR
	else #no time is detected
		cat $WORKDIR/pmusic-PERCENT_BAR
		if [ "$NOW_PLAYING" ]; then
			TMP="`cat $WORKDIR/pmusic-OLD_TIME`"
			echo "$NOW_PLAYING$TMP"
		else
			echo "»»» Pmusic «««"
		fi
	fi
fi
exit 0

