summaryrefslogtreecommitdiff
path: root/contrib/MV_switch_channellogo.sh
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/MV_switch_channellogo.sh')
-rwxr-xr-xcontrib/MV_switch_channellogo.sh107
1 files changed, 107 insertions, 0 deletions
diff --git a/contrib/MV_switch_channellogo.sh b/contrib/MV_switch_channellogo.sh
new file mode 100755
index 00000000..d2f22915
--- /dev/null
+++ b/contrib/MV_switch_channellogo.sh
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+# MV_switch_channellogo.sh
+# Helferskript für das Skin flatPlus!
+# Zweck ist, dass Kanallogos abhängig von der Uhrzeit getauscht werden, um z. B.
+# bei "Comedy Central/VIVA" Immer das passende Logo anzuzeigen
+# Starten beim VDR-Start und per cron.hourly!
+VERSION=170214
+
+# --- Variablen
+LOGO_DIR='/etc/vdr/plugins/skinflatplus/logos' # Pfad zu den Kanallogos
+ALT_LOGO_DIR="$LOGO_DIR" # Pfad zu den alternativen Kanallogos
+SVDRPSEND='svdrpsend' # VDR's svdrpsend
+SELF="$(readlink /proc/$$/fd/255)" || SELF="$0" # Eigener Pfad (besseres $0)
+SELF_NAME="${SELF##*/}" # skript.sh
+LOGFILE="/var/log/${SELF_NAME%.*}.log" # Log-Datei
+MAXLOGSIZE=$((1024*50)) # Log-Datei: Maximale Größe in Byte
+NOW="$(date +%s)" # Aktuelle Zeit in Sekunden
+DAY_START="$(date +%s --date="0:00")" # 0 Uhr
+
+# --- Funktionen
+f_log() { # Gibt die Meldung auf der Konsole und im Syslog aus
+ logger -s -t "$SELF_NAME" "$*"
+ [[ -n "$LOGFILE" ]] && echo "$(date +'%d.%m.%Y %R') [$$] $*" >> "$LOGFILE" # Log in Datei
+}
+
+f_change_logo() { # Logo anpassen
+ local LOGO_SRC="${1,,}" LOGO_DST="${2,,}" RLFC
+ [[ $# -lt 1 ]] && return 1 # Benötigt mindestens ein Logo als Parameter
+ # f_log "f_log [$1] - [${2:-LEER}]" # DEBUG
+ if [[ $# -eq 1 ]] ; then # Ein Logo = Original Logo aktivieren
+ if [[ -e "${LOGO_DIR}/${LOGO_SRC}.png.org" ]] ; then
+ f_log "Aktiviere original Logo ($1)"
+ mv --force "${LOGO_DIR}/${LOGO_SRC}.png.org" "${LOGO_DIR}/${LOGO_SRC}.png"
+ RLFC=1 # Altes Logo aus Cache entfernen
+ fi
+ else # Alternatives Logo ($2 nicht leer)
+ if [[ ! -e "${LOGO_DIR}/${LOGO_SRC}.png.org" ]] ; then
+ f_log "Aktiviere alternatives Logo ($1 -> $2) [${CONF[2]:0:11}]"
+ cp --force --preserve "${LOGO_DIR}/${LOGO_SRC}.png" "${LOGO_DIR}/${LOGO_SRC}.png.org" # Sichern
+ cp --force --preserve "${ALT_LOGO_DIR}/${LOGO_DST}.png" "${LOGO_DIR}/${LOGO_SRC}.png" # Alternative
+ RLFC=1 # Altes Logo aus Cache entfernen
+ fi
+ fi
+ # Aus dem Changelog von flatPlus
+ # Use svdrp command "RLFC" to remove a logo from cache. Specify logo filename with extension, but without path.
+ # For example: svdrpsend PLUG skinflatplus RLFC "rtl ii.png"
+ if [[ -n "$RLFC" ]] ; then
+ LOGO_SRC="${LOGO_SRC##*/}" # Falls ein "/" enthalten ist nur den letzten Teil verwenden. Bsp.: comedy central/viva -> viva
+ "$SVDRPSEND" PLUG skinflatplus RLFC "${LOGO_SRC}.png" >/dev/null # Altes Logo aus Cache entfernen
+ fi
+}
+
+# --- Start
+# Suche Konfig im aktuellen Verzeichnis, im Verzeichnis des Skripts und im eigenen etc
+CONFIG_DIRS=("." "${SELF%/*}" "${HOME}/etc") ; CONFIG_NAME="${SELF_NAME%.*}.conf"
+for dir in "${CONFIG_DIRS[@]}" ; do
+ CONFIG="${dir}/${CONFIG_NAME}"
+ if [[ -f "$CONFIG" ]] ; then
+ mapfile -t < "$CONFIG" # Konfiguration einlesen
+ CONFLOADED=1
+ break # Die erste gefundene Konfiguration wird verwendet
+ fi
+done
+
+if [[ -z "$CONFLOADED" ]] ; then # Konfiguration wurde nicht gefunden
+ echo -e "\e[1;41m FEHLER \e[0;1m Keine Konfigurationsdatei gefunden!\e[0m (\"${CONFIG_DIRS[*]}\")"
+ exit 1
+fi
+
+# NOW=$(date +%s --date="01:00") ; echo "$NOW" # Test
+
+# Auswerten der Konfiguration
+for i in "${!MAPFILE[@]}" ; do # Kanal|Alternative|Zeit
+ if [[ "${MAPFILE[$i]:0:1}" == "#" || "${#MAPFILE[$i]}" -eq 0 ]] ; then
+ unset -v 'MAPFILE[$i]' # Zeile aus der Liste entfernen!
+ continue # weiter
+ fi
+ IFS='|' ; CONF=(${MAPFILE[$i]}) ; unset -v 'IFS' # Zeile in Array
+ [[ ${#CONF[2]} -lt 11 ]] && { echo "Zeitangabe für ${CONF[0]} fehlerhaft! (${CONF[2]]})"
+ continue ;}
+ # echo "Kanal: ${CONF[0]} Alternative: ${CONF[1]} Zeit: ${CONF[2]}"
+ ST="${CONF[2]:0:5}" ; ET="${CONF[2]:6:5}" # Bsp.: 00:01-12:30
+ START="$(date +%s --date="$ST")" ; END="$(date +%s --date="$ET")"
+ [[ $END -eq $DAY_START ]] && ((END+=60*60*24)) # 24 Stunden dazu (86400)
+ if [[ $END -lt $START ]] ; then # Bsp.: 20:00-06:00 (Ende am nächsten Tag)
+ [[ $NOW -gt $START || $NOW -lt $END ]] && ALTLOGO=1
+ else # Bsp.: 06:00-20:00 (Ende am gleichen Tag)
+ [[ $NOW -gt $START && $NOW -lt $END ]] && ALTLOGO=1
+ fi
+ # echo "${CONF[0]} - Zeitspanne: $ST bis $ET [ALT=${ALTLOGO:-0}] ($START $END)"
+ if [[ $ALTLOGO -eq 1 ]] ; then
+ # echo "Zwischen $ST und $ET [ALT=${ALTLOGO}] ($START $END)"
+ f_change_logo "${CONF[0]}" "${CONF[1]}" # Alternatives Logo
+ else
+ # echo "Ausserhalb $ST und $ET [ALT=${ALTLOGO}] ($START $END)"
+ f_change_logo "${CONF[0]}" # Original Logo
+ fi
+ unset -v 'ALTLOGO'
+done
+
+if [[ -e "$LOGFILE" ]] ; then # Log-Datei umbenennen, wenn zu groß
+ FILESIZE="$(stat -c %s "$LOGFILE")"
+ [[ $FILESIZE -gt $MAXLOGSIZE ]] && mv --force "$LOGFILE" "${LOGFILE}.old"
+fi
+
+exit 0 # Ende