diff options
| author | root <root@elwms02.(none)> | 2010-04-06 16:13:08 +0200 |
|---|---|---|
| committer | root <root@elwms02.(none)> | 2010-04-06 16:13:08 +0200 |
| commit | 0e7005fcc7483c01aa102fbea358c5ac65a48d62 (patch) | |
| tree | 11517ce0d3d2977c6732b3aa583b0008083e0bd3 /vdr/scripts/vdrsetup | |
| download | x-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.gz x-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.bz2 | |
hello world
Diffstat (limited to 'vdr/scripts/vdrsetup')
| -rw-r--r-- | vdr/scripts/vdrsetup | 1896 |
1 files changed, 1896 insertions, 0 deletions
diff --git a/vdr/scripts/vdrsetup b/vdr/scripts/vdrsetup new file mode 100644 index 0000000..e45e39f --- /dev/null +++ b/vdr/scripts/vdrsetup @@ -0,0 +1,1896 @@ +#!/bin/bash +# +# (x-)vdrsetup 0.0.8 - script for OSDServer on localhost +# by Marc Wernecke - www.zulu-entertainment.de +# 12.02.2009 + +script="$0" + +# convenient return values +true=0 +false=1 + + +# Some generic stuff for handling a connection + +function error() { + # Fatal error. Send quit command, close FIFO and terminate netcat + DoLog "fatal error, disconnecting..." + [ "${reply2xx[0]}" != 202 ] && SendCmd Quit + + exec 3>&- + exec 4>&- + + kill $pid + + exit 1 +} + +function ConnectServer() { + # Connect to the OSDServer + DoLog "connecting to the OSDServer..." + # Set up temporary fifo and open as file descriptor 3 and 4 + mkfifo --mode=700 /tmp/pipe-in$$ /tmp/pipe-out$$ + exec 3<> /tmp/pipe-in$$ + exec 4<> /tmp/pipe-out$$ + rm /tmp/pipe-in$$ /tmp/pipe-out$$ + + # Connect to server using the fifo + { + netcat $1 $2 + + # In case of connection loss: + echo 499 disconnected + echo 202 Good Bye. + } <&3 >&4 & + pid=$! + + # Sending to the server: use >&3 + # Receive from the server: use <&4 +} + + +function ReadReply() { + # Read a complete server reply until 2xx return code, + # and store replies in each category by number + reply2xx=() + reply3xx=() + reply4xx=() + reply5xx=() + reply6xx=() + + while read -r code line <&4 ; do + echo "< $code $line" + # screen echo + + # vdrsetup debug + if [ "$vdrsetup_use_debug" = "on" ]; then + [ "$vdrsetup_use_log" = "on" ] && echo "< $code $line" >> "$vdrsetup_log" + [ "$vdrsetup_use_syslog" = "on" ] && $LOGGER "< $code $line" + fi + + case $code in + 2*) IFS=$' \t\n\r' reply2xx=($code "$line") + ;; + 3*) IFS=$' \t\n\r' reply3xx=($code $line) + ;; + 4*) IFS=$' \t\n\r' reply4xx=($code "$line") + ;; + 5*) IFS=$' \t\n\r' reply5xx=($code "$line") + ;; + 6*) IFS=$' \t\n\r' reply6xx=($code "$line") + ;; + esac + [ -n "${reply2xx[0]}" ] && break + done + + [ -n "${reply4xx[0]}" ] && return $false + return $true +} + +function SendCmd() { + # Send a command and read the reply + + echo "> $*" + # screen echo + + echo "$*" >&3 + # network send + + # vdrsetup debug + if [ "$vdrsetup_use_debug" = "on" ]; then + [ "$vdrsetup_use_log" = "on" ] && echo "> $*" >> "$vdrsetup_log" + [ "$vdrsetup_use_syslog" = "on" ] && $LOGGER "> $*" + fi + + ReadReply +} + +function IsEvent() { + # Helper to check reply for a certain event + + [ "${reply3xx[0]}" != 300 ] && return $false + [ "${reply3xx[1]}" != "$1" ] && return $false + [ "${reply3xx[2]}" != "$2" ] && return $false + + return $true +} + + +function QuoteString() { + # Quote arbitrary string for use in '' and "" + local str="${!1}" + + str="${str//'\'/\\\\}" + str="${str//'\\'/\\\\}" + # work around bash bug: double quoted '\' + + str="${str//\'/$'\\\''}" + # This is bogus, anyone knows something better to replace ' by \' ? + + str="${str//\"/\\\"}" + str="${str//$'\r'/\\r}" + str="${str//$'\n'/\\n}" + str="${str//$'\t'/\\t}" + + eval "$1=\$str" +} + +function UnquoteString() { + # Unquote string + local str="${!1}" + + str="${str//\\r/$'\r'}" + str="${str//\\n/$'\n'}" + str="${str//\\t/$'\t'}" + str="${str//\\\"/\"}" + str="${str//\\\'/\'}" + str="${str//\\\\/\\}" + + eval "$1=\$str" +} + + +############## +# vdrsetup # +############## +vdrsetup_ok_ends="on" +vdrsetup_key_timeout=1000 +# logging +LOGGER="logger -- ${0##*/} - " +vdrsetup_use_screen="on" # echo setup changings to the screen +vdrsetup_use_log="off" # echo setup changings to $vdrsetup_log +vdrsetup_log="/tmp/vdrsetup.log" # log file +vdrsetup_use_syslog="on" # echo setup changings (with LOGGER) to syslog +vdrsetup_use_debug="off" # enable comunications log + +# vdr configuration +config=/etc/default/vdr # path to vdr configuration +. $config # load vdr configuration +[ -f "$VDRCONFDIR/plugins/vdrsetup.conf" ] && . "$VDRCONFDIR/plugins/vdrsetup.conf" + +# x-vdr +have_xvdr="on" +[ ! -f /usr/local/src/x-vdr/setup.conf ] && have_xvdr="off" + +# /tmp/vdr-help.tmp +[ ! -f /tmp/vdr-help.tmp ] && $VDRPRG --help | sed -e '/^$/d' -e 's/^. //' > /tmp/vdr-help.tmp + +# vdr-desc.cache +[ ! -f /tmp/vdr-desc.cache ] && $VDRPRG --version | sed -e 's/\(^[^ ]*\)\(.*$\)/\1_desc="\1\2"/' -e '/^streamdev/s/-/_/' -e 's/^\[.*//' | sort > /tmp/vdr-desc.cache +. /tmp/vdr-desc.cache +vdr_version=$(echo $vdr_desc | sed -e 's/[^)]*$//') +plugin_api=$(echo $vdr_desc | sed -e 's/[^)]*$//' -e 's/^[^\/]*//g' -e 's/\///' -e 's/\/*)//') + +# reset logfile +[ "$vdrsetup_use_log" = "on" ] && echo "$0" > "$vdrsetup_log" + +# helper functions => +function DoLog() { + [ "$vdrsetup_use_log" = "on" ] && echo "$*" >> "$vdrsetup_log" + [ "$vdrsetup_use_screen" = "on" ] && echo ">> $*" + [ "$vdrsetup_use_syslog" = "on" ] && $LOGGER "$*" +} + +function CreateDir() { + directory="$*" + if [ ! -d "$directory" ]; then + SendCmd "Message -seconds 10 'Create $directory?'" || return $false + if IsEvent Message keyOk ; then + mkdir -p "$directory" + chown -R $VDRUSER:$VDRGROUP "$directory" + [ -d "$directory" ] && DoLog "creating \"$directory\"" + fi + else + DoLog "directory \"$directory\" already exist" + fi +} + +# Menu functions => + +##### Script-Setup Menu ##### +function ScriptSetup() { + # Menu ---------------------------------------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu 'Skript Intern'" || return $false + SendCmd "menu.SetColorKeyText -blue 'Help'" || return $false + SendCmd "menu.SetColumns 24" || return $false + SendCmd "menu.EnableEvent keyOk keyBlue close" || return $false + # List ---------------------------------------------------------------------------------------------------------------------------------> + SendCmd "menu.AddNew OsdItem -unselectable '--- Einstellungen ---'" || return $false + SendCmd "opt1=menu.AddNew EditListItem -selectname '$vdrsetup_ok_ends' 'Beim Speichern beenden' on off" || return $false + SendCmd "opt2=menu.AddNew EditIntItem 'Tasten Timeout (ms)' '$vdrsetup_key_timeout'" || return $false + SendCmd "menu.AddNew OsdItem -unselectable ''" || return $false + SendCmd "menu.AddNew OsdItem -unselectable '--- Logging ---'" || return $false + SendCmd "opt3=menu.AddNew EditListItem -selectname '$vdrsetup_use_log' 'Benutze Log Datei' on off" || return $false + SendCmd "opt4=menu.AddNew EditStrItem 'Log Datei' $vdrsetup_log'" || return $false + SendCmd "opt5=menu.AddNew EditListItem -selectname '$vdrsetup_use_syslog' 'Syslog benutzen' on off" || return $false + SendCmd "opt6=menu.AddNew EditListItem -selectname '$vdrsetup_use_debug' 'Debug Nachrichten' on off" || return $false + SendCmd "menu.AddNew OsdItem -unselectable ''" || return $false + SendCmd "menu.AddNew OsdItem -unselectable '--- Befehle ---'" || return $false + SendCmd "opt7=menu.AddNew OsdItem 'Cache neu erstellen'" || return $false + SendCmd "opt7.EnableEvent keyRed focus blur" || return $false + # <--------------------------------------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.show" || return $false + # <--------------------------------------------------------------------------------------------------------------------------------- Menu + + while true; do + SendCmd "menu.SleepEvent" || return $false + # keyOk + if IsEvent menu keyOk ; then + echo "# $script" > "$VDRCONFDIR/plugins/vdrsetup.conf" + # vdrsetup_ok_ends + SendCmd "opt1.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + vdrsetup_ok_ends="${reply6xx[1]}" + echo "vdrsetup_ok_ends=\"$vdrsetup_ok_ends\"" >> "$VDRCONFDIR/plugins/vdrsetup.conf" + # key_timeout + SendCmd "opt2.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + vdrsetup_key_timeout="${reply6xx[1]}" + echo "vdrsetup_key_timeout=\"$vdrsetup_key_timeout\"" >> "$VDRCONFDIR/plugins/vdrsetup.conf" + # vdrsetup_use_log + SendCmd "opt3.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + vdrsetup_use_log="${reply6xx[1]}" + echo "vdrsetup_use_log=\"$vdrsetup_use_log\"" >> "$VDRCONFDIR/plugins/vdrsetup.conf" + # vdrsetup_log + SendCmd "opt4.GetValue -quoted" || return $false + if [ "${reply5xx[0]}" = 500 ]; then + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + [ -d "$(dirname "$value")" ] && vdrsetup_log="$value" + fi + echo "vdrsetup_log=\"$vdrsetup_log\"" >> "$VDRCONFDIR/plugins/vdrsetup.conf" + # vdrsetup_use_syslog + SendCmd "opt5.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + vdrsetup_use_syslog="${reply6xx[1]}" + echo "vdrsetup_use_syslog=\"$vdrsetup_use_syslog\"" >> "$VDRCONFDIR/plugins/vdrsetup.conf" + # vdrsetup_use_debug + SendCmd "opt6.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + vdrsetup_use_debug="${reply6xx[1]}" + echo "vdrsetup_use_debug=\"$vdrsetup_use_debug\"" >> "$VDRCONFDIR/plugins/vdrsetup.conf" + # close the submenu + if [ "$vdrsetup_ok_ends" = "on" ]; then + SendCmd "menu.SendState osBack" || return $false +# SendCmd "delete menu" || return $false +# SendCmd "leavelocal" || return $false +# return $true + fi + fi + if IsEvent opt7 focus ; then + SendCmd "menu.SetColorKeyText -red Create" || return $false + SendCmd "menu.Show" || return $false + fi + if IsEvent opt7 blur ; then + SendCmd "menu.SetColorKeyText -red ''" || return $false + SendCmd "menu.Show" || return $false + fi + if IsEvent opt7 keyRed ; then + SendCmd "Message -seconds 10 '/tmp/vdr-desc.cache erstellen?'" || return $false + if IsEvent Message keyOk ; then + $VDRPRG --version | sed -e 's/\(^[^ ]*\)\(.*$\)/\1_desc="\1\2"/' -e '/^streamdev/s/-/_/' -e 's/^\[.*//' | sort > /tmp/vdr-desc.cache + . /tmp/vdr-desc.cache + fi + fi + # keyBlue (Help) + if IsEvent menu keyBlue ; then + SendCmd "Message -seconds 5 'Auswahl mit Links und Rechts, speichern mit Ok'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + +##### System-Start Menu ##### +function SystemStart() { + Gdm="$(find /etc/rc*d/S*gdm)" + if [ -n "$Gdm" ]; then + DESKTOP_MANGER="gdm" + [ -f /etc/rc2.d/S30gdm ] && echo warning + [ -f /etc/rc3.d/S30gdm ] && DESKTOP="on" + fi + + RUNLEVEL_STR="$(cat /etc/inittab | grep -m1 ^id:)" + RUNLEVEL=$(echo $RUNLEVEL_STR | cut -f2 -d":") + if [ $RUNLEVEL -eq 5 ] || [ "$DESKTOP_MANGER" ="gdm" -a $RUNLEVEL -gt 2 ]; then + DESKTOP="on" + else + DESKTOP="off" + fi + + # Menu -------------------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu 'Systemstart'" || return $false + SendCmd "menu.SetColorKeyText -blue 'Help'" || return $false + SendCmd "menu.SetColumns 24" || return $false + SendCmd "menu.EnableEvent keyOk close" || return $false + # List -------------------------------------------------------------------------------------------------------------> + SendCmd "menu.AddNew OsdItem -unselectable '--- Programme ---'" || return $false + SendCmd "opt1=menu.AddNew EditListItem -selectname '$AUTOSTART' 'VDR' on off" || return $false + SendCmd "opt1.EnableEvent keyBlue" || return $false + SendCmd "opt2=menu.AddNew EditListItem -selectname '$XPLAYER' 'Xserver und Player' on off" || return $false + SendCmd "opt2.EnableEvent keyBlue" || return $false + SendCmd "opt3=menu.AddNew EditListItem -selectname '$DESKTOP' 'Desktop-Manager' on off" || return $false + SendCmd "opt3.EnableEvent keyBlue" || return $false + SendCmd "opt4=menu.AddNew EditListItem -selectname '$vdradmin' 'VDR-Admin' on off" || return $false + SendCmd "opt4.EnableEvent keyBlue" || return $false + SendCmd "menu.AddNew OsdItem -unselectable ''" || return $false + SendCmd "menu.AddNew OsdItem -unselectable '--- Module ---'" || return $false + SendCmd "optA=menu.AddNew EditListItem -selectname '$em8300' 'DXR3' on off" || return $false + SendCmd "optA.EnableEvent keyBlue" || return $false + SendCmd "optB=menu.AddNew EditListItem -selectname '$graphlcd_base' 'GraphLCD' on off" || return $false + SendCmd "optB.EnableEvent keyBlue" || return $false + SendCmd "optC=menu.AddNew EditListItem -selectname '$LCDproc' 'LCDproc' on off" || return $false + SendCmd "optC.EnableEvent keyBlue" || return $false + SendCmd "optD=menu.AddNew EditListItem -selectname '$lirc' 'Lirc' on off" || return $false + SendCmd "optD.EnableEvent keyBlue" || return $false + SendCmd "optE=menu.AddNew EditIntItem -min 1 -max 2 'Lirc Port' '$lirc_port'" || return $false + SendCmd "optE.EnableEvent keyBlue" || return $false + # <------------------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.show" || return $false + # <------------------------------------------------------------------------------------------------------------- Menu + + while true; do + SendCmd "menu.SleepEvent" || return $false + # keyOk + if IsEvent menu keyOk ; then + # AUTOSTART + SendCmd "opt1.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$AUTOSTART" != "${reply6xx[1]}" ]; then + DoLog "changing AUTOSTART to ${reply6xx[1]}" + sed -i $config -e "/^AUTOSTART=/s/$AUTOSTART/${reply6xx[1]}/" + AUTOSTART=${reply6xx[1]} + fi + # Xserver and Player + SendCmd "opt2.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$XPLAYER" != "${reply6xx[1]}" ]; then + DoLog "changing XPLAYER to ${reply6xx[1]}" + sed -i $config -e "/^XPLAYER=/s/$XPLAYER/${reply6xx[1]}/" + XPLAYER=${reply6xx[1]} + fi + # Desktop-Manager + SendCmd "opt3.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$DESKTOP" != "${reply6xx[1]}" ] || [ "$DESKTOP" = "$XPLAYER" ]; then + DESKTOP=${reply6xx[1]} + [ "$XPLAYER" = "on" ] && DESKTOP="off" + DoLog "changing Desktop-Manager to $DESKTOP" + # runlevel + if [ $RUNLEVEL -eq 5 -a "$DESKTOP" = "off" ]; then + sed -i /etc/inittab -e "s/$RUNLEVEL_STR/id:3:initdefault:/" + elif [ $RUNLEVEL -ne 5 -a "$DESKTOP" = "on" ]; then + sed -i /etc/inittab -e "s/$RUNLEVEL_STR/id:5:initdefault:/" + fi + XWRAPPER_STR="$(cat /etc/X11/Xwrapper.config | grep -m1 ^allowed_users)" + XWRAPPER=$(echo $XWRAPPER_STR | cut -f2 -d"=") + if [ "$DESKTOP" != "on" -a "$XWRAPPER" != "anybody" ]; then + log "Setting 'allowed_users' to 'anybody' in /etc/X11/Xwrapper.config" + sed -i /etc/X11/Xwrapper.config -e "s/$XWRAPPER_STR/allowed_users=anybody/g" + fi + fi + # vdradmin + SendCmd "opt4.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$vdradmin" != "${reply6xx[1]}" ]; then + DoLog "changing vdradmin to ${reply6xx[1]}" + sed -i $config -e "/^vdradmin=/s/$vdradmin/${reply6xx[1]}/" + vdradmin=${reply6xx[1]} + fi + # dxr3 + SendCmd "optA.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$em8300" != "${reply6xx[1]}" ]; then + DoLog "changing em8300 to ${reply6xx[1]}" + sed -i $config -e "/^em8300=/s/$em8300/${reply6xx[1]}/" + em8300=${reply6xx[1]} + fi + # graphlcd_base + SendCmd "optB.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$graphlcd_base" != "${reply6xx[1]}" ]; then + DoLog "changing graphlcd_base to ${reply6xx[1]}" + sed -i $config -e "/^graphlcd_base=/s/$graphlcd_base/${reply6xx[1]}/" + graphlcd_base=${reply6xx[1]} + fi + # LCDproc + SendCmd "optC.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$LCDproc" != "${reply6xx[1]}" ]; then + DoLog "changing LCDproc to ${reply6xx[1]}" + sed -i $config -e "/^LCDproc=/s/$LCDproc/${reply6xx[1]}/" + LCDproc=${reply6xx[1]} + fi + # lirc + SendCmd "optD.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$lirc" != "${reply6xx[1]}" ]; then + DoLog "changing lirc to ${reply6xx[1]}" + sed -i $config -e "/^lirc=/s/$lirc/${reply6xx[1]}/" + lirc=${reply6xx[1]} + fi + # lirc_port + SendCmd "optE.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$lirc_port" != "${reply6xx[1]}" ]; then + DoLog "changing lirc_port to ${reply6xx[1]}" + sed -i $config -e "/^lirc_port=/s/$lirc_port/${reply6xx[1]}/" + lirc_port=${reply6xx[1]} + fi + # close the submenu + if [ "$vdrsetup_ok_ends" = "on" ]; then + SendCmd "menu.SendState osBack" || return $false +# SendCmd "delete menu" || return $false +# SendCmd "leavelocal" || return $false +# return $true + fi + fi + + # keyBlue (Help) + if IsEvent opt1 keyBlue ; then + SendCmd "Message -seconds 5 'VDR automatisch starten on/off'" || return $false + fi + if IsEvent opt2 keyBlue ; then + SendCmd "Message -seconds 5 'Xserver und Player automatisch starten on/off'" || return $false + fi + if IsEvent opt3 keyBlue ; then + SendCmd "Message -seconds 5 'Desktop-Manager automatisch starten on/off'" || return $false + fi + if IsEvent opt4 keyBlue ; then + SendCmd "Message -seconds 5 'VDRAdmin automatisch starten on/off'" || return $false + fi + + if IsEvent optA keyBlue ; then + SendCmd "Message -seconds 5 'Modul automatisch laden on/off'" || return $false + fi + if IsEvent optB keyBlue ; then + SendCmd "Message -seconds 5 'Modul automatisch laden on/off'" || return $false + fi + if IsEvent optC keyBlue ; then + SendCmd "Message -seconds 5 'Modul automatisch laden on/off'" || return $false + fi + if IsEvent optD keyBlue ; then + SendCmd "Message -seconds 5 'Modul automatisch laden on/off'" || return $false + fi + if IsEvent optE keyBlue ; then + SendCmd "Message -seconds 5 'Lirc-Port 1/2'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + +##### VDR-Setup Menu ##### +function VdrSetup() { + # directorys + videodir=$( grep "^VIDEODIR=" $config | tail -n1 | sed -e "s/^VIDEODIR=//" -e 's/"//g' -e 's/#.*//') + musicdir=$( grep "^MUSICDIR=" $config | tail -n1 | sed -e "s/^MUSICDIR=//" -e 's/"//g' -e 's/#.*//') + dvdisodir=$( grep "^DVDISODIR=" $config | tail -n1 | sed -e "s/^DVDISODIR=//" -e 's/"//g' -e 's/#.*//') + picturedir=$(grep "^PICTUREDIR=" $config | tail -n1 | sed -e "s/^PICTUREDIR=//" -e 's/"//g' -e 's/#.*//') + divxdir=$( grep "^DIVXDIR=" $config | tail -n1 | sed -e "s/^DIVXDIR=//" -e 's/"//g' -e 's/#.*//') + vdrvardir=$( grep "^VDRVARDIR=" $config | tail -n1 | sed -e "s/^VDRVARDIR=//" -e 's/"//g' -e 's/#.*//') + dvdburner=$( grep "^DVDBURNER=" $config | tail -n1 | sed -e "s/^DVDBURNER=//" -e 's/"//g' -e 's/#.*//') + + ls_dev=$(ls -r /dev/*) + + # cd / dvd + all_dvd=$(echo "$ls_dev" | grep "^/dev/[c,d][d,v][r,d]" | sort -r) + if [ -n "$all_dvd" ] && [ $(echo $all_dvd | grep -cw "$dvdburner") -eq 0 ]; then + dvdburner_old="$dvdburner" + dvdburner=$(echo $all_dvd | cut -f 1 -d " ") + sed -i $config -e "/^DVDBURNER=/s?$dvdburner_old?$dvdburner?" + SendCmd "Message -seconds 5 \"Resetting DVDBURNER to $dvdburner\"" || return $false + fi + + # vdr keyb tty + all_tty=$(echo "$ls_dev" | grep "^/dev/tty[0-9]$") + if [ $(echo $all_tty | grep -cw "$KEYB_TTY") -eq 0 ]; then + KEYB_TTY_OLD="$KEYB_TTY" + KEYB_TTY="" + sed -i $config -e "/^KEYB_TTY=/s/$KEYB_TTY_OLD/$KEYB_TTY/" + SendCmd "Message -seconds 5 \"Resetting KEYB_TTY to $KEYB_TTY\"" || return $false + fi + + # vdr language + all_lang=$(locale -a | grep "_") + if [ $(echo $all_lang | grep -cw "$VDRLANG") -eq 0 ]; then + VDRLANG_OLD="$VDRLANG" + VDRLANG=$(echo $VDRLANG | cut -f 1 -d ".") + [ $(echo $all_lang | grep -cw "$VDRLANG") -eq 0 ] && VDRLANG=$(echo $all_lang | cut -f 1 -d " ") + sed -i $config -e "/^VDRLANG=/s/$VDRLANG_OLD/$VDRLANG/" + SendCmd "Message -seconds 5 \"Resetting VDRLANG to $VDRLANG\"" || return $false + fi + + # Menu --------------------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu '$vdr_version'" || return $false + SendCmd "menu.SetColorKeyText -blue 'Help'" || return $false + SendCmd "menu.SetColumns 24" || return $false + SendCmd "menu.EnableEvent keyOk keyBlue close" || return $false + # List --------------------------------------------------------------------------------------------------------------> + SendCmd "menu.AddNew OsdItem -unselectable '--- Einstellungen ---'" || return $false + SendCmd "opt1=menu.AddNew EditListItem -selectname '$noad' 'Schnittmarken erkennen' on off" || return $false + SendCmd "opt2=menu.AddNew EditListItem -selectname '$KEYB_TTY' 'KEYB TTY' \"\" $(echo $all_tty)" || return $false + SendCmd "opt3=menu.AddNew EditListItem -selectname '$VDRLANG' 'Sprache (LANG)' $(echo $all_lang)" || return $false + SendCmd "opt4=menu.AddNew EditIntItem 'Watchdog Timeout (sec)' '$WATCHDOG'" || return $false + SendCmd "opt5=menu.AddNew EditIntItem 'XV Display' '$XV_DISPLAY'" || return $false + SendCmd "menu.AddNew OsdItem -unselectable '--- Laufwerke & Verzeichnisse ---'" || return $false + SendCmd "optA=menu.AddNew EditStrItem 'Video' '$videodir'" || return $false + SendCmd "optB=menu.AddNew EditStrItem 'Musik' '$musicdir'" || return $false + SendCmd "optC=menu.AddNew EditStrItem 'DVD-Isos' '$dvdisodir'" || return $false + SendCmd "optD=menu.AddNew EditStrItem 'Bilder und Fotos' '$picturedir'" || return $false + SendCmd "optE=menu.AddNew EditStrItem 'DivX und Co' '$divxdir'" || return $false + SendCmd "optF=menu.AddNew EditStrItem 'EPG Daten' '$vdrvardir'" || return $false + SendCmd "optG=menu.AddNew EditListItem -selectname '$dvdburner' 'DVD Brenner' \"\" $(echo $all_dvd)" || return $false + # <-------------------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.show" || return $false + # <-------------------------------------------------------------------------------------------------------------- Menu + + while true; do + SendCmd "menu.SleepEvent" || return $false + # keyOk + if IsEvent menu keyOk ; then + # noad + SendCmd "opt1.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + value="${reply6xx[1]}" + if [ "$noad" != "$value" ]; then + DoLog "changing noad to $value" + sed -i $config -e "/^noad=/s/$noad/$value/" + noad="$value" + fi + # KEYB_TTY + SendCmd "opt2.GetValue -name" || return $false + if [ "${reply6xx[0]}" = 600 ]; then + value="${reply6xx[1]}" + elif [ "${reply2xx[0]}" = 200 ]; then + value="" + else + return $false + fi + if [ "$KEYB_TTY" != "$value" ]; then + DoLog "changing KEYB_TTY to \"$value\"" + sed -i $config -e "/^KEYB_TTY=/s/\"//g" -e "s?^KEYB_TTY=$KEYB_TTY?KEYB_TTY=\"$value\"?" + KEYB_TTY="$value" + fi + + # VDRLANG + SendCmd "opt3.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + value="${reply6xx[1]}" + if [ "$VDRLANG" != "$value" ]; then + DoLog "changing VDRLANG to $value" + sed -i $config -e "/^VDRLANG=/s/$VDRLANG/$value/" + VDRLANG="$value" + fi + + # WATCHDOG + SendCmd "opt4.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + value="${reply6xx[1]}" + if [ "$WATCHDOG" != "$value" ]; then + DoLog "changing WATCHDOG to $value" + sed -i $config -e "/^WATCHDOG=/s/$WATCHDOG/$value/" + WATCHDOG="$value" + fi + # XV_DISPLAY + SendCmd "opt5.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + value="${reply6xx[1]}" + if [ "$XV_DISPLAY" != "$value" ]; then + DoLog "changing XV_DISPLAY to $value" + sed -i $config -e "/^XV_DISPLAY=/s/$XV_DISPLAY/$value/" + XV_DISPLAY="$value" + fi + # VIDEODIR + SendCmd "optA.GetValue -quoted" || return $false + [ "${reply5xx[0]}" != 500 ] && return $false + value="${reply5xx[1]}" + if [ "$videodir" != "$value" ]; then + [ ! -d "$value" ] && CreateDir "$value" + if [ -d "$value" ]; then + DoLog "changing VIDEODIR to $value" + sed -i $config -e "/^VIDEODIR=/s?$videodir?$value?" + else + DoLog "error: directory \"$value\" does not exists" + fi + fi + # MUSICDIR + SendCmd "optB.GetValue -quoted" || return $false + [ "${reply5xx[0]}" != 500 ] && return $false + value="${reply5xx[1]}" + if [ "$musicdir" != "$value" ]; then + [ ! -d "$value" ] && CreateDir "$value" + if [ -d "$value" ]; then + DoLog "changing MUSICDIR to $value" + sed -i $config -e "/^MUSICDIR=/s?$musicdir?$value?" + else + DoLog "error: directory \"$value\" does not exists" + fi + fi + # DVDISODIR + SendCmd "optC.GetValue -quoted" || return $false + [ "${reply5xx[0]}" != 500 ] && return $false + value="${reply5xx[1]}" + if [ "$dvdisodir" != "$value" ]; then + [ ! -d "$value" ] && CreateDir "$value" + if [ -d "$value" ]; then + DoLog "changing DVDISODIR to $value" + sed -i $config -e "/^DVDISODIR=/s?$dvdisodir?$value?" + else + DoLog "error: directory \"$value\" does not exists" + fi + fi + # PICTUREDIR + SendCmd "optD.GetValue -quoted" || return $false + [ "${reply5xx[0]}" != 500 ] && return $false + value="${reply5xx[1]}" + if [ "$picturedir" != "$value" ]; then + [ ! -d "$value" ] && CreateDir "$value" + if [ -d "$value" ]; then + DoLog "changing PICTUREDIR to $value" + sed -i $config -e "/^PICTUREDIR=/s?$picturedir?$value?" + else + DoLog "error: directory \"$value\" does not exists" + fi + fi + # DIVXDIR + SendCmd "optE.GetValue -quoted" || return $false + [ "${reply5xx[0]}" != 500 ] && return $false + value="${reply5xx[1]}" + if [ "$divxdir" != "$value" ]; then + [ ! -d "$value" ] && CreateDir "$value" + if [ -d "$value" ]; then + DoLog "changing DIVXDIR to $value" + sed -i $config -e "/^DIVXDIR=/s?$divxdir?$value?" + else + DoLog "error: directory \"$value\" does not exists" + fi + fi + # VDRVARDIR + SendCmd "optF.GetValue -quoted" || return $false + [ "${reply5xx[0]}" != 500 ] && return $false + value="${reply5xx[1]}" + if [ "$vdrvardir" != "$value" ]; then + [ ! -d "$value" ] && CreateDir "$value" + if [ -d "$value" ]; then + DoLog "changing VDRVARDIR to $value" + sed -i $config -e "/^VDRVARDIR=/s?$vdrvardir?$value?" + else + DoLog "error: directory \"$value\" does not exists" + fi + fi + # DVDBURNER + SendCmd "optG.GetValue -name" || return $false + if [ "${reply6xx[0]}" = 600 ]; then + value="${reply6xx[1]}" + elif [ "${reply2xx[0]}" = 200 ]; then + value="" + else + return $false + fi + if [ "$dvdburner" != "$value" ]; then + DoLog "changing DVDBURNER to \"$value\"" + [ ! -e "$value" ] && DoLog "warning: \"$value\" is no valid" +# sed -i $config -e "/^DVDBURNER=/s?$dvdburner?$value?" + sed -i $config -e "/^DVDBURNER=/s/\"//g" -e "s?^DVDBURNER=$dvdburner?DVDBURNER=\"$value\"?" + fi + # close the submenu + if [ "$vdrsetup_ok_ends" = "on" ]; then + SendCmd "menu.SendState osBack" || return $false +# SendCmd "delete menu" || return $false +# SendCmd "leavelocal" || return $false +# return $true + fi + fi + # keyBlue (Help) + if IsEvent menu keyBlue ; then + SendCmd "Message -seconds 5 'Speichern mit Ok oder Menue verlassen mit Exit'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + +##### Plugin Menus ##### +function PluginSetup() { + plugin=$1 + plugin_have_args=$(grep "^${plugin}_args=" $config | tail -n1) + plugin_version=$(grep "^${plugin}_desc=" /tmp/vdr-desc.cache | tail -n1 | sed -e "s/^${plugin}_desc=//" -e 's/[^)]*$//' -e 's/"//g' -e 's/#.*//') + [ -n "$plugin_version" ] || plugin_version="$plugin" + # Menu --------------------------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu '$plugin_version'" || return $false + SendCmd "menu.SetColorKeyText -green 'About' -blue 'Help'" || return $false + SendCmd "menu.SetColumns 14" || return $false + SendCmd "menu.EnableEvent keyOk keyGreen keyBlue close" || return $false + # List --------------------------------------------------------------------------------------------------------------------> + SendCmd "opt1=menu.AddNew EditListItem -selectname '${!plugin}' 'Status' on off" || return $false + if [ "$plugin" = "remote" ]; then + SendCmd "optA=menu.AddNew EditStrItem 'Remote Event' '$remote_event'" || return $false + fi + if [ -n "$plugin_have_args" ]; then + plugin_args=$(echo "$plugin_have_args" | sed -e "s/^${plugin}_args=//" -e 's/"//g' -e 's/#.*//') + SendCmd "opt2=menu.AddNew EditStrItem 'Argumente' '$plugin_args'" || return $false + else + SendCmd "menu.AddNew OsdItem -unselectable 'Argumente:\tPlugin kennt keine Argumente'" || return $false + fi + # <-------------------------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.show" || return $false + # <-------------------------------------------------------------------------------------------------------------------- Menu + + while true; do + SendCmd "menu.SleepEvent" || return $false + # keyOk + if IsEvent menu keyOk ; then + # plugin status + SendCmd "opt1.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + value="${reply6xx[1]}" + if [ "${!plugin}" != "$value" ]; then + DoLog "changing $plugin to $value" + sed -i $config -e "/^$plugin=/s/${!plugin}/$value/" + eval $plugin="$value" + fi + # plugin arguments + if [ -n "$plugin_have_args" ]; then + SendCmd "opt2.GetValue -quoted" || return $false + if [ "${reply5xx[0]}" = 500 ] || [ "${reply2xx[0]}" = 200 ]; then + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + if [ "$plugin_args" != "$value" ]; then + DoLog "changing arguments for $plugin to $value" + sed -i $config -e "/^${plugin}_args=/s/\"//g" -e "s?^${plugin}_args=$plugin_args?${plugin}_args=\"$value\"?" + fi + fi + fi + # remote_event for remote plugin + if [ "$plugin" = "remote" ]; then + SendCmd "optA.GetValue -quoted" || return $false + [ "${reply5xx[0]}" = 500 ] || return $false + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + if [ "$remote_event" != "$value" ]; then + DoLog "changing arguments for remote_event to $value" + sed -i $config -e "/^remote_event=/s?$remote_event?$value?" + fi + fi + # close the submenu + if [ "$vdrsetup_ok_ends" = "on" ]; then + SendCmd "menu.SendState osBack" || return $false +# SendCmd "delete menu" || return $false +# SendCmd "leavelocal" || return $false +# return $true + fi + fi + # keyGreen (About) + if IsEvent menu keyGreen ; then + desc=$(grep "^${plugin}_desc=" /tmp/vdr-desc.cache | tail -n1 | sed -e "s/^${plugin}_desc=\"${plugin} ([^)]*) - //" -e 's/"//g' -e 's/#.*//') + SendCmd "Message -seconds 5 \"$desc\"" || return $false + fi + # keyBlue (Help) + if IsEvent menu keyBlue ; then + SendCmd "Message -seconds 5 'Auswahl mit Links und Rechts, speichern mit Ok'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + +function PluginStatusList() { + # Menu ----------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu 'Plugin Status Liste'" || return $false + SendCmd "menu.SetColorKeyText -green 'About' -blue 'Help'" || return $false # -red 'Edit' + SendCmd "menu.SetColumns 24" || return $false + SendCmd "menu.EnableEvent keyOk keyGreen keyBlue close" || return $false # keyRed + # List ----------------------------------------------------------------------------------------------------> + SendCmd "Message -status 'Menu wird aufgebaut ...'" || return $false + files=$(ls "$VDRLIBDIR" | grep "^libvdr-" | grep "${plugin_api}$" | sed -e "s/^libvdr-//g" -e "s/.so.${plugin_api}$//g") + if [ -n "$files" ]; then + for p in $files ; do + plugin=$(echo $p | sed -e "s/-/_/g") # this is for streamdev-server ... + if [ -z "${!plugin}" ]; then + DoLog "creating $plugin=\"off\"" + echo "" >> $config + echo "# $plugin" >> $config + echo "${plugin}=\"off\"" >> $config + eval ${plugin}="off" + # plugin args + nl=0; (( nl=$(grep -n "^$p " /tmp/vdr-help.tmp | cut -f 1 -d ":") +1 )) + [ $nl -gt 1 ] && [ $(sed -n "${nl}p" /tmp/vdr-help.tmp | grep -c "^-") -gt 0 ] && echo "${plugin}_args=\"\"" >> $config + fi + SendCmd "$plugin=menu.AddNew EditListItem -selectname \"${!plugin}\" \"$p\" on off" || return $false + done + fi + SendCmd "Message -statusclear" || return $false + # <---------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "menu.Show" || return $false + # <---------------------------------------------------------------------------------------------------- Menu + + while true ; do + SendCmd "menu.SleepEvent" || return $false + # keyOk (save settings and clsoe the submenu) + if IsEvent menu keyOk ; then + if [ -n "$files" ]; then + SendCmd "Message 'Einstellungen werden gespeichert'" || return $false + for p in $files ; do + plugin=$(echo $p | sed -e "s/-/_/g") # this is for streamdev-server ... + SendCmd "${plugin}.GetValue -name" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "${!plugin}" != "${reply6xx[1]}" ]; then + DoLog "changing $plugin to ${reply6xx[1]}" + sed -i $config -e "/^${plugin}=/s/${!plugin}/${reply6xx[1]}/" + eval ${plugin}="${reply6xx[1]}" + fi + done + fi + # close the submenu + if [ "$vdrsetup_ok_ends" = "on" ]; then + SendCmd "menu.SendState osBack" || return $false +# SendCmd "delete menu" || return $false +# SendCmd "leavelocal" || return $false +# return $true + fi + fi + # keyRed (Edit) !!! Bug Inside !!! + if IsEvent menu keyRed ; then + SendCmd "menu.GetCurrent" + [ "${reply3xx[0]}" != 302 ] && return $false + PluginSetup "${reply3xx[2]}" || return $false + SendCmd "menu.Show" || return $false + fi + # keyGreen (About) + if IsEvent menu keyGreen ; then + SendCmd "menu.GetCurrent" + [ "${reply3xx[0]}" != 302 ] && return $false + desc=$(grep "^${reply3xx[2]}_desc=" /tmp/vdr-desc.cache | tail -n1 | sed -e "s/^${reply3xx[2]}_desc=\"${reply3xx[2]} ([^)]*) - //" -e 's/"//g' -e 's/#.*//') + SendCmd "Message -seconds 5 \"$desc\"" || return $false + fi + # keyBlue (Help) + if IsEvent menu keyBlue ; then + SendCmd "Message -seconds 5 'Auswahl mit Links und Rechts, speichern mit Ok'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + +function ListPlugins() { + # Menu ------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu 'Installierte Plugins'" || return $false + SendCmd "menu.SetColorKeyText -red 'Edit' -green 'Status' -blue 'Help'" || return $false + SendCmd "menu.SetColumns 4" || return $false + SendCmd "menu.EnableEvent keyOk keyRed keyGreen keyBlue close" || return $false + SendCmd "menu.EnableEvent key1 key2 key3 key4 key5 key6 key7 key8 key9 key0" || return $false + # List-------------------------------------------------------------------------------------------> + SendCmd "Message -status 'Menu wird aufgebaut ...'" || return $false + files=$(ls "$VDRLIBDIR" | grep "^libvdr-" | grep "${plugin_api}$" | sed -e "s/^libvdr-//g" -e "s/.so.${plugin_api}$//g") + if [ -n "$files" ]; then + n=0 + for p in $files ; do + ((n=n+1)) + plugin=$(echo $p | sed -e "s/-/_/g") # this is for streamdev-server ... + if [ -z "${!plugin}" ]; then + DoLog "creating $plugin=\"off\"" + echo "" >> $config + echo "# $plugin" >> $config + echo "${plugin}=\"off\"" >> $config + eval ${plugin}="off" + # plugin args + nl=0; (( nl=$(grep -n "^$p " /tmp/vdr-help.tmp | cut -f 1 -d ":") +1 )) + [ $nl -gt 1 ] && [ $(sed -n "${nl}p" /tmp/vdr-help.tmp | grep -c "^-") -gt 0 ] && echo "${plugin}_args=\"\"" >> $config + fi + plugin_desc="${plugin}_desc" + desc="${!plugin_desc}" + [ -n "$(echo $n | grep "^[0-9][0-9][0-9]$")" ] && N="$n" + [ -n "$(echo $n | grep "^[0-9][0-9]$")" ] && N=" $n" + [ -n "$(echo $n | grep "^[0-9]$")" ] && N=" $n" + SendCmd "$plugin=menu.AddNew OsdItem \"$N \t$desc\"" || return $false + done + fi + SendCmd "Message -statusclear" || return $false + # <------------------------------------------------------------------------------------------ List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "menu.Show" || return $false + # <------------------------------------------------------------------------------------------ Menu + + while true ; do + SendCmd "menu.SleepEvent" || return $false + # keyOk and keyRed + if IsEvent menu keyOk || IsEvent menu keyRed; then + SendCmd "menu.GetCurrent" + [ "${reply3xx[0]}" != 302 ] && return $false + PluginSetup "${reply3xx[2]}" || return $false + SendCmd "menu.Show" || return $false + fi + # keyGreen (Status) + if IsEvent menu keyGreen ; then + SendCmd "menu.GetCurrent" + [ "${reply3xx[0]}" != 302 ] && return $false + plugin="${reply3xx[2]}" + SendCmd "Message -seconds 5 'Status: ${!plugin}'" || return $false + fi + # keyBlue (Help) + if IsEvent menu keyBlue ; then + SendCmd "Message -seconds 5 'Auswahl mit OK oder Menue verlassen mit Exit'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + # keyNr + if [ $n -gt 0 ]; then + mykey=; + k1=; + for k1 in 0 1 2 3 4 5 6 7 8 9 ; do + if IsEvent menu key$k1 ; then + mykey=$k1 + [ $n -gt 9 ] || break + SendCmd "menu.SleepEvent -timeoutms $vdrsetup_key_timeout" || return $false + if IsEvent menu keyOk ; then break; fi + k2=; + for k2 in 0 1 2 3 4 5 6 7 8 9 ; do + if IsEvent menu key$k2 ; then + mykey=${k1}${k2} + [ $n -gt 99 ] || break + SendCmd "menu.SleepEvent -timeoutms $vdrsetup_key_timeout" || return $false + if IsEvent menu keyOk ; then break; fi + k3=; + for k3 in 0 1 2 3 4 5 6 7 8 9 ; do + if IsEvent menu key$k3 ; then + mykey=${k1}${k2}${k3} + break + fi + done + break + fi + done + break + fi + done + + if [ -n "$mykey" ]; then + [ $mykey -gt $n ] && mykey=$n + ((mykey=mykey-1)) # we do this, because 0 is the first item + [ $mykey -lt 0 ] && mykey=0 + SendCmd "menu.SetCurrent $mykey" || return $false +# SendCmd "menu.GetCurrent" +# [ "${reply3xx[0]}" != 302 ] && return $false +# PluginSetup "${reply3xx[2]}" || return $false + SendCmd "menu.Show" || return $false + fi + fi + done +} + +##### Wakeup Menu ##### +function Wakeup() { + shutdown="$VDRCONFDIR/shutdown.conf" + . $shutdown + + # settings +# WAKEUP_MODE=$(grep "^WAKEUP_MODE=" $shutdown | tail -n1 | sed -e "s/^WAKEUP_MODE=//" -e 's/"//g' -e 's/#.*//') + (( WAKEUP_MODE_T = $WAKEUP_MODE + 1 )) +# NVRAM_CONFIG=$(grep "^NVRAM_CONFIG=" $shutdown | tail -n1 | sed -e "s/^NVRAM_CONFIG=//" -e 's/"//g' -e 's/#.*//') +# NVRAM_IWNAME=$(grep "^NVRAM_IWNAME=" $shutdown | tail -n1 | sed -e "s/^NVRAM_IWNAME=//" -e 's/"//g' -e 's/#.*//') +# NVRAM_OPT=$(grep "^NVRAM_OPT=" $shutdown | tail -n1 | sed -e "s/^NVRAM_OPT=//" -e 's/"//g' -e 's/#.*//') +# NEED_REBOOT=$(grep "^NEED_REBOOT=" $shutdown | tail -n1 | sed -e "s/^NEED_REBOOT=//" -e 's/"//g' -e 's/#.*//') + (( NEED_REBOOT_T = $NEED_REBOOT + 1 )) +# LILO=$(grep "^LILO=" $shutdown | tail -n1 | sed -e "s/^LILO=//" -e 's/"//g' -e 's/#.*//') + (( LILO_T = $LILO + 1 )) + +# WAKEUP_BEFORE=$(grep "^WAKEUP_BEFORE=" $shutdown | tail -n1 | sed -e "s/^WAKEUP_BEFORE=//" -e 's/"//g' -e 's/#.*//') +# MAX_POWEROFF_TIME=$(grep "^MAX_POWEROFF_TIME=" $shutdown | tail -n1 | sed -e "s/^MAX_POWEROFF_TIME=//" -e 's/"//g' -e 's/#.*//') +# INTERVAL=$(grep "^INTERVAL=" $shutdown | tail -n1 | sed -e "s/^INTERVAL=//" -e 's/"//g' -e 's/#.*//') +# DREAMTIME=$(grep "^DREAMTIME=" $shutdown | tail -n1 | sed -e "s/^DREAMTIME=//" -e 's/"//g' -e 's/#.*//') +# MIN_WAKEUP_VAR=$(grep "^MIN_WAKEUP_VAR=" $shutdown | tail -n1 | sed -e "s/^MIN_WAKEUP_VAR=//" -e 's/"//g' -e 's/#.*//') +# WAITING_PERIOD=$(grep "^WAITING_PERIOD=" $shutdown | tail -n1 | sed -e "s/^WAITING_PERIOD=//" -e 's/"//g' -e 's/#.*//') + + # Menu ---------------------------------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu 'Wakeup'" || return $false + SendCmd "menu.SetColorKeyText -blue Help" || return $false + SendCmd "menu.SetColumns 24" || return $false + SendCmd "menu.EnableEvent keyOk close" || return $false + # List ---------------------------------------------------------------------------------------------------------------------------> + SendCmd "menu.AddNew OsdItem -unselectable '--- System ---'" || return $false + SendCmd "opt1=menu.AddNew EditListItem -select '$WAKEUP_MODE_T' 'Aufwach Methode' keine acpi nvram extension-board" || return $false + SendCmd "opt1.EnableEvent keyBlue" || return $false + SendCmd "opt2=menu.AddNew EditListItem -select '$NEED_REBOOT_T' 'Neustart erforderlich' nein ja immer" || return $false + SendCmd "opt2.EnableEvent keyBlue" || return $false + SendCmd "opt3=menu.AddNew EditListItem -select '$LILO_T' 'Bootmanger' grub lilo" || return $false + SendCmd "opt3.EnableEvent keyBlue" || return $false + SendCmd "menu.AddNew OsdItem -unselectable '--- Nvram ---'" || return $false + SendCmd "opt4=menu.AddNew EditStrItem 'Konfiguration' '$NVRAM_CONFIG'" || return $false + SendCmd "opt4.EnableEvent keyBlue" || return $false + SendCmd "opt5=menu.AddNew EditStrItem 'IW Name' '$NVRAM_IWNAME'" || return $false + SendCmd "opt5.EnableEvent keyBlue" || return $false + SendCmd "opt6=menu.AddNew EditStrItem 'Optionen' '$NVRAM_OPT'" || return $false + SendCmd "opt6.EnableEvent keyBlue" || return $false + SendCmd "menu.AddNew OsdItem -unselectable '--- Nur fuer Experten ---'" || return $false + SendCmd "optA=menu.AddNew EditIntItem 'Vorlauf in Minuten' '$WAKEUP_BEFORE'" || return $false + SendCmd "optA.EnableEvent keyBlue" || return $false + SendCmd "optB=menu.AddNew EditStrItem 'Maximale Auszeit' '$MAX_POWEROFF_TIME'" || return $false + SendCmd "optB.EnableEvent keyBlue" || return $false + SendCmd "optC=menu.AddNew EditIntItem -max 31 'Interval in Tagen' '$INTERVAL'" || return $false + SendCmd "optC.EnableEvent keyBlue" || return $false + SendCmd "optD=menu.AddNew EditStrItem 'Wunsch Aufwachzeit' '$DREAMTIME'" || return $false + SendCmd "optD.EnableEvent keyBlue" || return $false + SendCmd "optE=menu.AddNew EditIntItem -max 3 'Aktion' '$MIN_WAKEUP_VAR'" || return $false + SendCmd "optE.EnableEvent keyBlue" || return $false + SendCmd "optF=menu.AddNew EditIntItem 'Warte Zeit' '$WAITING_PERIOD'" || return $false + SendCmd "optF.EnableEvent keyBlue" || return $false + # <---------------------------------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.show" || return $false + # <---------------------------------------------------------------------------------------------------------------------------- Menu + + while true; do + SendCmd "menu.SleepEvent" || return $false + # keyOk + if IsEvent menu keyOk ; then + # WAKEUP_MODE + SendCmd "opt1.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$WAKEUP_MODE_T" != "${reply6xx[1]}" ]; then + (( WAKEUP_MODE_N = ${reply6xx[1]} - 1 )) + (( WAKEUP_MODE = $WAKEUP_MODE_T - 1 )) + DoLog "changing WAKEUP_MODE to $WAKEUP_MODE_N" + sed -i $shutdown -e "/^WAKEUP_MODE=/s/$WAKEUP_MODE/$WAKEUP_MODE_N/" + fi + # NEED_REBOOT + SendCmd "opt2.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$NEED_REBOOT_T" != "${reply6xx[1]}" ]; then + (( NEED_REBOOT_N = ${reply6xx[1]} - 1 )) + (( NEED_REBOOT = $NEED_REBOOT_T - 1 )) + DoLog "changing NEED_REBOOT to $NEED_REBOOT_N" + sed -i $shutdown -e "/^NEED_REBOOT=/s/$NEED_REBOOT/$NEED_REBOOT_N/" + fi + # LILO + SendCmd "opt3.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$LILO_T" != "${reply6xx[1]}" ]; then + (( LILO_N = ${reply6xx[1]} - 1 )) + (( LILO = $LILO_T - 1 )) + DoLog "changing LILO to $LILO_N" + sed -i $shutdown -e "/^LILO=/s/$LILO/$LILO_N/" + fi + # NVRAM_CONFIG + SendCmd "opt4.GetValue -quoted" || return $false + if [ "${reply5xx[0]}" = 500 ] || [ "${reply2xx[0]}" = 200 ]; then + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + if [ "$NVRAM_CONFIG" != "$value" ]; then + if [ -f "$value" ]; then + DoLog "changing NVRAM_CONFIG to $value" + sed -i $shutdown -e "/^NVRAM_CONFIG=/s/\"//g" -e "s?^NVRAM_CONFIG=$NVRAM_CONFIG?NVRAM_CONFIG=\"$value\"?" + else + DoLog "error: file \"$value\" for NVRAM_CONFIG does not exist" + fi + fi + fi + # NVRAM_IWNAME + SendCmd "opt5.GetValue -quoted" || return $false + if [ "${reply5xx[0]}" = 500 ] || [ "${reply2xx[0]}" = 200 ]; then + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + if [ "$NVRAM_IWNAME" != "$value" ]; then + DoLog "changing NVRAM_IWNAME to $value" + sed -i $shutdown -e "/^NVRAM_IWNAME=/s/\"//g" -e "s?^NVRAM_IWNAME=$NVRAM_IWNAME?NVRAM_IWNAME=\"$value\"?" + fi + fi + # NVRAM_OPT + SendCmd "opt6.GetValue -quoted" || return $false + if [ "${reply5xx[0]}" = 500 ] || [ "${reply2xx[0]}" = 200 ]; then + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + if [ "$NVRAM_OPT" != "$value" ]; then + DoLog "changing NVRAM_OPT to $value" + sed -i $shutdown -e "/^NVRAM_OPT=/s/\"//g" -e "s?^NVRAM_OPT=$NVRAM_OPT?NVRAM_OPT=\"$value\"?" + fi + fi + # WAKEUP_BEFORE + SendCmd "optA.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$WAKEUP_BEFORE" != "${reply6xx[1]}" ]; then + DoLog "changing WAKEUP_BEFORE to ${reply6xx[1]}" + sed -i $shutdown -e "/^WAKEUP_BEFORE=/s/$WAKEUP_BEFORE/${reply6xx[1]}/" + fi + # MAX_POWEROFF_TIME + SendCmd "optB.GetValue -quoted" || return $false + if [ "${reply5xx[0]}" = 500 ] || [ "${reply2xx[0]}" = 200 ]; then + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + if [ "$MAX_POWEROFF_TIME" != "$value" ]; then + DoLog "changing MAX_POWEROFF_TIME to $value" + sed -i $shutdown -e "/^MAX_POWEROFF_TIME=/s/\"//g" -e "s?^MAX_POWEROFF_TIME=$MAX_POWEROFF_TIME?MAX_POWEROFF_TIME=\"$value\"?" + fi + fi + # INTERVAL + SendCmd "optC.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$INTERVAL" != "${reply6xx[1]}" ]; then + DoLog "changing INTERVAL to ${reply6xx[1]}" + sed -i $shutdown -e "/^INTERVAL=/s/$INTERVAL/${reply6xx[1]}/" + fi + # DREAMTIME + SendCmd "optD.GetValue -quoted" || return $false + if [ "${reply5xx[0]}" = 500 ] || [ "${reply2xx[0]}" = 200 ]; then + value=$(echo " ${reply5xx[1]}" | sed -e 's/^ //g' -e 's/\\r//g') + if [ "$DREAMTIME" != "$value" ]; then + [ -n "$(echo $value | grep '^[0-9]:[0-9][0-9]$')" ] && value="0${value}" + if [ -n "$(echo $value | grep '^[0-9][0-9]:[0-9][0-9]$')" ]; then + DoLog "changing DREAMTIME to $value" + sed -i $shutdown -e "/^DREAMTIME=/s/\"//g" -e "s?^DREAMTIME=$DREAMTIME?DREAMTIME=\"$value\"?" + else + DoLog "error: value \"$value\" for DREAMTIME has bad format" + fi + fi + fi + # MIN_WAKEUP_VAR + SendCmd "optE.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$MIN_WAKEUP_VAR" != "${reply6xx[1]}" ]; then + DoLog "changing MIN_WAKEUP_VAR to ${reply6xx[1]}" + sed -i $shutdown -e "/^MIN_WAKEUP_VAR=/s/$MIN_WAKEUP_VAR/${reply6xx[1]}/" + fi + # WAITING_PERIOD + SendCmd "optF.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "$WAITING_PERIOD" != "${reply6xx[1]}" ]; then + DoLog "changing WAITING_PERIOD to ${reply6xx[1]}" + sed -i $shutdown -e "/^WAITING_PERIOD=/s/$WAITING_PERIOD/${reply6xx[1]}/" + fi + # close the submenu + if [ "$vdrsetup_ok_ends" = "on" ]; then + SendCmd "menu.SendState osBack" || return $false +# SendCmd "delete menu" || return $false +# SendCmd "leavelocal" || return $false +# return $true + fi + fi + # keyBlue (Help) + if IsEvent opt1 keyBlue ; then + SendCmd "Message -seconds 5 'Optionen: keine, acpi, nvram, extension-board'" || return $false + fi + if IsEvent opt2 keyBlue ; then + SendCmd "Message -seconds 5 'Optionen: nein, ja, immer'" || return $false + fi + if IsEvent opt3 keyBlue ; then + SendCmd "Message -seconds 5 'Optionen: grub, lilo'" || return $false + fi + if IsEvent opt4 keyBlue ; then + SendCmd "Message -seconds 5 'Pfad zur nvram-wakeup Konfiguration'" || return $false + fi + if IsEvent opt5 keyBlue ; then + SendCmd "Message -seconds 5 'Specify the iw (infowriter) name (e.g: gigabyte_5aa)'" || return $false + fi + if IsEvent opt6 keyBlue ; then + SendCmd "Message -seconds 5 'Versuche \"nvram-wakeup --help\" auf einem Terminal'" || return $false + fi + if IsEvent optA keyBlue ; then + SendCmd "Message -seconds 5 'Optionen: 0, MAXIMAL, INTERVAL oder Zeit in Minuten'" || return $false + fi + if IsEvent optB keyBlue ; then + SendCmd "Message -seconds 5 'Gebe den Interval in Tagen an'" || return $false + fi + if IsEvent optC keyBlue ; then + SendCmd "Message -seconds 5 'Aufwachzeit in Stunden:Minuten zB 03:00'" || return $false + fi + if IsEvent optD keyBlue ; then + SendCmd "Message -seconds 5 'Aktion wenn \$MIN_WAKEUPTIME -gt \$WAKEUPTIME'" || return $false + fi + if IsEvent optE keyBlue ; then + SendCmd "Message -seconds 5 'Wartezeit bis zum erneuten Shutdown in Minuten'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + +##### DVB-Modul Menu ##### +function DVBModul() { + # dvb_ttpci parameter description + debug_desc="debug level (bitmask, default 0)" + vidmode_desc="analog video out: 0 off, 1 CVBS+RGB (default), 2 CVBS+YC, 3 YC" + pids_off_desc="clear video/audio/PCR PID filters when demux is closed" + adac_desc="audio DAC type: 0 TI, 1 CRYSTAL, 2 MSP (use if autodetection fails)" + hw_sections_desc="0 use software section filter, 1 use hardware" + rgb_on_desc="For Siemens DVB-C cards only: Enable RGB control signal on SCART pin 16 to switch SCART video mode from CVBS to RGB" + volume_desc="initial volume: default 255 (range 0-255)" + budgetpatch_desc="use budget-patch hardware modification: default 0 (0 no, 1 autodetect, 2 always)" + wss_cfg_4_3_desc="WSS 4:3 - default 0x4008 - bit 15: disable, 14: burst mode, 13..0: wss data" + wss_cfg_16_9_desc="WSS 16:9 - default 0x0007 - bit 15: disable, 14: burst mode, 13..0: wss data" + tv_standard_desc="TV standard: 0 PAL (default), 1 NTSC" + + +# { 0x7, "16:9" }, +# { 0x8, "4:3" }, +# { 0x1, "L14:9" }, +# { 0xb, "L16:9" }, +# { 0xd, "L>16:9" } + + + TT_PARAMETERS="options dvb_ttpci" + if [ -d /sys/module/dvb_ttpci/parameters ]; then + for p in $(ls /sys/module/dvb_ttpci/parameters); do + eval ${p}=`cat /sys/module/dvb_ttpci/parameters/${p}` + done + fi + + # defaults and some tests + vidmode=$(echo $vidmode | grep '^[0,1,2,3]$') + [ -n "$vidmode" ] || vidmode=1 + [ "$vidmode" = "0" ] && vidmode=4 + tv_standard=$(echo $tv_standard | grep '^[0,1]$') + [ -n "$tv_standard" ] || tv_standard=0 + (( tv_standard = $tv_standard + 1 )) + wss_cfg_16_9=$(echo $wss_cfg_16_9 | grep '^[[:digit:]]*$') + [ -n "$wss_cfg_16_9" ] || wss_cfg_16_9=7 + wss_cfg_4_3=$(echo $wss_cfg_4_3 | grep '^[[:digit:]]*$') + [ -n "$wss_cfg_4_3" ] || wss_cfg_4_3=16392 + debug=$(echo $debug | grep '^[[:digit:]]*$') + [ -n "$debug" ] || debug=0 + ir_inversion=$(echo $ir_inversion | cut -f1 -d ',' | grep '^[0,1]$') + [ -n "$ir_inversion" ] || ir_inversion=0 + (( ir_inversion = $ir_inversion + 1 )) + volume=$(echo $volume | grep '^[[:digit:]]*$') + [ -n "$volume" ] || volume=255 + + + SendCmd "enterlocal" || return $false # Preserve global variable space, so we can re-use 'menu' + SendCmd "menu=New Menu 'DVB Module'" || return $false + SendCmd "menu.SetColorKeyText -blue Help" || return $false + SendCmd "menu.SetColumns 24" || return $false + SendCmd "menu.EnableEvent keyOk close" || return $false + # List -> + SendCmd "menu.AddNew OsdItem -unselectable '--- Video ---'" || return $false + SendCmd "opt1=menu.AddNew EditListItem -select '$vidmode' 'Video Ausgang' RGB/Composite S-Video/Composite S-Video off" || return $false + SendCmd "opt1.EnableEvent keyBlue" || return $false + SendCmd "opt2=menu.AddNew EditListItem -select '$tv_standard' 'TV Standard' PAL NTSC" || return $false + SendCmd "opt2.EnableEvent keyBlue" || return $false + SendCmd "opt3=menu.AddNew EditIntItem 'WSS 16:9' '$wss_cfg_16_9'" || return $false +# SendCmd "opt3=menu.AddNew EditListItem -select '$wss_cfg_16_9' 'WSS 16:9' 16:9 1 2 " || return $false + SendCmd "opt3.EnableEvent keyBlue" || return $false + SendCmd "opt4=menu.AddNew EditIntItem 'WSS 4:3' '$wss_cfg_4_3'" || return $false + SendCmd "opt4.EnableEvent keyBlue" || return $false + SendCmd "menu.AddNew OsdItem -unselectable ''" || return $false + SendCmd "menu.AddNew OsdItem -unselectable '--- Sonstiges ---'" || return $false + SendCmd "opt5=menu.AddNew EditIntItem 'Debug Level' '$debug'" || return $false + SendCmd "opt5.EnableEvent keyBlue" || return $false + SendCmd "opt6=menu.AddNew EditListItem -select '$ir_inversion' 'IR invertieren' off on" || return $false + SendCmd "opt6.EnableEvent keyBlue" || return $false + SendCmd "opt7=menu.AddNew EditIntItem -max 255 'Lautstaerke' '$volume'" || return $false + SendCmd "opt7.EnableEvent keyBlue" || return $false + # <- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.show" || return $false + + while true; do + SendCmd "menu.SleepEvent" || return $false + # keyOk + if IsEvent menu keyOk ; then + # vidmode + SendCmd "opt1.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "1" != "${reply6xx[1]}" ]; then + vidmode="${reply6xx[1]}" + [ "$vidmode" = "4" ] && vidmode=0 + DoLog "adding vidmode=${reply6xx[1]} to TT_PARAMETERS" + TT_PARAMETERS="$TT_PARAMETERS vidmode=${reply6xx[1]}" + fi + # tv_standard + SendCmd "opt2.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "1" != "${reply6xx[1]}" ]; then + (( tv_standard = ${reply6xx[1]} - 1 )) + DoLog "adding tv_standard=$tv_standard to TT_PARAMETERS" + TT_PARAMETERS="$TT_PARAMETERS tv_standard=$tv_standard" + fi + # wss_cfg_16_9 + SendCmd "opt3.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "7" != "${reply6xx[1]}" ]; then + DoLog "adding wss_cfg_16_9=${reply6xx[1]} to TT_PARAMETERS" + TT_PARAMETERS="$TT_PARAMETERS wss_cfg_16_9=${reply6xx[1]}" + fi + # wss_cfg_4_3 + SendCmd "opt4.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "16392" != "${reply6xx[1]}" ]; then + DoLog "adding wss_cfg_4_3=${reply6xx[1]} to TT_PARAMETERS" + TT_PARAMETERS="$TT_PARAMETERS wss_cfg_4_3=${reply6xx[1]}" + fi + # debug + SendCmd "opt5.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "0" != "${reply6xx[1]}" ]; then + DoLog "adding debug=${reply6xx[1]} to TT_PARAMETERS" + TT_PARAMETERS="$TT_PARAMETERS debug=${reply6xx[1]}" + fi + # ir_inversion + SendCmd "opt6.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "1" != "${reply6xx[1]}" ]; then + (( ir_inversion = ${reply6xx[1]} - 1 )) + DoLog "adding tv_standard=$ir_inversion to TT_PARAMETERS" + TT_PARAMETERS="$TT_PARAMETERS tv_standard=$ir_inversion" + fi + # volume + SendCmd "opt7.GetValue" || return $false + [ "${reply6xx[0]}" != 600 ] && return $false + if [ "255" != "${reply6xx[1]}" ]; then + DoLog "adding volume=${reply6xx[1]} to TT_PARAMETERS" + TT_PARAMETERS="$TT_PARAMETERS volume=${reply6xx[1]}" + fi + + # write config to /etc/modprobe.d/dvb + echo $TT_PARAMETERS > /etc/modprobe.d/dvb + + # close the submenu + if [ "$vdrsetup_ok_ends" = "on" ]; then + SendCmd "menu.SendState osBack" || return $false +# SendCmd "delete menu" || return $false +# SendCmd "leavelocal" || return $false +# return $true + fi + fi + # keyBlue (Help) + if IsEvent opt1 keyBlue ; then + SendCmd "Message -seconds 5 'Video Modus des J2 - default RGB'" || return $false + fi + if IsEvent opt2 keyBlue ; then + SendCmd "Message -seconds 5 'TV Standard - default Pal'" || return $false + fi + if IsEvent opt3 keyBlue ; then + SendCmd "Message -seconds 5 'WSS 16/9 - default 7'" || return $false + fi + if IsEvent opt4 keyBlue ; then + SendCmd "Message -seconds 5 'WSS 4/3 - default 16392'" || return $false + fi + if IsEvent opt5 keyBlue ; then + SendCmd "Message -seconds 5 'Debug Level - default 0'" || return $false + fi + if IsEvent opt6 keyBlue ; then + SendCmd "Message -seconds 5 'IR-Signal invertieren - default off'" || return $false + fi + if IsEvent opt7 keyBlue ; then + SendCmd "Message -seconds 5 'Start Lautstaerke von 0-255 - default 255'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + + +##### x-vdr ############# +function InstallPlugins { + [ "$have_xvdr" = "on" ] || return $false + xdir=/usr/local/src/x-vdr + cmd=$1 + # Menu --------------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + if [ "$cmd" = "installed" ]; then + SendCmd "menu=New Menu 'Installierte Plugins'" || return $false + SendCmd "menu.SetColorKeyText -red 'Edit' -green 'Reinstall' -yellow 'Remove' -blue 'Help'" || return $false + SendCmd "menu.SetColumns 4" || return $false + elif [ "$cmd" = "standby" ]; then + SendCmd "menu=New Menu 'Installierbare Plugins'" || return $false + SendCmd "menu.SetColorKeyText -red 'Edit' -green 'Install' -blue 'Help'" || return $false + SendCmd "menu.SetColumns 4 16" || return $false + else + SendCmd "menu=New Menu 'Alle Plugins'" || return $false + SendCmd "menu.SetColorKeyText -red 'Edit' -green 'Install' -yellow 'Remove' -blue 'Help'" || return $false + SendCmd "menu.SetColumns 4 16" || return $false + fi + + SendCmd "menu.EnableEvent keyOk keyRed keyGreen keyYellow keyBlue close" || return $false + SendCmd "menu.EnableEvent key1 key2 key3 key4 key5 key6 key7 key8 key9 key0" || return $false + # List---------------------------------------------------------------------------------------------------------> + SendCmd "Message -status 'Menu wird aufgebaut ...'" || return $false + plugs=$(ls -B "$xdir/plugins") + if [ -n "$plugs" ]; then + n=0 + for plug in $plugs ; do +# eval local $(grep -r -m1 "^${plug}=" $xdir/setup.conf) # status +# if [ "x${!plug}" = "xon" ] || [ "x${!plug}" = "xoff" ]; then +# fi + ins_status="nicht installiert" + if [ "$plug" = "streamdev" ]; then + [ -f "${VDRLIBDIR}/libvdr-streamdev-server.so.${plugin_api}" ] && ins_status="installiert" + [ -f "${VDRLIBDIR}/libvdr-streamdev-client.so.${plugin_api}" ] && ins_status="installiert" + plugin_desc="streamdev_server_desc" + desc="${!plugin_desc}" + [ -n "$desc" ] || { + plugin_desc="streamdev_client_desc" + desc="${!plugin_desc}" + } + [ -n "$desc" ] || desc="$plug" + else + [ -f "${VDRLIBDIR}/libvdr-${plug}.so.${plugin_api}" ] && ins_status="installiert" + plugin_desc="${plug}_desc" + desc="${!plugin_desc}" + [ -n "$desc" ] || desc="$plug" + fi + if [ "$cmd" = "installed" ]; then + if [ "$ins_status" = "installiert" ]; then + ((n=n+1)) + [ -n "$(echo $n | grep "^[0-9][0-9][0-9]$")" ] && N="$n" + [ -n "$(echo $n | grep "^[0-9][0-9]$")" ] && N=" $n" + [ -n "$(echo $n | grep "^[0-9]$")" ] && N=" $n" + SendCmd "$plug=menu.AddNew OsdItem '$N \t$desc'" || return $false + fi + elif [ "$cmd" = "standby" ]; then + if [ "$ins_status" != "installiert" ]; then + ((n=n+1)) + [ -n "$(echo $n | grep "^[0-9][0-9][0-9]$")" ] && N="$n" + [ -n "$(echo $n | grep "^[0-9][0-9]$")" ] && N=" $n" + [ -n "$(echo $n | grep "^[0-9]$")" ] && N=" $n" + SendCmd "$plug=menu.AddNew OsdItem '$N \t$plug \t$ins_status'" || return $false + fi + else # all + ((n=n+1)) + [ -n "$(echo $n | grep "^[0-9][0-9][0-9]$")" ] && N="$n" + [ -n "$(echo $n | grep "^[0-9][0-9]$")" ] && N=" $n" + [ -n "$(echo $n | grep "^[0-9]$")" ] && N=" $n" + SendCmd "$plug=menu.AddNew OsdItem '$N \t$plug \t$ins_status'" || return $false + fi + done + fi + SendCmd "Message -statusclear" || return $false + # <-------------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "menu.Show" || return $false + # <-------------------------------------------------------------------------------------------------------- Menu + + while true ; do + SendCmd "menu.SleepEvent" || return $false + # keyOk and keyRed + # if IsEvent menu keyOk || IsEvent menu keyRed; then + # keyRed (Edit) + if IsEvent menu keyRed; then + SendCmd "menu.GetCurrent" + [ "${reply3xx[0]}" != 302 ] && return $false + PluginSetup "${reply3xx[2]}" || return $false + SendCmd "menu.Show" || return $false + fi + # keyGreen (Install) + if IsEvent menu keyGreen ; then + SendCmd "menu.GetCurrent" + [ "${reply3xx[0]}" != 302 ] && return $false + n="${reply3xx[1]}"; N=; + [ -n "$(echo $n | grep "^[0-9][0-9][0-9]$")" ] && N="$n" + [ -n "$(echo $n | grep "^[0-9][0-9]$")" ] && N=" $n" + [ -n "$(echo $n | grep "^[0-9]$")" ] && N=" $n" + plugin="${reply3xx[2]}" + if [ "$cmd" = "installed" ]; then + SendCmd "Message -warn -seconds 10 '$plugin neu installieren?'" || return $false + else + SendCmd "Message -warn -seconds 10 '$plugin installieren?'" || return $false + fi + if IsEvent Message keyOk ; then + SendCmd "Message -status 'Installiere $plugin ...'" || return $false + cd $xdir/plugins/$plugin + plugin_status=$(./plugin.sh -s) + case $plugin_status in + 0 ) ./plugin.sh -m && { + $VDRPRG --version | sed -e 's/\(^[^ ]*\)\(.*$\)/\1_desc="\1\2"/' -e '/^streamdev/s/-/_/' -e 's/^\[.*//' | sort > /tmp/vdr-desc.cache + . /tmp/vdr-desc.cache + } ;; + * ) ./plugin.sh -r ;; + esac + SendCmd "Message -statusclear" || return $false + SendCmd "$plugin.SETTEXT '$N \t$plugin \tinstalliert'" + SendCmd "menu.Show" || return $false + fi + fi + # keyYellow (Remove) + if [ "$cmd" != "standby" ]; then + if IsEvent menu keyYellow ; then + SendCmd "menu.GetCurrent" + [ "${reply3xx[0]}" != 302 ] && return $false + n="${reply3xx[1]}"; N=; + [ -n "$(echo $n | grep "^[0-9][0-9][0-9]$")" ] && N="$n" + [ -n "$(echo $n | grep "^[0-9][0-9]$")" ] && N=" $n" + [ -n "$(echo $n | grep "^[0-9]$")" ] && N=" $n" + plugin="${reply3xx[2]}" + cd $xdir/plugins/$plugin + plugin_status=$(./plugin.sh -s) + case $plugin_status in + 0 ) SendCmd "Message -seconds 5 '$plugin ist nicht installiert'" || return $false ;; + * ) SendCmd "Message -warn -seconds 10 'Soll $plugin entfernt werden?'" || return $false + if IsEvent Message keyOk ; then + SendCmd "Message -status 'Entferne $plugin ...'" || return $false + ./plugin.sh -c + SendCmd "Message -statusclear" || return $false + SendCmd "$plugin.SETTEXT '$N \t$plugin'" + SendCmd "menu.Show" || return $false + fi ;; + esac + fi + fi + # keyBlue (Help) + if IsEvent menu keyBlue ; then + SendCmd "Message -seconds 5 'Auswahl mit Farbtasten oder Menue verlassen mit Exit'" || return $false + fi + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + # keyNr + if [ $n -gt 0 ]; then + mykey=; + k1=; + for k1 in 0 1 2 3 4 5 6 7 8 9 ; do + if IsEvent menu key$k1 ; then + mykey=$k1 + [ $n -gt 9 ] || break + SendCmd "menu.SleepEvent -timeoutms $vdrsetup_key_timeout" || return $false + if IsEvent menu keyOk ; then break; fi + k2=; + for k2 in 0 1 2 3 4 5 6 7 8 9 ; do + if IsEvent menu key$k2 ; then + mykey=${k1}${k2} + [ $n -gt 99 ] || break + SendCmd "menu.SleepEvent -timeoutms $vdrsetup_key_timeout" || return $false + if IsEvent menu keyOk ; then break; fi + k3=; + for k3 in 0 1 2 3 4 5 6 7 8 9 ; do + if IsEvent menu key$k3 ; then + mykey=${k1}${k2}${k3} + break + fi + done + break + fi + done + break + fi + done + + if [ -n "$mykey" ]; then + [ $mykey -gt $n ] && mykey=$n + ((mykey=mykey-1)) # we do this, because 0 is the first item + [ $mykey -lt 0 ] && mykey=0 + SendCmd "menu.SetCurrent $mykey" || return $false +# SendCmd "menu.GetCurrent" +# [ "${reply3xx[0]}" != 302 ] && return $false +# PluginSetup "${reply3xx[2]}" || return $false + SendCmd "menu.Show" || return $false + fi + fi + done +} + +function BackupVdrConf() { + [ "$have_xvdr" = "on" ] || return $false + xdir=/usr/local/src/x-vdr + SendCmd "Message -status 'Backup wird erstellt ...'" || return $false + BACKUPDIR="/tmp/vdr-backup" + BACKUPPATH="$xdir/backup" + [ ! -d $BACKUPPATH ] && mkdir -p $BACKUPPATH + [ -d $BACKUPDIR ] && rm -rf $BACKUPDIR + mkdir -p $BACKUPDIR + cp -pfR --parents $VDRCONFDIR $BACKUPDIR + cp -pfR --parents $VDRSCRIPTDIR $BACKUPDIR + cp -pf --parents $VDRBINDIR/runvdr $BACKUPDIR + cp -pf --parents /etc/default/vdr $BACKUPDIR + cp -pf --parents /etc/init.d/vdr $BACKUPDIR + BACKUPFILE=$BACKUPPATH/`date +%y%m%d-%H%M`-vdr-conf.tar.gz + cd $BACKUPDIR + tar -zcf $BACKUPFILE * && SendCmd "Message -seconds 5 'Backup erstellt'" || return $false + cd .. + rm -rf $BACKUPDIR + SendCmd "Message -statusclear" || return $false +} + +function Xvdr() { + [ "$have_xvdr" = "on" ] || return $false + xdir=/usr/local/src/x-vdr + # Menu ---------------------------------------------------------------------------------------------------------------> + SendCmd "enterlocal" || return $false + SendCmd "menu=New Menu 'x-vdr'" || return $false + SendCmd "menu.SetColorKeyText -red 'Reboot' -green 'Shutdown' -yellow 'VDR Restart' -blue 'Help'" || return $false + SendCmd "menu.SetColumns 1 2" || return $false + SendCmd "menu.EnableEvent keyRed keyGreen keyYellow close" || return $false + SendCmd "menu.EnableEvent key1 key2 key3 key4 key5 key6 key7 key8 key9 key0" || return $false + # List ---------------------------------------------------------------------------------------------------------------> + SendCmd "menu.AddNew OsdItem -unselectable '--- Plugins ---'" || return $false + SendCmd "optP1=menu.AddNew OsdItem '\t1\tAlle Plugins'" || return $false + SendCmd "optP1.EnableEvent keyOk keyBlue" || return $false + SendCmd "optP2=menu.AddNew OsdItem '\t2\tInstallierte Plugins'" || return $false + SendCmd "optP2.EnableEvent keyOk keyBlue" || return $false + SendCmd "optP3=menu.AddNew OsdItem '\t3\tInstallierbare Plugins'" || return $false + SendCmd "optP3.EnableEvent keyOk keyBlue" + + SendCmd "menu.AddNew OsdItem -unselectable '--- Backup ---'" || return $false + SendCmd "optB1=menu.AddNew OsdItem '\t3\tKonfiguration und Skripte'" || return $false + SendCmd "optB1.EnableEvent keyOk keyBlue" || return $false + # <--------------------------------------------------------------------------------------------------------------- List + SendCmd "_focus.addsubmenu menu" || return $false + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.show" || return $false + # <--------------------------------------------------------------------------------------------------------------- Menu + + while true; do + SendCmd "menu.SleepEvent" || return $false + # keyOk (SubMenu InstallPlugins) + if IsEvent optP1 keyOk || IsEvent menu key1 ; then + InstallPlugins all || return $false + SendCmd "menu.Show" || return $false + fi + if IsEvent optP2 keyOk || IsEvent menu key2 ; then + InstallPlugins installed || return $false + SendCmd "menu.Show" || return $false + fi + if IsEvent optP3 keyOk || IsEvent menu key2 ; then + InstallPlugins standby || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (Backup) + if IsEvent optB1 keyOk || IsEvent menu key3 ; then + BackupVdrConf || return $false + SendCmd "menu.Show" || return $false + fi + # keyRed (Reboot) + if IsEvent menu keyRed ; then + SendCmd "Message -warn -seconds 10 'System jetzt neustarten?'" || return $false + if IsEvent Message keyOk ; then + SendCmd "Message 'System wird neugestartet...'" || return $false + SendCmd "menu.SendState osEnd" || return $false + shutdown -r now + fi + fi + # keyGreen (Shutdown) + if IsEvent menu keyGreen ; then + SendCmd "Message -warn -seconds 10 'System jetzt ausschalten?'" || return $false + if IsEvent Message keyOk ; then +# SendCmd "Message 'System wird ausgeschaltet...'" || return $false + SendCmd "menu.SendState osEnd" || return $false +# shutdown -h now + /usr/bin/svdrpsend.pl HITK Power + return $true + fi + fi + # keyYellow (Restart) + if IsEvent menu keyYellow ; then + SendCmd "Message -warn -seconds 10 'VDR jetzt neustarten?'" || return $false + if IsEvent Message keyOk ; then + SendCmd "Message 'VDR wird neugestartet...'" || return $false + SendCmd "menu.SendState osEnd" || return $false + sleep 1 + killall -9 vdr + fi + fi + # keyBlue (Help) + if IsEvent optP1 keyBlue ; then + SendCmd "Message -seconds 5 'Zeigt alle verfuegbaren Plugins'" || return $false + fi + if IsEvent optP2 keyBlue ; then + SendCmd "Message -seconds 5 'Zeigt nur die installierten Plugins'" || return $false + fi + if IsEvent optP3 keyBlue ; then + SendCmd "Message -seconds 5 'Zeigt nur die nicht installierten Plugins'" || return $false + fi + if IsEvent optB1 keyBlue ; then + SendCmd "Message -seconds 5 'Erstellt ein Backup von Konfiguration und Skripten'" || return $false + fi + + # close the submenu + if IsEvent menu close ; then + SendCmd "delete menu" || return $false + SendCmd "leavelocal" || return $false + return $true + fi + done +} + + +##### Main Menu ##### +function MainMenu() { + # Menu ---------------------------------------------------------------------------------------------------------------> + SendCmd "menu=New Menu 'vdrsetup'" || return $false + SendCmd "menu.SetColorKeyText -red 'Reboot' -green 'Shutdown' -yellow 'VDR Restart' -blue 'Help'" || return $false + SendCmd "menu.SetColumns 1 2" || return $false + SendCmd "menu.EnableEvent keyRed keyGreen keyYellow keyBlue close" || return $false + SendCmd "menu.EnableEvent key1 key2 key3 key4 key5 key6 key7 key8 key9 key0" || return $false + # List ---------------------------------------------------------------------------------------------------------------> + SendCmd "opt1=menu.AddNew OsdItem '\t1\tVDR Einstellungen'" || return $false + SendCmd "opt1.EnableEvent keyOk" || return $false + SendCmd "opt2=menu.AddNew OsdItem '\t2\tInstallierte Plugins'" || return $false + SendCmd "opt2.EnableEvent keyOk" || return $false + SendCmd "opt3=menu.AddNew OsdItem '\t3\tPlugin Status Liste'" || return $false + SendCmd "opt3.EnableEvent keyOk" || return $false + SendCmd "opt4=menu.AddNew OsdItem '\t4\tSystemstart'" || return $false + SendCmd "opt4.EnableEvent keyOk" || return $false + SendCmd "opt5=menu.AddNew OsdItem '\t5\tWakeup'" || return $false + SendCmd "opt5.EnableEvent keyOk" || return $false + SendCmd "opt6=menu.AddNew OsdItem '\t6\tSkript Intern'" || return $false + SendCmd "opt6.EnableEvent keyOk" || return $false + SendCmd "opt7=menu.AddNew OsdItem '\t7\tDVB Modul'" || return $false + SendCmd "opt7.EnableEvent keyOk" || return $false + if [ "$have_xvdr" = "on" ]; then + SendCmd "opt8=menu.AddNew OsdItem '\t8\tX-VDR'" || return $false + SendCmd "opt8.EnableEvent keyOk" || return $false + fi + # <--------------------------------------------------------------------------------------------------------------- List + SendCmd "opt1.SetCurrent" || return $false + SendCmd "menu.Show" || return $false + # <--------------------------------------------------------------------------------------------------------------- Menu + + while true ; do + SendCmd "menu.SleepEvent" || return $false + # keyOk (SubMenu VdrSetup) + if IsEvent opt1 keyOk || IsEvent menu key1 ; then + VdrSetup || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (SubMenu ListPlugins) + if IsEvent opt2 keyOk || IsEvent menu key2 ; then + ListPlugins || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (SubMenu PluginStatusList) + if IsEvent opt3 keyOk || IsEvent menu key3 ; then + PluginStatusList || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (SubMenu SystemStart) + if IsEvent opt4 keyOk || IsEvent menu key4 ; then + SystemStart || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (SubMenu Wakeup) + if IsEvent opt5 keyOk || IsEvent menu key5 ; then + Wakeup || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (SubMenu ScriptSetup) + if IsEvent opt6 keyOk || IsEvent menu key6 ; then +# SendCmd "Message -seconds 5 'Einstellungen gelten nur fuer diese Sitzung'" || return $false + ScriptSetup || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (SubMenu DVB) + if IsEvent opt7 keyOk || IsEvent menu key7 ; then + DVBModul || return $false + SendCmd "menu.Show" || return $false + fi + # keyOk (SubMenu Xvdr) + if [ "$have_xvdr" = "on" ]; then + if IsEvent opt8 keyOk || IsEvent menu key8 ; then + Xvdr || return $false + SendCmd "menu.Show" || return $false + fi + fi + # keyRed (Reboot) + if IsEvent menu keyRed ; then + SendCmd "Message -warn -seconds 10 'System jetzt neustarten?'" || return $false + if IsEvent Message keyOk ; then + SendCmd "Message 'System wird neugestartet...'" || return $false + SendCmd "menu.SendState osEnd" || return $false + shutdown -r now + fi + fi + # keyGreen (Shutdown) + if IsEvent menu keyGreen ; then + SendCmd "Message -warn -seconds 10 'System jetzt ausschalten?'" || return $false + if IsEvent Message keyOk ; then +# SendCmd "Message 'System wird ausgeschaltet...'" || return $false + SendCmd "menu.SendState osEnd" || return $false +# shutdown -h now + /usr/bin/svdrpsend.pl HITK Power + return $true + fi + fi + # keyYellow (Restart) + if IsEvent menu keyYellow ; then + SendCmd "Message -warn -seconds 10 'VDR jetzt neustarten?'" || return $false + if IsEvent Message keyOk ; then + SendCmd "Message 'VDR wird neugestartet...'" || return $false + SendCmd "menu.SendState osEnd" || return $false + sleep 1 + killall -9 vdr + fi + fi + # keyBlue (Help) + if IsEvent menu keyBlue ; then + SendCmd "Message -seconds 5 'Auswahl mit OK oder Menue verlassen mit Exit'" || return $false + fi + # close the menu + if IsEvent menu close ; then + SendCmd "menu.SendState osEnd" || return $false + return $true + fi + done +} + + +############### +# Main Code # +############### + + +ConnectServer localhost 2010 +# Connect to the server process + +ReadReply || error +# Read server welcome + +SendCmd "Version 0.1" || error +# Identify to server with protocol version + +MainMenu || error +# Do vdrsetup + +SendCmd Quit +DoLog "disconnecting from OSDServer" +# ... and good bye + +exec 3>&- +exec 4>&- +# close FIFOs + |
