CapturePlugin - Kaffeine: Unterschied zwischen den Versionen

Aus TV-Browser Wiki
Wechseln zu: Navigation⧼comma-separator⧽Suche
Laureus⧼word-separator⧽⧼parentheses⧽
⧼parentheses⧽
Laureus⧼word-separator⧽⧼parentheses⧽
⧼parentheses⧽
Zeile 52: Zeile 52:
 
== Alternatives Shell-Skript <code>kaffeine-tvbrowser-wrapper</code> ==
 
== Alternatives Shell-Skript <code>kaffeine-tvbrowser-wrapper</code> ==
  
Das Skript ersetzt Leerzeichen im Namen durch Unterstriche. Leerzeichen im Sendernamen werden aber noch nicht abgefangen, hier kann es passieren, dass Teile der Senderbezeichnung im Namen auftauchen.
+
<pre>
 +
#!/bin/sh
 +
# Dieses Script überträgt Aufnahmedaten vom TV-Browser zu Kaffeine.
 +
 
 +
# Überprüfen, ob alle notwendigen Programme vorhanden sind.
 +
for PRG in kaffeine dcop bc; do
 +
  type $PRG >/dev/null 2>&1 || {
 +
    echo "Das Programm '$PRG' wurde nicht gefunden!"
 +
    exit 3
 +
  }
 +
done
  
<pre>
 
#!/bin/bash
 
#
 
# Dieses Script überträgt Aufnahmedaten vom
 
# TV-Browser zu Kaffeine
 
#
 
 
# Kaffeine muss schon laufen, also starten wir es zuerst.
 
# Kaffeine muss schon laufen, also starten wir es zuerst.
# Da Kaffeine sich nicht zweimal starten lässt, kann es nicht schaden,
+
# Da Kaffeine sich nicht zweimal starten lässt, kann es
# ohne Abfrage zu starten
+
# nicht schaden, ohne Abfrage zu starten.
 
kaffeine
 
kaffeine
  
# Konfiguration
+
# Wenn zu wenig Parameter, < 8, angegeben werden, dann nimm an,
lArgumente=8
+
# dass die Sendung gelöscht werden soll.
 +
[ $# -lt 8 ] && {
 +
  echo "Sendung gelöscht oder zu wenig Parameter!"
 +
  exit 0
 +
}
  
# Wenn zu wenig Parameter angegeben werden abbrechen
+
# Lies die Parameter in Variablen.
if (( $# < $lArgumente )) ; then
+
for VAR in strJahr strMonat strTag strStunde strMinute strLaenge strKanal strTitle; do
        echo "Nicht genügend Parameter übergeben."
+
eval "$VAR=\"$1\""
exit 3
+
shift
fi
+
done
  
# Wenn genau 8 Parameter übergeben werden ist der 9. der Name
+
strDauerStunden=`echo "$strLaenge/60" | bc`
if (( $# == $lArgumente )) ; then
+
strDauerMinuten=`echo "$strLaenge%60" | bc`
strJahr=$1
 
strMonat=$2
 
strTag=$3
 
strStunde=$4
 
strMinute=$5
 
strLaenge=$6
 
strKanal=$7
 
strTitle=$8
 
fi
 
  
# Wenn mehr als 8 Parameter, gehören die Überschüssigen zum Namen
+
# Einstellige Zahlen mit führender Null ausstatten
if (( $# > $lArgumente )) ; then
+
for VAR in strMonat strTag strStunde strMinute strDauerStunden strDauerMinuten; do
strJahr=$1
+
  case `eval "echo \\\$$VAR"` in
shift
+
    [0-9])
strMonat=$1
+
      eval "$VAR=0\$$VAR"
shift
+
      ;;
strTag=$1
+
  esac
shift
+
done
strStunde=$1
 
shift
 
strMinute=$1
 
shift
 
strLaenge=$1
 
shift
 
strKanal=$1
 
shift
 
while [ ! -z "$1" ]
 
do
 
strTitle=$strTitle"_"$1
 
shift
 
done
 
fi
 
  
# Einstellige Zahlen mit führender Null ausstatten
+
strDauer=$strDauerStunden":"$strDauerMinuten":00"
if (($strMonat<10)); then
 
    strMonat="0"$strMonat
 
fi
 
if (($strTag<10)); then
 
    strTag="0"$strTag
 
fi
 
if (($strStunde<10)); then
 
    strStunde="0"$strStunde
 
fi
 
if (($strMinute<10)); then
 
    strMinute="0"$strMinute
 
fi
 
  
# Teile für Befehl bauen
+
# Teile für Befehl bauen.
strName=$strJahr"-"$strMonat"-"$strTag"_"$strStunde"-"$strMinute"_"$strTitle
+
strName="$strJahr$strMonat$strTag-$strStunde$strMinute $strTitle"
 
strZeitpunkt=$strJahr"-"$strMonat"-"$strTag"T"$strStunde":"$strMinute":00"
 
strZeitpunkt=$strJahr"-"$strMonat"-"$strTag"T"$strStunde":"$strMinute":00"
strDauerStunden=$(($strLaenge/60))
 
if (( ${#strDauerStunden} < 2 )) ; then
 
strDauerStunden="0"$strDauerStunden
 
fi
 
strDauerMinuten=$(($strLaenge%60))
 
if (( ${#strDauerMinuten} < 2 )) ; then
 
strDauerMinuten="0"$strDauerMinuten
 
fi
 
strDauer=$strDauerStunden":"$strDauerMinuten":00"
 
  
# Aufruf des Kaffeine-Interfaces
+
# Aufruf des Kaffeine-Interfaces via dcop.
dcop kaffeine KaffeineIface dvbNewTimer $strName $strKanal $strZeitpunkt $strDauer
+
dcop kaffeine KaffeineIface dvbNewTimer "$strName" "$strKanal" "$strZeitpunkt" "$strDauer"
# Rückgabe an den TV-Browser
 
echo "Name:"$strName";Kanal:"$strKanal";Zeit:"$strZeitpunkt";Dauer:"$strDauer
 
  
 +
# Rückgabe an den TV-Browser.
 +
cat <<EOF
 +
Name: $strName
 +
Kanal: $strKanal
 +
Zeit: $strTag.$strMonat.$strJahr $strStunde:$strMinute
 +
Dauer: $strDauerStunden:$strDauerMinuten
 +
EOF
 
</pre>
 
</pre>
  

Version vom 20. Dezember 2009, 18:02 Uhr

Falls man den DVB-Empfang in Kaffeine eingerichtet hat, kann man mittels dieser Anleitung per CapturePlugin aufnehmen.

Achtung! Momentan dürfen leider keine Leerzeichen im Titel oder Sendernamen übergeben werden.

Aber beachte deswegen die Diskussion

Installation

  1. DCOP-Bindings für Python installieren (Paket python-dcop bei Debian/Ubuntu)
  2. Das unten angegebene Script mit dem Namen kaffeine-tvbrowser-wrapper erstellen und abspeichern.
  3. Script ausführbar machen (chmod a+x kaffeine-tvbrowser-wrapper)
  4. Das Script in den CapturePlugin-Einstellungen als "Applikation" angeben
  5. Als Parameter folgendes für »Aufnahme« eintragen: {start_year} {start_month} {start_day} {start_hour} {start_minute} {length_minutes} "{isset(channel_name_external_quiet,channel_name)}" "{title}"
    Die Anführungszeichen beim Kanalnamen und Titel sorgen dafür, dass diese Parameter auch korrekt mit Leerzeichen an die Scripte übergeben werden.
  6. Bei »Löschen« irgend etwas eintragen.

Script kaffeine-tvbrowser-wrapper

#!/usr/bin/env python
import sys
import math
import pcop
import pydcop

if sys.argv.count < 9:
        print 'zu wenig Parameter'
        exit

def dd(num):
        if int(num) < 10:
                return "0" + str(num)
        else:
                return str(num)

year    = dd(sys.argv[1])
month   = dd(sys.argv[2])
day     = dd(sys.argv[3])
hour    = dd(sys.argv[4])
minute  = dd(sys.argv[5])

length  = int(sys.argv[6])

title   = sys.argv[8]
channel = sys.argv[7]

name     = year + "-" + month + "-" + day + "_" + hour + "-" + minute + "_" + title
datetime = year + "-" + month + "-" + day + "T" + hour + ":" + minute + ":00"
duration = dd(int(math.floor(length // 60))) + ":" + dd(length % 60) + ":00"

pydcop.anyAppCalled("kaffeine").KaffeineIface.dvbNewTimer(name, channel, datetime, duration)

Alternatives Shell-Skript kaffeine-tvbrowser-wrapper

#!/bin/sh
# Dieses Script überträgt Aufnahmedaten vom TV-Browser zu Kaffeine.

# Überprüfen, ob alle notwendigen Programme vorhanden sind.
for PRG in kaffeine dcop bc; do
  type $PRG >/dev/null 2>&1 || {
    echo "Das Programm '$PRG' wurde nicht gefunden!"
    exit 3
  }
done

# Kaffeine muss schon laufen, also starten wir es zuerst.
# Da Kaffeine sich nicht zweimal starten lässt, kann es
# nicht schaden, ohne Abfrage zu starten.
kaffeine

# Wenn zu wenig Parameter, < 8, angegeben werden, dann nimm an,
# dass die Sendung gelöscht werden soll.
[ $# -lt 8 ] && {
  echo "Sendung gelöscht oder zu wenig Parameter!"
  exit 0
}

# Lies die Parameter in Variablen.
for VAR in strJahr strMonat strTag strStunde strMinute strLaenge strKanal strTitle; do
 eval "$VAR=\"$1\""
 shift
done

strDauerStunden=`echo "$strLaenge/60" | bc`
strDauerMinuten=`echo "$strLaenge%60" | bc`

# Einstellige Zahlen mit führender Null ausstatten
for VAR in strMonat strTag strStunde strMinute strDauerStunden strDauerMinuten; do
  case `eval "echo \\\$$VAR"` in
    [0-9])
      eval "$VAR=0\$$VAR"
      ;;
  esac
done

strDauer=$strDauerStunden":"$strDauerMinuten":00"

# Teile für Befehl bauen.
strName="$strJahr$strMonat$strTag-$strStunde$strMinute $strTitle"
strZeitpunkt=$strJahr"-"$strMonat"-"$strTag"T"$strStunde":"$strMinute":00"

# Aufruf des Kaffeine-Interfaces via dcop.
dcop kaffeine KaffeineIface dvbNewTimer "$strName" "$strKanal" "$strZeitpunkt" "$strDauer"

# Rückgabe an den TV-Browser.
cat <<EOF
Name: $strName
Kanal: $strKanal
Zeit: $strTag.$strMonat.$strJahr $strStunde:$strMinute
Dauer: $strDauerStunden:$strDauerMinuten
EOF

ToDo

  1. Lösch-Funktion (scheint aber über DCOP nicht zu gehen)
  2. Übergabe von Leerzeichen in Titel und Sendernamen

Es ist wichtig, die Sendernamen im TV-Browser und in Kaffeine anzugleichen, bei der Gelegenheit sollten die Leerzeichen entfernt werden. Groß- und Kleinschreibung muss übereinstimmen.