#!/bin/bash

#############################################################################
# easyportal.sh v0.1.7
# by nogood (www.easy-vdr.de)
#
# kann mit folgenden Parameter aufgerufen werden:
# ---------------------------------------------------------------------------
# easyportal.sh easyinfo
#   ruft das Script easyInfo auf und gibt das Ergebnis auf StdOut aus
# ---------------------------------------------------------------------------
# easyportal.sh del /pfad/zu/datei
#   löscht die angegebene Datei und erstellst sie neu
# ---------------------------------------------------------------------------
# easyportal.sh chk pluginname
#   prüft ob ein Pluginfile existiert, gibt true oder false zurück
# ---------------------------------------------------------------------------
# easyportal.sh on pluginname
#   Aktiviert das Plugin in der vdr-setup.xml und sysconfig
# ---------------------------------------------------------------------------
# easyportal.sh off pluginname
#   Deaktiviert das Plugin in der vdr-setup.xml und sysconfig
# ---------------------------------------------------------------------------
# easyportal.sh lst
#   gibt eine Liste aller verfügbaren Plugins zurück
# ---------------------------------------------------------------------------
# easyportal.sh ver
#   gibt die Aktuell installierte easyVDR-Version zurück
# ---------------------------------------------------------------------------
# easyportal.sh upd
#   Prüft auf Updates und gibt sie aus
# ---------------------------------------------------------------------------
# easyportal.sh startvdr
#		Startet den VDR
# ---------------------------------------------------------------------------
# easyportal.sh stopvdr
#		Stoppt den VDR
# ---------------------------------------------------------------------------
# easyportal.sh portalupdates
# 	Prüft ob eine neuer Version des Portals bereit steht
# ---------------------------------------------------------------------------
#	easyportal.sh help
#		zeigt eine kurze Beschreibung an
# ---------------------------------------------------------------------------
#	easyportal.sh hddtemp <device>
#		zeigt die Temperatur der HDD an
# ---------------------------------------------------------------------------
#	easyportal.sh hddname <device>
#		ermittelt mit hwinfo das Plattenmodell
# ---------------------------------------------------------------------------
#	easyportal.sh uptime
#		zeigt die Uptime des Systems an
# ---------------------------------------------------------------------------
#	easyportal.sh date
#		zeigt das Datum und die Systemzeit an
# ---------------------------------------------------------------------------
#	easyportal.sh timer
#		zeigt die Timer an
# ---------------------------------------------------------------------------
#	easyportal.sh update <tarfile> <docroot> 
#		easyportal Update einspielen
# --------------------------------------------------------------------------
#	easyportal.sh vdruptime
#		uptime des VDR ermitteln
#############################################################################
# Includes
#

. /usr/bin/easyvdr/functions/easyvdr_var_names
. /usr/bin/easyvdr/functions/easyvdr_functions
. /etc/vdr/static.conf

#############################################################################
# Variablen
#

# Version
EasyPortalShVersion="0.1.10"

# Pfad zu easyInfo
EasyInfoShScript="/var/www/scripts/easyinfo.sh"

# Ausgabedatei die easyInfo erstellt
EasyInfoTxtFile="/tmp/easyinfo.txt"

# URL zu den Updates
URL="http://ftp.gwdg.de/pub/linux/easyvdr/$EASYVDRBASEVERS/online-updates"

# Temporäres Arbeitsverzeichnis
TEMPDIR="/tmp/easyvdrupdateversion"

#URL für Portalupdares
PortalUpdatesURL="http://87.230.85.228/~easyportal/"
PortalUpdatesVer="easyportal.ver"

#############################################################################
# Funktionen
#

# VDR API-Ermitteln #########################################################
function getApi {
	API=$(/usr/vdr/vdr -V | cut -d" " -f2 | tr -d "()" | cut -d "/" -f2)
}

# Aktuell Installierte Version ermitteln ####################################
function getVersion {
	EASYVDRSUBVERS="${EASYVDRSUBVERS##*.}"
	if [ $EASYVDRSUBVERS == "0" ] ; then
		echo $EASYVDRBASEVERS.$EASYVDRSUBVERS
	else
		echo $EASYVDRBASEVERS."${EASYVDRSUBVERS##*0}"
	fi
}

# Plugins auflisten #########################################################
function getPlugins {
	getApi
	cat $FolderAndFilenameForVDRSetupXML | grep "<plugin name" | grep -v 'protected="yes"' | sort | while read a; do
		a=${a#<plugin}
		a=${a%/>}
		PL=$(echo $a | awk -F\" {'print $2'})
		if [ -f $FolderAndFilenameForVDRPluginDir"/libvdr-"$PL".so."$API ] ; then
			echo $a
		fi
	done
}

# Plugin Deaktivieren #######################################################
function PluginOff {
	/usr/bin/stopvdr >/dev/null && sleep 5
	DeactivatePlugin "$1"
	cp /etc/vdr/sysconfig /etc/vdr/sysconfig.$(date '+%d%m%Y%H%M')
	echo $?
	echo $(date '+%d.%m.%Y %H:%M')\;$1\;"deaktiviert" >> $2
	/usr/bin/startvdr >/dev/null && sleep 5
}

# Plugin Aktivieren #########################################################
function PluginOn() {
    /usr/bin/stopvdr >/dev/null && sleep 5
    cp /etc/vdr/sysconfig /etc/vdr/sysconfig.$(date '+%d%m%Y%H%M')
    ActivatePlugin "$1"
	echo $?
	echo $(date '+%d.%m.%Y %H:%M')\;$1\;"aktiviert" >> $2
	/usr/bin/startvdr >/dev/null && sleep 5
}

# Prüfen ob Plugin vorhanden ist ############################################
function PluginExist() {
	getApi
	echo $FolderAndFilenameForVDRPluginDir"/libvdr-"$1".so."$API
	if [ -f $FolderAndFilenameForVDRPluginDir"/libvdr-"$1".so."$API ] ; then
		echo true
	else
		echo false
	fi
}

# Datei löschen #############################################################
function DeleteFile() {
	if [ -f "$1" ] ; then
		rm $1
		touch $1
	fi
}

# easyInfo ausführen ########################################################
function easyInfo {
	$EasyInfoShScript $EasyInfoTxtFile
	cat $EasyInfoTxtFile
}

# Auf Updates Prüfen ########################################################
function checkUpdates {

	# Temporäres Arbeitsverzeichnis erstellen wenn nicht vorhanden	
	if [ -e ${TEMPDIR} ] ; then
		:
	else
		mkdir $TEMPDIR
	fi

	cd $TEMPDIR

	# Update MD5-File saugen
	wget -np -r -nd -N -A md5 $URL >/dev/null 2>&1

	VVERS=0

	for i in $(ls -1) ; do
		if [ -f ${i} ] ; then
			for z in $(cat $i | awk '{print $2}' | sort) ; do
				V="${z##*-}"
				V="${V%%.*}"
				if [ $V == "basic" ] ; then
					:
				else
					if [ $V -gt $VVERS ] ; then
						VVERS=$V
						fi
				fi
			done
		fi
	done

	echo $EASYVDRBASEVERS.$VVERS
	cd /
	rm -R $TEMPDIR
}

# VDR Starten ###############################################################
function startVdr {
	/usr/bin/startvdr >/dev/null && sleep 5
}

# VDR Stoppen ###############################################################
function stopVdr {
	/usr/bin/stopvdr >/dev/null && sleep 5
}

# portalupdates #############################################################
function PortalUpdates {
	wget -P /tmp/ $PortalUpdatesURL$PortalUpdatesVer >/dev/null 2>&1
	if [ $? == 0 ] ; then
		cat /tmp/$PortalUpdatesVer
		rm /tmp/$PortalUpdatesVer
	else
		echo 1
		exit 1
	fi
}

# hddtemp ###################################################################
function HddTemp {
	TEMP=$(hddtemp $1 -q | awk -F: {'print $3'})
	if [ "$TEMP" == " S.M.A.R.T. not available" ] ; then
		echo "1"
	else
		echo $TEMP
	fi
}

# hddname ###################################################################
function hddname {
	hwinfo --disk --short | grep $1 | awk -F$1 {'print $2'}
}

# Uptime ####################################################################
function SysUptime {
	ruptime="$(uptime)"
 	if $(echo $ruptime | grep -E "days|day" >/dev/null); then
		TAG=$(echo $ruptime | awk {'print $3'})
		STD=$(echo $ruptime | awk {'print $5'} | awk -F: {'print $1'})
		MIN=$(echo $ruptime | awk {'print $5'} | awk -F: {'print $2'} | sed s/,//g) 
		x="$TAG,$STD,$MIN";
	else
		if $(echo $ruptime | grep -E "min" >/dev/null) ; then
			x=$(echo $ruptime | sed s/,//g | awk {'print $3'} | awk {'print "0,0,"$1'})
		else
			x=$(echo $ruptime | sed s/,//g | awk {'print $3'} | awk -F: '{print "0,"$1","$2}')
		fi		
	fi
	echo $x
}

# date ######################################################################
function eDate {
	date
}

# Timer #####################################################################
function timer {
	cat /etc/vdr/timers.conf | awk -F: {'print $3";;"$4";;"$5";;"$8'} | sort
}

# Portalupdate ##############################################################
function update {
	rm /tmp/easyportal.tar*

	if [ $1 ] ; then

		wget -P /tmp/ $2

		if [ $? == 0 ] ; then
			tar -C $1 -xf /tmp/easyportal.tar
			if [ $? == 0 ] ; then
				chown -R www-data $1
				chmod +x $1/scripts/*
				echo "Das Update wurde erfolgreich ausgefuehrt!"
				exit 0
			else
				echo "/tmp/easyportal.tar konnte nicht entpackt werden!"
				exit 1
			fi 
		else
			echo "$1 konnte nicht heruntergeladen werden!"
			exit 1
		fi
	else
		echo "Es wurde kein Zielverzeichnis angegeben!"
		exit 1
	fi
}

# VDR-Uptime ################################################################
function vdruptime {
	if [ -f "/var/run/Runvdr.pid" ] ; then
		ls -l /var/run/Runvdr.pid | awk {'print $6" "$7'}
	fi
}

function vdrdate {
	date +'%Y-%m-%d %H:%M'
}

# help ######################################################################
function hilfe {
	echo ""
	echo "easyportal.sh $EasyPortalShVersion"
	echo ""
	echo "Options:"
	echo ""
	echo "    easyinfo                ruft das Script easyInfo auf und gibt das Ergebnis auf StdOut aus"
	echo "    del <datei>             löscht die angegebene Datei und erstellst sie neu"
	echo "    chk <pluginname>        prüft ob ein Pluginfile existiert, gibt true oder false zurück"
	echo "    on <pluginname>         Aktiviert das Plugin in der vdr-setup.xml und sysconfig"
	echo "    off <pluginname>        Deaktiviert das Plugin in der vdr-setup.xml und sysconfig"
	echo "    lst                     gibt eine Liste aller verfügbaren Plugins zurück"
	echo "    ver                     gibt die Aktuell installierte easyVDR-Version zurück"
	echo "    upd                     Prüft auf Updates und gibt sie aus"
	echo "    startvdr                Startet den VDR"
	echo "    stopvdr,                Stoppt den VDR"
	echo "    portalupdates           Prüft ob eine neuer Version des Portals bereit steht"
	echo "    hddtemp <device>        Zeigt die Temperatur der angegebenen Festplatte an"
	echo "    hddname <device>        Zeigt das Festplattenmodell an"
	echo "    uptime                  Zeigt die Uptime des System an"
	echo "    update <tar> <docroot>  Update einspielen"
	echo "    vdruptime               Zeigt das Datum des VDR-Starts an"
	echo "    help,                   zeigt diese Beschreibung an"
	echo ""
}

#############################################################################
# Sciptablauf
#

case $1 in

	easyinfo) # Aufruf von easyInfo
		easyInfo
	;;

	del) # Log Datei löschen
		DeleteFile $2
	;;

	chk) # Prüfen ob ein Plugin vorhanden ist 
		PluginExist $2
	;;

	on) # Plugin Aktivieren
		PluginOn $2 $3
	;;

	off) # Plugin Deaktivieren
		PluginOff $2 $3
	;;

	lst) # Plugins Auflisten
		getPlugins
	;;

	ver) # Installierte easyVDR-Version
		getVersion
	;;

	upd) # Prüft auf Updates
		checkUpdates
	;;

	startvdr) # VDR Starten
		startVdr
	;;

	stopvdr) # VDR Stoppen
		stopVdr
	;;

	portalupdates) # auf Verfügbare Version des Portals prüfen
		PortalUpdates
	;;
	
	hddtemp) # Festplattentemp.
		HddTemp $2
	;;
	
	hddname) # Festplattenmodell
		hddname $2
	;;
	
	uptime) # Uptime
		SysUptime
	;;
	
	date) # Datum
		eDate
	;;
	
	timer) # Timer
		timer
	;;
	
	update)
		update $2 $3
	;;
	
	vdruptime)
		vdruptime
	;;
	
	vdrdate)
		vdrdate
	;;

	help) # Hilfe anzeigen
		hilfe
	;;

	*) # Ungültige eingabe
		hilfe
		exit 1
	;;
	
esac