#!/bin/sh
CNAME="Lirc-Installer"

# su wrapper
if [ "$(id -u)" != "0" ]; then
    su -c "$0"
    exit $?
fi

# livecd or installed
FLL_DISTRO_MODE=live
[ -f /etc/default/distro ] && . /etc/default/distro

[ -d "$(dirname "$0")" ] && cd "$(dirname "$0")"

# save freeze state
unset FROZEN
[ -f /etc/frozen-rc.d ] && FROZEN=yes

# stop vdr
if pidof vdr >/dev/null; then
    /etc/init.d/vdr stop
    killall -9 vdr 2>/dev/null
fi

# stop vdr-kbd
if pidof vdr-kbd >/dev/null; then
    /etc/init.d/vdr stop
    killall -9 vdr-kbd 2>/dev/null
fi

# stop vdradmin(-am)
if [ -e /var/run/vdradmin.pid ] && ps --pid $(</var/run/vdradmin.pid) >/dev/null 2>&1; then
    [ -x /etc/init.d/vdradmin ] && /etc/init.d/vdradmin stop
    [ -x /etc/init.d/vdradmin-am ] && /etc/init.d/vdradmin-am stop
fi

# configure lirc (optional)
if [ -d lirc ]; then
    rm -f /etc/lirc/hardware.conf /etc/lirc/lircd.conf /etc/lirc/lircmd.conf
    dpkg --purge lirc 2>/dev/null
    mount --bind /bin/true /sbin/depmod
    [ -x /usr/sbin/freeze-rc.d ] && freeze-rc.d
    dpkg -i lirc/lirc*_$(dpkg --print-architecture).deb
    MODULE="$(ls lirc-modules/lirc-modules-$(uname -r)*_$(dpkg --print-architecture).deb 2>/dev/null)"
    [ -n "$MODULE" ] && dpkg -i "$MODULE"
    [ -x /usr/sbin/unfreeze-rc.d ] && unfreeze-rc.d
    umount /sbin/depmod
    depmod -a
    rm -f /etc/lirc/lircd.conf /var/lib/vdr/remote.LIRC.conf
    cp lirc/lircd.conf /etc/lirc/lircd.conf
    cp lirc/remote.LIRC.conf /var/lib/vdr/remote.LIRC.conf
    chown vdr:vdr /var/lib/vdr/remote.LIRC.conf
    rm -f /etc/serial.conf
    if lspci -v|grep -q Hauppauge; then
        perl -pi -e 's/^(MODULES)=.*/\1="lirc_i2c"/' /etc/lirc/hardware.conf
    fi
    if lspci|grep -q SkyStar2; then
    	perl -pi -e 's/^(MODULES)=.*/\1="lirc_serial"/' /etc/lirc/hardware.conf
	echo /dev/ttyS0 uart none > /etc/serial.conf
    fi
    EVENT="$(grep -i -e receiver -e ir -e remote /proc/bus/input/devices -A4|awk '/H: Handlers=kbd/{print $3}'|grep event|head -1)"
    if [ -n "$EVENT" ]; then
	rm -f /etc/serial.conf
	perl -pi -e 's/^(MODULES)=.*/\1=""/' /etc/lirc/hardware.conf
	perl -pi -e 's/^(DRIVER)=.*/\1="dev\/input"/' /etc/lirc/hardware.conf
	perl -pi -e "s/^(DEVICE)=.*/\1=\"\/dev\/input\/$EVENT\"/" /etc/lirc/hardware.conf
	#if grep -qi Terratec /proc/bus/input/devices; then
	#    rm -f /etc/lirc/lircd.conf
	#    cp lirc/lircd.conf.Terratec /etc/lirc/lircd.conf
	#fi
	#if grep -qi Twinhan /proc/bus/input/devices; then
	#    rm -f /etc/lirc/lircd.conf
        #    cp lirc/lircd.conf.Twinhan /etc/lirc/lircd.conf
	#fi
	if grep -qi Nova-S-Plus /proc/bus/input/devices; then
	    rm -f /etc/lirc/lircd.conf
	    cp lirc/lircd.conf.Nova-S-Plus /etc/lirc/lircd.conf
	fi
    fi
    if lspci -v|grep -q "PCTV Sat"; then
    	rm -f /etc/serial.conf
    	perl -pi -e 's/^(MODULES)=.*/\1=""/' /etc/lirc/hardware.conf
        perl -pi -e 's/^(DRIVER)=.*/\1="pinsys"/' /etc/lirc/hardware.conf
	perl -pi -e 's/^(DEVICE)=.*/\1="\/dev\/ttyS0"/' /etc/lirc/hardware.conf
    fi
    if [ "$1" = "serial" ]; then
	perl -pi -e 's/^(MODULES)=.*/\1="lirc_serial"/' /etc/lirc/hardware.conf
	perl -pi -e 's/^(DRIVER)=.*/\1=""/' /etc/lirc/hardware.conf
	perl -pi -e 's/^(DEVICE)=.*/\1=""/' /etc/lirc/hardware.conf
	echo /dev/ttyS0 uart none > /etc/serial.conf
    fi
    if [ -f /etc/serial.conf ]; then
	setserial /dev/ttyS0 uart none
    else
	setserial /dev/ttyS0 autoconfig
    fi
    if pidof lircd >/dev/null; then
	/etc/init.d/lirc stop
	killall -9 lircd 2>/dev/null
    fi
    if [ -x lirc/lirc ]; then
        rm -f /etc/init.d/lirc
	cp lirc/lirc /etc/init.d/lirc
    fi
    /etc/init.d/lirc start
    rm -f /var/lib/vdr/remote.conf
    for x in KBD LIRC XKeySym; do
       [ -r /var/lib/vdr/remote.$x.conf ] && cat /var/lib/vdr/remote.$x.conf >> /var/lib/vdr/remote.conf
    done
    chown vdr:vdr /var/lib/vdr/remote.conf
fi

# activate setserial on bootup
[ -x /etc/init.d/etc-setserial ] && update-rc.d etc-setserial start 30 S . stop 30 0 6 . 2>/dev/null
[ -x /etc/init.d/setserial ] && update-rc.d setserial start 46 S . stop 19 0 6 . 2>/dev/null

# activate vdr and lirc on bootup
if [ "$FLL_DISTRO_MODE" != "live" ]; then
    update-rc.d vdr defaults 2>/dev/null
    update-rc.d vdradmin-am defaults 2>/dev/null
    update-rc.d lirc defaults 2>/dev/null
fi

# restore freeze state
[ -n "$FROZEN" ] && freeze-rc.d

# start vdr
/etc/init.d/vdr start

# start vdradmin(-am)
[ -x /etc/init.d/vdradmin ] && /etc/init.d/vdradmin start
[ -x /etc/init.d/vdradmin-am ] && /etc/init.d/vdradmin-am start

# beep beep beep
printf '\a' > /dev/tty && sleep .2 && printf '\a' > /dev/tty && sleep .2 && printf '\a' > /dev/tty

echo "Installation of VDR [$CNAME] complete, have fun ;-)"

exit 0
