#!/bin/bash
###
## Scriptli, um über die Konsole Internetradio zu hören
#

#
################################################################################
#
# Einige Variabeln, konfigurierbar mit 'radio.sh -s',
# können aber auch hier von Hand geändert werden...
#

# Das Verzeichnis, in welchem die Konfigurationen zu speichern sind (absolute Pfade!):
DAS_VERZEICHNIS=""

# Der fürs Radio-Streamen zu vewendende Player:
DER_PLAYER=""

# zugehörige Optionen (zB "-msglevel all=-1" fürn mplayer):
DIE_OPTIONEN=""

# 1, wenn das Progrämmle ins Systray verschoben werden soll, sonst 0
SYSTRAYLICH="0"

# Daran besser nichts ändern (Speicherort des vorliegenden Programms)...
DER_BINARIUS=`which radio.sh`

#
################################################################################
#
# Ein kleiner Hilfedialog
#

function help
{
if [ "$HELFERCHEN" = "1" ] ; then
cat < /tmp/sendernamen.tmp

sed -n '1,'$HalbSenderZahl'p' /tmp/sendernamen.tmp > /tmp/sender1.tmp
sed -n ''`expr $HalbSenderZahl + 1`',$p' /tmp/sendernamen.tmp > /tmp/sender2.tmp

paste /tmp/sender1.tmp /tmp/sender2.tmp > $DAS_VERZEICHNIS/senderwahl.dialog
rm /tmp/sendernamen.tmp /tmp/sender1.tmp /tmp/sender2.tmp

cat $DAS_VERZEICHNIS/senderwahl.dialog
}

#
################################################################################
#
# Spezialstart fürs Gnome-Menu
#

function Nohupper
{
HUPPER=nohup
Sendestart
}

#
################################################################################
#
# Auswahl und Start eines bereits eingetragenen Senders als Hintergrundprozess
#

function Sendestart
{
if [ -z "$DAS_VERZEICHNIS" ] ; then
  Konfiguriereins
else
    if [ -f /tmp/radios.tmp ] ; then
	rm /tmp/radios.tmp
	killall $DER_PLAYER

    else
	if [ ! -s $DAS_VERZEICHNIS/sendernamen.liste ] ; then Neusender ; fi

	echo -e "\n      *** Internet-Radio in Konsole streamen ***\n		Für Infos: radio.sh -h\n"

	Sendestartzwo

	echo -e "\nRadio läuft (oder wird's in Kürze tun...)"
	touch /tmp/radios.tmp

	if [ $SYSTRAYLICH = 1 ] ; then
		echo "Programm kann nun über das Icon im SysTray gesteuert werden."
	else
		echo "Programm kann mit erneutem Aufruf von 'radio.sh' beendet werden."
	fi
	sleep 3
    fi
fi
exit 0
}

##

function Sendestartzwo
{
echo -e "Folgende Radio-Sender stehen zur Wahl:\n"

Senderdialog

echo && read -p "Bitte gewünschte Sender-Nummer eingeben (Abbruch mit Ctrl+c): " B

DER_SENDER=`sed -n ''$B'p' $DAS_VERZEICHNIS/senderadressen.liste`

if [ $SYSTRAYLICH = 1 ] ; then
	$HUPPER alltray -na -i $DAS_VERZEICHNIS/radio.png \
		-m "Radio-Sender wechseln:nohup gnome-terminal -e 'radio.sh -w'" \
		-m "Radio-Stream beenden:radio.sh" \
		-m "-------------------------------:clear" \
		-m "Sender hinzufügen:gnome-terminal -e 'radio.sh -n'" \
		-m "Sender konfigurieren:gnome-terminal -e 'radio.sh -c'" \
		-m "Sender löschen:gnome-terminal -e 'radio.sh -r'" \
		-m "-------------------------------:clear" \
		-m "Einstellungen:gnome-terminal -e 'radio.sh -s'" \
		" $TERM -e '$DER_PLAYER $DIE_OPTIONEN $DER_SENDER '" & # -nm = no-minimize on close
else
	$HUPPER $DER_PLAYER $DIE_OPTIONEN $DER_SENDER &
fi

echo -e "\nVerbindung zu '`sed -n ''$B'p' $DAS_VERZEICHNIS/sendernamen.liste`' wird aufgebaut.\nDas kann u.U. etwas Zeit in Anspruch nehmen..."
sleep 2
}

#
################################################################################
#
# Senderwechsel bei laufendem Programm
#

function Wechselsender
{
killall $DER_PLAYER
HUPPER=nohup
Sendestartzwo
exit 0
}

#
################################################################################
#
# Einfügen eines neuen Senders
#

function Neusender
{
echo -e "\n      *** Internet-Radio in Konsole streamen ***\n\n	   -n: Einen neuen Sender speichern\n"

read -p "Name des Senders: " SENDERNAME
read -p "Adresse des Online-Streams: " SENDERADRESSE
read -p "gewünschte Position in der Senderliste (kann leer gelassen werden): " LISTPOS

echo -e "\nDer Sender wird folgendermassen an "`if [ -z "$LISTPOS" ]; then echo "letzter"; else echo "$LISTPOS."; fi`" Stelle gespeichert:\n
  - Name: $SENDERNAME
  - Stream-Adresse: $SENDERADRESSE\n"

read -n 1 -p "weiterfahren (Y/n)? " WEITERF

if [ "$WEITERF" = "n" ] ; then echo "Speichern vom Benutzer abgebrochen" && exit ; fi

clear
echo "Sender wird eingefügt..."

if [ ! -s $DAS_VERZEICHNIS/sendernamen.liste ] ; then
    echo $SENDERNAME > $DAS_VERZEICHNIS/sendernamen.liste
    echo $SENDERADRESSE > $DAS_VERZEICHNIS/senderadressen.liste
else
    if [ -z "$LISTPOS" ] ; then
	sed '$ a '"$SENDERNAME"'' $DAS_VERZEICHNIS/sendernamen.liste > /tmp/sendernamen.liste
	sed '$ a '"$SENDERADRESSE"'' $DAS_VERZEICHNIS/senderadressen.liste > /tmp/senderadressen.liste
    else
	sed ''"$LISTPOS"' i '"$SENDERNAME"'' $DAS_VERZEICHNIS/sendernamen.liste > /tmp/sendernamen.liste
	sed ''"$LISTPOS"' i '"$SENDERADRESSE"'' $DAS_VERZEICHNIS/senderadressen.liste > /tmp/senderadressen.liste
    fi
    mv /tmp/sendernamen.liste $DAS_VERZEICHNIS/sendernamen.liste
    mv /tmp/senderadressen.liste $DAS_VERZEICHNIS/senderadressen.liste
fi

echo -e "\nSo sieht die neue Senderliste aus:\n"

Senderdialog

echo && exit 0
}

#
################################################################################
#
# Verändern eines gespeicherten Senders
#

function Changesender
{
echo -e "\n      *** Internet-Radio in Konsole streamen ***\n\n	      -c: Einen Sender verändern\n\nAktuelle Senderliste:\n"

Senderdialog

echo && read -p "Nummer des zu ändernden Senders: " CHANGESENDER

ALTNAME=`sed -n ''$CHANGESENDER'p' $DAS_VERZEICHNIS/sendernamen.liste`
ALTADRESSE=`sed -n ''$CHANGESENDER'p' $DAS_VERZEICHNIS/senderadressen.liste`

echo -e "\nÄndern von \"$ALTNAME\" unter $ALTADRESSE auf Position $CHANGESENDER:\n"

read -p "Neuer Name (leerlassen, um den alten beizubehalten): " NEUNAME
if [ -z "$NEUNAME" ] ; then NEUNAME=$ALTNAME ; fi
read -p "Neue Stream-Adresse (leerlassen, um die alte beizubehalten): " NEUADRESSE
if [ -z "$NEUADRESSE" ] ; then NEUADRESSE=$ALTADRESSE ; fi
read -p "Neue Position in der Senderliste (oder leerlassen): " NEUPOSITION
if [ -z "$NEUPOSITION" ] ; then NEUPOSITION=$CHANGESENDER ; fi

echo -e "\nDer Sender wird folgendermassen an ${NEUPOSITION}. Stelle gespeichert:\n
  - aus \"$ALTNAME\" wird \"$NEUNAME\"
  - aus:   $ALTADRESSE
    wird:  $NEUADRESSE\n"

read -n 1 -p "weiterfahren (Y/n)?" WEITERF

if [ "$WEITERF" = "n" ] ; then echo "Ändern vom Benutzer abgebrochen" && exit ; fi

if [ "$CHANGESENDER" = "$NEUPOSITION" ]; then
	sed ''$CHANGESENDER'c '"$NEUNAME"'' $DAS_VERZEICHNIS/sendernamen.liste > /tmp/sendernamen.tmp
	sed ''$CHANGESENDER'c '"$NEUADRESSE"'' $DAS_VERZEICHNIS/senderadressen.liste > /tmp/senderadressen.tmp
else
	if [ $CHANGESENDER -lt $NEUPOSITION ] ; then NEUPOSITION=$[NEUPOSITION + 1] ; fi
	sed ''$CHANGESENDER'd ; '"$NEUPOSITION"' i '"$NEUNAME"'' $DAS_VERZEICHNIS/sendernamen.liste > /tmp/sendernamen.tmp
	sed -e ''$CHANGESENDER'd' -e ''"$NEUPOSITION"' i '"$NEUADRESSE"'' $DAS_VERZEICHNIS/senderadressen.liste > /tmp/senderadressen.tmp
fi

mv /tmp/sendernamen.tmp $DAS_VERZEICHNIS/sendernamen.liste
mv /tmp/senderadressen.tmp $DAS_VERZEICHNIS/senderadressen.liste

echo -e "\nDie neue Senderliste:\n"

Senderdialog

echo && exit 0
}

#
################################################################################
#
# Löschen eines gespeicherten Senders
#

function Loeschsender
{
echo -e "\n      *** Internet-Radio in Konsole streamen ***\n\n	       -c: Einen Sender löschen\n\nAktuelle Senderliste:\n"

Senderdialog

echo && read -p "Nummer des zu löschenden Senders: " DELSENDER

DELNAME=`sed -n ''$DELSENDER'p' $DAS_VERZEICHNIS/sendernamen.liste`
DELADRESSE=`sed -n ''$DELSENDER'p' $DAS_VERZEICHNIS/senderadressen.liste`

echo -e "\nLöschen von \"$DELNAME\" unter $DELADRESSE auf Position $DELSENDER?"

read -p "(y/N): " DELLEN
if [ "$DELLEN" = "y" ] || [ "$DELLEN" = "j" ] ; then
	sed ''$DELSENDER'd' $DAS_VERZEICHNIS/sendernamen.liste > /tmp/delsendernamen.tmp
	sed ''$DELSENDER'd' $DAS_VERZEICHNIS/senderadressen.liste > /tmp/delsenderadressen.tmp
else
	echo "Löschvorgang abgebrochen"
	exit
fi

mv /tmp/delsendernamen.tmp $DAS_VERZEICHNIS/sendernamen.liste
mv /tmp/delsenderadressen.tmp $DAS_VERZEICHNIS/senderadressen.liste

echo -e "\nSender gelöscht. Aktuelle Senderliste:\n"

Senderdialog

echo && exit 0
}

#
################################################################################
#
# Programmeinstellungen vornehmen
#

function Konfiguriereins
{
clear
cat < /dev/null ; then
	read -n 1 -p "   $NEUPLAYER ist kein installierter Player. Soll er installiert werden (y/n)? " EINSETZ1
	if [ "$EINSETZ1" = "y" ] || [ "$EINSETZ1" = "j" ] ; then
		sudo apt-get install $NEUPLAYER
	fi
fi
##

read -n 1 -p "   Sollen dem Player weitere Optionen übergeben werden (Y/n)? " RESP2
if [ "$RESP2" = n ] ; then
	NEUOPTIONEN=""
else
	read -p "   Welche? [$DIE_OPTIONEN]: " NEUOPTIONEN
	if [ -z $NEUOPTIONEN ] ; then
		NEUOPTIONEN=$DIE_OPTIONEN
	fi
fi

##

echo && read -n 1 -p "3. Soll ein Icon im Benachrichtigungsfeld angezeigt werden (Y/n)? " BENAFELD

if [ "$BENAFELD" = "n" ] ; then
	SYSTER=0
else
	if ! which alltray > /dev/null ; then
		echo -e -n "   Diese Funktion greift auf das Programm 'alltray' zurück, das mo-\n   mentan nicht installiert ist. Soll es installiert werden (y/N)? "
		read -n 1 EINSETZ2
		if [ "$EINSETZ2" = "y" ] || [ "$EINSETZ2" = "j" ] ; then 
			sudo apt-get install alltray
			SYSTER=1
		else
			SYSTER=0
		fi
	else
		SYSTER=1
	fi
fi

##

sed -e '/^DAS_VERZEICHNIS=/ c DAS_VERZEICHNIS="'$NEUVERZEICHNIS'"' -e '/^DER_PLAYER=/ c DER_PLAYER="'$NEUPLAYER'"' -e '/^DIE_OPTIONEN=/ c DIE_OPTIONEN="'"$NEUOPTIONEN"'"' -e '/^SYSTRAYLICH=/ c SYSTRAYLICH="'$SYSTER'"' $DER_BINARIUS > /tmp/radiollo.tmp

echo -e "\nVoilà les Unterschiede:\n"

diff $DER_BINARIUS /tmp/radiollo.tmp

echo && read -n 1 -p "Soll das übernommen werden (y/N)? " DIE_UEBERNAHME

if [ "$DIE_UEBERNAHME" = "y" ] || [ "$DIE_UEBERNAHME" = "j" ] ; then
	cp $DER_BINARIUS ${DER_BINARIUS}.bak
	mv /tmp/radiollo.tmp $DER_BINARIUS
	chmod +x $DER_BINARIUS

	touch $NEUVERZEICHNIS/sendernamen.liste
	touch $NEUVERZEICHNIS/senderadressen.liste
	touch $NEUVERZEICHNIS/senderwahl.dialog
	
	echo -e "\nÄnderungen übernommen!"
else
	rm /tmp/radiollo.tmp
	echo -e "\nAbbruch..."
fi

if [ ! -s $NEUVERZEICHNIS/sendernamen.liste ] ; then
	echo -e "\nJetzt müssen noch ein paar Sender eingetragen werden..."
	Neusender
fi
echo
}

#
################################################################################
#
# Letzte Einstellungen wiederherstellen
#

function Resetter
{
	echo "geht noch grad nicht"
	exit 0
}

#
################################################################################
#
# Festlegung und Auswahl der Optionen
#

test ! -z "$1" || Sendestart

while [ ! -z "$1" ]; do
	case $1 in
	-h)	clear && HELFERCHEN=1 && help
		;;
	-w)	Wechselsender
		;;
	-na)	if [ $SYSTRAYLICH = 0 ] ; then SYSTRAYLICH=1 ; else SYSTRAYLICH=0 ; fi
		Sendestart
		;;
	-n)	Neusender
		;;
	-c)	Changesender
		;;
	-r)	Loeschsender
		;;
	-s)	Konfiguriereins
		;;
	-z)	Resetter
		;;
	-nh)	Nohupper
		;;
	*)	clear && echo "radio.sh: unbekannte Option '$1'" && help
	esac
done
exit 0