#!/usr/bin/bash
# runvdr - VDR launcher, ExecStart of vdr.service
#
# runvdr [VDROPTION]...
#
# Starts VDR with the given options, VDR_OPTIONS from /etc/sysconfig/vdr and
# a --plugin option for each installed plugin of this VDR's API version:
# the ones in VDR_PLUGIN_ORDER first, in that order, then the rest.  A
# plugin's options come from PLUGIN_OPTIONS in
# /etc/sysconfig/vdr-plugins.d/NAME.conf, PLUGIN_ENABLED=no there skips it.

shopt -s nullglob

VDR=/usr/bin/vdr
PLUGINDIR=/usr/lib64/vdr
PLUGINSUF=.so.14
PLUGINCONF=/etc/sysconfig/vdr-plugins.d

VDR_OPTIONS=()
[[ -r /etc/sysconfig/vdr ]] && . /etc/sysconfig/vdr

if [[ $DAEMON_COREFILE_LIMIT ]] && ulimit -S -c "$DAEMON_COREFILE_LIMIT" 2>/dev/null ; then
    VDR_OPTIONS+=( --userdump )
fi

declare -A seen

add_plugin()
{
    local plugin=$1 PLUGIN_OPTIONS='' PLUGIN_ENABLED=''
    [[ ${seen[$plugin]} ]] && return
    seen[$plugin]=1
    if [[ -r $PLUGINCONF/$plugin.conf ]] ; then
        # shellcheck source=/dev/null
        . "$PLUGINCONF/$plugin.conf"
        case ${PLUGIN_ENABLED,,} in no|false|0) return ;; esac
    fi
    VDR_OPTIONS+=( --plugin="$plugin${PLUGIN_OPTIONS:+ $PLUGIN_OPTIONS}" )
}

for plugin in $VDR_PLUGIN_ORDER ; do
    [[ -e $PLUGINDIR/libvdr-$plugin$PLUGINSUF ]] && add_plugin "$plugin"
done
for lib in "$PLUGINDIR"/libvdr-*"$PLUGINSUF" ; do
    plugin=${lib##*/libvdr-}
    add_plugin "${plugin%"$PLUGINSUF"}"
done

exec "$VDR" "$@" "${VDR_OPTIONS[@]}"
