#!/bin/bash
# Autor: Kristian Lorbetzki fuer EasyVDR
# Backupscript um Eigene Einstellungen wegzusichern und wieder aufzuspielen.
# Fuer durch dieses Script entstandene Schaeden wird keine Haftung uebernommen.
# Version: 0.1.1beta  Changelog am Ende der Datei
# letzte Aenderung: 13.01.07 


# -- Parameter --

# Bitte die Ordner fŸr die Standardeinstellung (Default) und fŸr die Sicherung (Backup) angeben
# Wichtig, die Ordner mit einem / abschlie§en
FolderForDefaultFiles="/media/backup/config/0.4.2/"
FolderForBackupFiles="/tmp/config/"

# Bei Zeile 1 bitte die Gesamtanzahl der zu sichernden Dateien angeben.
# Backupfile ist der Dateiname des zu sichernde Objekt
# FolderForSetting gibt den Ordner an, worin sich die Datei im System befindet.
# Wichtig, die Ordner mit einem / abschlie§en

SumBackupFiles="2"
BackupFile[1]="setup.conf"
FolderForSetting[1]="/etc/vdr/"
BackupFile[2]="vdradmind.conf"
FolderForSetting[2]="/etc/vdradmin/"

# wo ist die vdr-setup.xml
FolderAndFilenameForVDRSetupXML="/etc/vdr/plugins/setup/vdr-setup.xml"

# Wer im Logfile das Datum oder die Uhrzeit aendern will, kann das hier tun.
TIMESTAP=`date +"%d.%m.%y %H:%M"`
LOG="./conf.log"

# wo ist Svdrpsend.pl
SVDRPSEND="/usr/bin/svdrpsend.pl"

# -- Parameter ende, ab hier Finger weg, sonst Finger ab ---


# -- Funktionen --

# Diese Funktion ist fuer das Logfile verantwortlich

Logging()
{
if [ -f $LOG ] ; then
	rm $LOG
	touch $LOG
else
	touch $LOG
fi	
}

# Diese Funktion generiert das Backup fuer die Usereinstellung
BackupSettings()
{
i=1
while [ $i -le $SumBackupFiles ]
do
DEFAULT="$FolderForDefaultFiles${BackupFile[$i]}"
BACKUP="$FolderForBackupFiles${BackupFile[$i]}"
SETTING="${FolderForSetting[$i]}${BackupFile[$i]}"
	if [ -f $SETTING ] ; then
		echo "---" >>$LOG
		echo "$TIMESTAP: Schreibe in $FolderForBackupFiles die Datei ${BackupFile[$i]}" >>$LOG
		diff $DEFAULT $SETTING  | awk -F = '/^> / {print $1"=" $2}' | sed 's/^> //' > $BACKUP
		sed -i '/^#/d' $BACKUP
		echo "$TIMESTAP: erledigt" >>$LOG
	fi
i=$(($i + 1))
done

}

#Funktion um die temporaeren Dateien der sysconfig einzulesen. Wird benoetigt um die vdr-setup.xml anzupassen.
function ReadSysconfig()
{
count=0
while read line; do
      eval "var[$count]"=\'$line\'
      count=$(($count+1))
done < $1
   eval "maxvar"=$count
}

# Funktion um die geaenderten Einstellungen zurueckzuspielen.
RestoreSettings()
{
i=1

while [ $i -le $SumBackupFiles ]
do
DEFAULT="$FolderForDefaultFiles${BackupFile[$i]}"
BACKUP="$FolderForBackupFiles${BackupFile[$i]}"
SETTING="${FolderForSetting[$i]}${BackupFile[$i]}"

	if [ -f $BACKUP ] ; then

		echo "---" >>$LOG
		echo "$TIMESTAP: Stelle die Usereinstellungen $BACKUP wieder her" >>$LOG
		sed -i '/^#/d' $BACKUP
		awk -F "=" -v default=$DEFAULT '{ 
					if (FILENAME=="default") 
						{ 
							DEFAULT[$1] = $0
							USER[$1] = $2
							
						}
					else	
						{ 
							DEFAULT[$1] = $USER[$1]
						}
				} 
						END	{ for (ERG in DEFAULT) { print DEFAULT[ERG] }}' $DEFAULT $BACKUP > $SETTING

		echo "$TIMESTAP: erledigt" >>$LOG
	
	fi

#wenn das Backupfile die sysconfig ist, muss die vdr-setup.xml angepasst werden.

	if [ ${BackupFile[$i]} = "sysconfig" ] ; then
		PLUGINLIST="./PLUGINLIST.TMP"
		CONFIGLIST="./CONFIGLIST.TMP"	
		
		echo "---" >>$LOG
		echo "$TIMESTAP: Die VDR-Setup.xml wird angepasst" >>$LOG
		
		echo "$TIMESTAP: Alle Plugins werden deaktiviert" >>$LOG
		sed -i 's#active=\"yes\"#active=\"no\"#'  $FolderAndFilenameForVDRSetupXML 
		echo "$TIMESTAP: die Plugins aus der gesicherten Sysconfig werden gelesen und in die $FolderForVDRSetupXML uebertragen" >>$LOG
		grep PLUGINLIST $BACKUP | sed -e 's/\\"-P/\n/g' -e 's/\\"//g' -e 's/\"//g' | awk -F " " '{print $1}' | sed '1d' >$PLUGINLIST
	
		ReadSysconfig $PLUGINLIST
			for ((i=0; i<$maxvar; i++)); do
				var=$(echo ${var[$i]})
				sed -i '/plugin name="'$var'"/s/active="no"/active="yes"/'  $FolderAndFilenameForVDRSetupXML
			done
		echo "$TIMESTAP: erledigt" >>$LOG
		
		echo "---" >>$LOG
		echo "$TIMESTAP: Die VDR-Setup.xml wird angepasst" >>$LOG
		
		echo "$TIMESTAP: Die Sysconfigwerte werden angepasst" >>$LOG
		grep -v PLUGINLIST $BACKUP >$CONFIGLIST
	
	# hier werden die / enstprechend verqoutet
		sed -i 's#\/#\\\\/#g' $CONFIGLIST
		#sed -i '/^#/d' $CONFIGLIST
		ReadSysconfig $CONFIGLIST
			for ((i=0; i<$maxvar; i++)); do
				var1=$(echo ${var[$i]} | awk -F "=" '{print $1}')
				var2=$(echo ${var[$i]} | awk -F "=" '{print $2}')
				sed -i '/sysconfig="'$var1'"/s/value=".*"/value='"$var2"'/' $FolderAndFilenameForVDRSetupXML
			done
		echo "$TIMESTAP: erledigt" >>$LOG
		rm $PLUGINLIST
		rm $CONFIGLIST
		
	fi

i=$(($i + 1))
done

} 

# Die Werkseinstellung
RestoreDefault()
{
i=1
while [ $i -le $SumBackupFiles ]
do
DEFAULT="$FolderForDefaultFiles${BackupFile[$i]}"
SETTING="${FolderForSetting[$i]}${BackupFile[$i]}"
echo "---" >>$LOG
echo "$TIMESTAP: Stelle die Datei $DEFAULT wieder her" >>$LOG
cp $DEFAULT $SETTING
echo "$TIMESTAP: erledigt" >>$LOG
i=$(($i + 1))
done

}


# action! 

case $1 in
	b|B)
	$SVDRPSEND mesg "Die eigenen Einstellungen werden in $FolderForBackupFiles gesichert"
	Logging
	BackupSettings
	$SVDRPSEND mesg "Sicherung erfolgreich durchgefuehrt"

;;

	r|R)
	
	#$SVDRPSEND mesg "Die Eigene Einstellung wird wieder hergestellt in 10 sek. wird der VDR beendet."
	#sleep 10
	#stopvdr
	Logging
	RestoreSettings	
	#startvdr
	#sleep 15
	#$SVDRPSEND mesg "Die eigene Einstellungen wurden wieder hergestellt."

;;

	d|D)
	
	$SVDRPSEND mesg "Die Werkseinstellung wird wieder hergestellt in 10sek. wird der VDR beendet."
	sleep 10
	# stopvdr
	Logging
	RestoreDefault
	# startvdr && sleep 15 && $SVDRPSEND mesg "Die Werkseinstellung wurde wieder hergestellt."

	
;;

	*)
	echo "===================================="
	echo "  Usage: $0 [OPTION]"
	echo "  b or B	= Backup User settings"
	echo "  r or R	= Restore User settings"
	echo "  d or D	= Set default settings"	
	echo "===================================="

;;

esac


# Changelog
# 13.01.07: 0.1.1beta
# - Umlaute in den texten entfernt
# - vdradmin.conf hinzugefŸgt
# - changelog hinzugefŸgt
# 01.01.07: Release 0.1beta
