]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
vdr: Forgot to add runvdr.
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 20 Mar 2013 12:41:44 +0000 (13:41 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 12 Apr 2013 11:53:33 +0000 (13:53 +0200)
config/vdr/runvdr [new file with mode: 0644]

diff --git a/config/vdr/runvdr b/config/vdr/runvdr
new file mode 100644 (file)
index 0000000..94b117d
--- /dev/null
@@ -0,0 +1,125 @@
+#!/bin/bash
+
+# runvdr - VDR launcher
+#
+# runvdr [VDROPTION]...
+
+shopt -s extglob nocasematch nullglob
+
+VDR=/usr/sbin/vdr
+PLUGINDIR=/usr/lib/vdr
+PLUGINVER=VDR_PLUGIN_VERSION
+PLUGINSUF=${PLUGINVER:+.$PLUGINVER}
+
+log()
+{
+    type -P logger &>/dev/null && \
+        logger -s -p daemon.info -t ${0##*/} "$1" 2>&1 || echo "INFO: $1"
+}
+
+plugconf()
+{
+    local plugin=$1 PLUGIN_OPTIONS= PLUGIN_ENABLED=
+    if [[ -e /etc/sysconfig/vdr-plugins.d/$plugin.conf ]] ; then
+        . /etc/sysconfig/vdr-plugins.d/$plugin.conf
+        case $PLUGIN_ENABLED in no|false|0) return ;; esac
+    fi
+    if [[ $PLUGIN_OPTIONS ]] ; then
+        VDR_OPTIONS+=( --plugin="$plugin $PLUGIN_OPTIONS" )
+    else
+        VDR_OPTIONS+=( --plugin=$plugin )
+    fi
+}
+
+build_cmdline()
+{
+    local plugin= p=
+    # Add "priority" plugins.
+    for plugin in $VDR_PLUGIN_ORDER ; do
+        [[ -e $PLUGINDIR/libvdr-${plugin}.so$PLUGINSUF ]] && plugconf $plugin
+    done
+    # Add the rest available.
+    for plugin in $PLUGINDIR/libvdr-*.so$PLUGINSUF ; do
+        plugin=${plugin##*/libvdr-}
+        plugin=${plugin%.so$PLUGINSUF}
+        for p in $VDR_PLUGIN_ORDER ; do
+            if [[ $plugin == $p ]] ; then
+                # Already added.
+                continue 2
+            fi
+        done
+        plugconf $plugin
+    done
+}
+
+reload_dvb()
+{
+    local modules=$( /sbin/lsmod | \
+        awk '/^dvb_core/ { gsub(","," ",$4) ; print $4 }' )
+    if [[ $modules ]] ; then
+        log "Reloading DVB modules"
+        /sbin/modprobe -r $modules dvb_core
+        for module in $modules ; do
+            /sbin/modprobe $module
+        done
+    fi
+}
+
+set_rtcwake()
+{
+    # Check timestamp set by shutdown script.
+    local nexttimer=$( cat /var/run/vdr/next-timer 2>/dev/null )
+    rm -f /var/run/vdr/next-timer
+
+    if [[ $nexttimer != +([0-9]) ]] ; then
+        # Next timer timestamp not set by shutdown script or bogus,
+        # try to get it via SVDRP.
+        nexttimer=$( svdrpsend NEXT abs 2>/dev/null | \
+            sed -rne 's/^250[[:space:]]+[0-9]+[[:space:]]+([0-9]+).*/\1/p' )
+    fi
+
+    if [[ $nexttimer && $nexttimer -gt $( date +%s ) ]] ; then
+        [[ -f /etc/sysconfig/vdr ]] && . /etc/sysconfig/vdr
+        local when=$(( $nexttimer - ${WAKEUP_BEFORE_RECORDING:-10} * 60 ))
+        local hrwhen=$( date -d "1970-01-01 $when sec UTC" )
+        log "Setting wakeup time for next recording: $hrwhen"
+        /usr/sbin/rtcwake -m no -t $when >/dev/null
+    fi
+}
+
+if [[ $1 == --set-wakeup ]] ; then
+    # Just set RTC wakeup for next timer event.
+    set_rtcwake
+    exit $?
+fi
+
+rc=
+while true ; do
+
+    VDR_OPTIONS=()
+    if [[ $VDR_INIT ]] ; then
+        [[ -f /etc/sysconfig/vdr ]] && . /etc/sysconfig/vdr
+        [[ $DAEMON_COREFILE_LIMIT ]] && \
+            ulimit -S -c $DAEMON_COREFILE_LIMIT &>/dev/null && \
+            VDR_OPTIONS+=( --userdump ) && cd ${TMPDIR:-/tmp}
+        build_cmdline
+    fi
+
+    $VDR "$@" "${VDR_OPTIONS[@]}"
+    rc=$?
+
+    # 137: "kill -KILL" eg in killproc(), others: "man vdr"
+    case $rc in
+        0|2|137)
+            log "VDR exited with status $rc, exiting"
+            break
+            ;;
+        *)
+            log "VDR exited with status $rc, attempting restart"
+            case $RELOAD_DVB in yes|true|1) reload_dvb ;; esac
+            ;;
+    esac
+
+done
+
+exit $rc