#!/bin/sh
#
# (tzap) channels.conf import-script for mythtv v.0.16 (dvb-t).
# converts it into sql-statements; usage for example:
#   # ./import-channels.conf.sh | mysql mythconverg -p
# the file 'channels.conf' has to be in the same dir.
# could be deprecated in later releases.
#
# (c) sk 10/2004
#
# if a channel has an extra apid for dolby digital (separated with ';'), it'll be ignored.
# don't know how it's written to the db (there's no option for it in the channel editor).
# if some parameters shouldn't be imported (mainly thought for the parameters), just comment variable-setting line.

# 2004-10-03 23:38:13 DVB#0 WARNING - invalid hierarchy parameter '0', falling back to 'auto'.
# 2004-10-03 23:38:13 DVB#0 WARNING - invalid guard interval parameter '32', falling back to 'auto'.
# 2004-10-03 23:38:13 DVB#0 WARNING - Unsupported hierarchy parameter.
# hierarchy and guard interval will be set to auto/none. mythtv seems to have still some probs with dvb-t.

# for which source is this channel-configuration?
SOURCE_ID=1;

##################################################  ##############
if [ $# -ne 1 ]; then
	echo "Syntax: $0 <channels.conf>" > /dev/stderr
	exit 1
fi

INHALT=`cat "$1"|tr " " "_"|tr ";" "~"`
PARAMETER_REGEX='I\([0-9]\{1\}\)C\([0-9]\+\)D\([0-9]\+\)M\([0-9]\+\)B\([0-9]\{1\}\)T\([0-9]\{1\}\)G\([0-9]\+\)Y\([0-9]\{1\}\).*'
PCR_REGEX='\([0-9]\+\)+\([0-9]\+\)'

declare -i chanid
declare -i channum
chanid=1000;
channum=1;

echo "DELETE FROM channel;"
echo "DELETE FROM dvb_channel;"
echo "DELETE FROM dvb_pids;"

for ZEILE in $INHALT; do
	TEMP="echo '$ZEILE'|cut -d : -f ";

	NAME=`echo "$TEMP 1"|tr "_" " "|sh`;
	FREQUENZ=`echo "$TEMP 2"|sh`000;
	PARAMETER=`echo "$TEMP 3"|sh`;
	QUELLE=`echo "$TEMP 4"|sh`;
	SYMBOLRATE=`echo "$TEMP 5"|sh`;
	VPID=`echo "$TEMP 6"|sh`;
	APID=`echo "$TEMP 7"|sh`; APID=`echo $APID|sed 's/\([0-9]\+\)\(~[0-9]\+\)/\1/'`;
	TPID=`echo "$TEMP 8"|sh`;
		PCRID=`echo $VPID|sed 's/\([0-9]\+\)+\([0-9]\+\)/\2/'`;
	CA=`echo "$TEMP 9"|sh`;
	SID=`echo "$TEMP 10"|sh`;
	NID=`echo "$TEMP 11"|sh`;
	TID=`echo "$TEMP 12"|sh`;
	RID=`echo "$TEMP 13"|sh`;

	# in some channels.conf there are values like '123+123' under vpid (same pid for video and pcr),
	# but the table-structure of mythtv doesn't allow those 'duplicate' entrys.
	# don't know what will be in future, so this stays commented.
	#echo $VPID|grep + > /dev/null 2>&1; if [ $? -eq 0 ]; then
	#	PCRID=`echo $VPID|sed 's/\([0-9]\+\)+\([0-9]\+\)/\2/'`;
	#	VPID=`echo $VPID|sed 's/\([0-9]\+\)+\([0-9]\+\)/\1/'`;
	#	PCRID_OK=1;
	#else
	#	PCRID_OK=0;
	#fi;
	echo $VPID|grep + > /dev/null 2>&1; if [ $? -eq 0 ]; then
		PCRID=`echo $VPID|sed "s/$PCR_REGEX/\2/"`;
		VPID=`echo $VPID|sed "s/$PCR_REGEX/\1/"`;
	fi;

	VPIDS=`echo $VPID|tr "," " "`;
	APIDS=`echo $APID|tr "," " "`;

	PARAMETER_INVERSION=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\1/"`;
	PARAMETER_DATENRATE_H=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\2/"`;
	PARAMETER_DATENRATE_L=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\3/"`;
	PARAMETER_MODULATION=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\4/"`;
	PARAMETER_BANDBREITE=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\5/"`;
	PARAMETER_TRANSMISSIONMODE=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\6/"`
	PARAMETER_GUARDINTERVALL=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\7/"`;
	PARAMETER_HIERARCHIE=`echo $PARAMETER|sed "s/$PARAMETER_REGEX/\8/"`;

	echo "INSERT INTO channel VALUES($chanid, '$channum', NULL, $SOURCE_ID, '$NAME', '$NAME', 'none', NULL, '', '', 0, 32768, 32768, 32768, 32768, 'Default', 0, 1, '');"
	echo -n "INSERT INTO dvb_channel VALUES($chanid";
	if [ $SID -ne 0 ]; then echo -n ", $SID"; else echo -n ", NULL"; fi;
	if [ $NID -ne 0 ]; then echo -n ", $NID"; else echo -n ", NULL"; fi;
	echo -n ", NULL";       # provider-id gibts nicht in der channels.conf
	if [ $TID -ne 0 ]; then echo -n ", $TID"; else echo -n ", NULL"; fi;
	if [ $FREQUENZ -ne 0 ]; then echo -n ", $FREQUENZ"; else echo -n ", NULL"; fi;
	if [ -n $PARAMETER_INVERSION ]; then echo -n ", '$PARAMETER_INVERSION'"; else echo -n ", NULL"; fi;
	if [ -n $SYMBOLRATE ]; then echo -n ", $SYMBOLRATE"; else echo -n ", NULL"; fi;
	echo -n ", 'auto', 'h', 0, 'auto'";
	if [ -n $PARAMETER_BANDBREITE ]; then echo -n ", '$PARAMETER_BANDBREITE'"; else echo -n ", NULL"; fi;
	echo -n ", 'auto', 'a'";
	#if [ -n $PARAMETER_GUARDINTERVALL ]; then echo -n ", '$PARAMETER_GUARDINTERVALL'"; else echo -n ", NULL"; fi;  # look to the text on the top.
	echo -n ", 'auto'";
	#if [ -n $PARAMETER_HIERARCHIE ]; then echo -n ", '$PARAMETER_HIERARCHIE'"; else echo -n ", 'n'"; fi;
	echo -n ", 'n'";
	echo ", NULL);";

	echo -n "INSERT INTO dvb_pids VALUES";
	for i in $VPIDS; do SQLVPIDS="$SQLVPIDS($chanid, $i, 'v', ''),"; done; echo -n $SQLVPIDS; unset SQLVPIDS;
	for i in $APIDS; do SQLAPIDS="$SQLAPIDS($chanid, $i, 'a', ''),"; done; echo -n $SQLAPIDS|sed 's/\(.*\),$/\1/'; unset SQLAPIDS;
	if [ $TPID -ne 0 ]; then echo -n ",($chanid, $TPID, 't', '')"; fi
	#if [ $PCRID_OK -eq 1 ]; then echo -n ",($chanid, $PCRID, 'p', '')"; fi;        # look above.
	if [ $PCRID -ne $VPID ]; then echo -n ",($chanid, $PCRID, 'p', '')"; fi;
	echo ";";

	chanid=$chanid+1;
	channum=$channum+1;
done


