CapturePlugin - Kaffeine
Falls man den DVB-Empfang in Kaffeine eingerichtet hat, kann man mittels dieser Anleitung per CapturePlugin aufnehmen.
Zu Leerzeichen im Sendernamen / Titel gibt es folgende Diskussion: Diskussion
Inhaltsverzeichnis
kaffeine-Version <= 0.8.x
Installation
- DCOP-Bindings für Python installieren (Paket python-dcop bei Debian/Ubuntu).
Ab Ubuntu 9.04, Jaunty Jackalope, aufwärts ist das Paket python-dcop nur noch über launchpad.net-Quellen verfügbar. Falls eine Installation von dort, bzw. eine Änderung der Paketquellen, nicht erwünscht ist, sollte man das alternative Shell-Script benutzen. Das verwendete Programm dcop befindet sich im Paket kdelibs4c2a.
Installation des Paketes python-dcop. Unter Ubuntu/Gnome: Anwendungen --> Zubehör --> Terminal.
Eingabe:sudo apt-get install python-dcop
Installation des Paketes kdelibs4c2a:sudo apt-get install kdelibs4c2a
- Das unten angegebene Script mit dem Namen
kaffeine-tvbrowser-wrapper
erstellen und abspeichern. - Script lesbar und ausführbar machen (
chmod a+rx kaffeine-tvbrowser-wrapper
) - Das Script in den CapturePlugin-Einstellungen als "Applikation" angeben.
In der deutschen Version von TV-Browser findet man dies unter: Plugins --> Aufnahmesteuerung, hier Tab. Geräte. - 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. - Als Parameter bei »Löschen« irgend etwas eintragen. Z.Bsp. ein einzelnes Wort:
remove
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
Leerzeichen im Sendernamen und Titel werden korrekt zu kaffeine übertragen.
#!/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 id ps sed; do type $PRG >/dev/null 2>&1 || { echo "Das Programm '$PRG' wurde nicht gefunden!" exit 3 } done # Wenn zu wenig Parameter, < 8, angegeben werden, dann nimm an, # dass die Sendung gelöscht werden soll. [ $# -lt 8 ] && { if [ $# -eq 1 -a "$1" = "remove" ]; then echo "Sendung in TV-Browser gelöscht! Bitte in kaffeine separat löschen." else echo "Sendung gelöscht oder zu wenig Parameter! Bitte in kaffeine separat löschen." fi 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="$strTitle" strZeitpunkt="$strJahr-$strMonat-${strTag}T$strStunde:$strMinute:00" # Prüfe, ob kaffeine schon läuft. WHOAMI=`id -un` ps -u "$WHOAMI" -o cmd | sed -e 1d -e 's/ .*//' -e 's_^.*/__' | \ ( while read CMD; do [ "$CMD" = kaffeine ] && exit 1; done; exit 0 ) KAFFEINE_FOUND=$? # kaffeine starten, falls es nicht läuft. [ $KAFFEINE_FOUND -eq 0 ] && kaffeine # Aufruf des Kaffeine-Interfaces via dcop. dcop kaffeine KaffeineIface dvbNewTimer "$strName" "$strKanal" "$strZeitpunkt" "$strDauer" DCOP_RC=$? # Rückgabe an den TV-Browser. cat <<EOF Name: $strName Kanal: $strKanal Zeit: $strTag.$strMonat.$strJahr $strStunde:$strMinute Dauer: $strDauerStunden:$strDauerMinuten Rückgabewert (dcop): $DCOP_RC EOF exit $DCOP_RC
kaffeine-Version >= 1.x
Vorbemerkungen
Ab Version 1 stehen in die Kanäle und Aufnahmezeiten in der sqlite-Datenbank $HOME/.kde/share/apps/kaffeine/sqlite.db
.
Diese Datenbank lässt sich durch Programme direkt bearbeiten, dadurch ist jetzt auch ein Löschen von Aufnahmezeiten möglich.
Allerdings muss kaffeine nach einer Änderung in dieser Datenbank neu gestartet werden, damit Änderungen an der Datenbank in kaffeine aktualisiert werden!
Dies betrifft das Eintragen und das Löschen von Sendungen vom TV-Browser aus.
Dass heißt, es ist immer die folgende Reihenfolge einzuhalten:
- Aufnahmen im TV-Browser eintragen oder löschen.
- kaffeine neu starten.
Installation
Das Interface für kaffeine-Version >= 1.x wurde in Ruby mit der Sqlite3-Schnittstelle von Ruby realisiert.
Die Software (ruby & ruby-sqlite-Schnittstelle) ist entsprechend auf Ihrem Betriebssystem zu installieren.
- Das unten angegebene Script mit dem Namen
kaffeine-tvbrowser-wrapper.rb
erstellen und abspeichern. - Script lesbar und ausführbar machen (
chmod a+rx kaffeine-tvbrowser-wrapper.rb
) - Das Script in den CapturePlugin-Einstellungen als "Applikation" angeben.
In der deutschen Version von TV-Browser findet man dies unter: Plugins --> Aufnahmesteuerung, hier Tab. Geräte. - 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. - Als Parameter bei »Löschen« folgendes eintragen:
remove {start_year} {start_month} {start_day} {start_hour} {start_minute} {length_minutes} "{isset(channel_name_external_quiet,channel_name)}" "{title}"
Ruby-Script kaffeine-tvbrowser-wrapper.rb
#!/usr/bin/ruby require 'rubygems' require 'sqlite3' # Version, die unter Ubuntu >= 9.10 und S.U.S.E. 11.3, KDE4 laufen sollte. db_path = ENV['HOME'] + '/.kde/share/apps/kaffeine/sqlite.db' db_path = ENV['HOME'] + '/.kde4/share/apps/kaffeine/sqlite.db' \ if File.readable?(ENV['HOME'] + '/.kde4/share/apps/kaffeine/sqlite.db') \ and not File.readable?(db_path) unless File.readable?(db_path) then puts "Kaffeine-DB-Datei ist nicht lesbar: '#{db_path}'" exit 1 end # Wenn zu wenig Parameter, < 8, angegeben werden, dann nimm an, # dass die Sendung gelöscht werden soll. if ARGV.length < 8 then puts "Zu wenig Parameter! Bitte TV-Browser-Einstellungen ändern!" exit 1 elsif ARGV.length == 9 and ARGV[0] == 'remove' then # Lies die Parameter in Variablen. operation, sJahr, sMonat, sTag, sStunde, sMinute, sLaenge, sKanal, sTitel = ARGV else # Vorgabeoperation ist die Aufnahme. operation = 'record' # Lies die Parameter in Variablen. sJahr, sMonat, sTag, sStunde, sMinute, sLaenge, sKanal, sTitel = ARGV end if md = sKanal.match(/^"(.*)"$/) then sKanal = md[1] end if md = sTitel.match(/^"(.*)"$/) then sTitel = md[1] end nDauerStunden = sLaenge.to_i / 60 nDauerMinuten = sLaenge.to_i % 60 sBegin = "#{"%04d" % sJahr}-#{"%02d" % sMonat}-#{"%02d" % sTag}T#{"%02d" % sStunde}:#{"%02d" % sMinute}:00" sDuration = "#{"%02d" % nDauerStunden}:#{"%02d" % nDauerMinuten}:00" begin db = SQLite3::Database.open(db_path) id = nil # new_id = 0 wird zwar in die Datenbank eingetragen, aber von Kaffeine nicht in der # Aufnahme-Liste aufgeführt hierzu muss die id anscheinend > 0 sein. new_id = 1 db.execute("select Id from RecordingSchedule where Name = ? and Channel = ? and Begin = ? and Duration = ? and Repeat = ?", sTitel, sKanal, sBegin, sDuration, 0) do |row| id = row[0].to_i unless row[0].nil? end if id.nil? then if operation == 'record' then db.execute("select max(Id) from RecordingSchedule") do |row| new_id = row[0].to_i + 1 unless row[0].nil? end nKanal = 0 db.execute("select count(*) from Channels where Name = ?", sKanal) do |row| nKanal = row[0].to_i unless row[0].nil? end if nKanal == 0 then puts "Sender '#{sKanal}' ist in kaffeine nicht vorhanden!" db.close exit 1 end begin # Id, Name, Channel, Begin, Duration, Repeat db.execute('insert into RecordingSchedule values (?, ?, ?, ?, ?, ?)', new_id, sTitel, sKanal, sBegin, sDuration, 0) rc = "OK" rescue rc = "Fehler beim INSERT: #{$!}" end # Rückgabe an den TV-Browser. puts "Die Sendung wurde mit folgenden Daten bei kaffeine eingetragen:" puts "Titel: #{sTitel}" puts "Kanal: #{sKanal}" puts "Beginn: #{sBegin}" puts "Dauer: #{sDuration}" puts "Rückgabewert: #{rc}" if rc == "OK" then puts "Falls kaffeine gerade läuft, müssen Sie es beenden und neu starten um die neuen Aufnahmezeiten zu aktivieren!" end elsif operation == 'remove' then puts "Sendezeit ist in kaffeine nicht vorhanden!" db.close exit 1 end else if operation == 'remove' then db.execute("delete from RecordingSchedule where Name = ? and Channel = ? and Begin = ? and Duration = ? and Repeat = ?", sTitel, sKanal, sBegin, sDuration, 0) puts "Sendung wurde gelöscht." puts "Falls kaffeine gerade läuft, müssen Sie es beenden und neu starten um die geänderten Aufnahmezeiten zu aktualisieren!" else puts "Aufnahmezeit bereits vorhanden!" db.close exit 1 end end db.close rescue db.close unless db.closed? puts "Fehler mit der Kaffeine-DB!" # raise exit 1 end exit 0
Sendernamen
Es ist wichtig, die Sendernamen im TV-Browser und in Kaffeine anzugleichen. D.h. sie müssen identisch sein.
Ein Entfernen der Leerzeichen im Sendernamen ist nicht notwendig. Groß- und Kleinschreibung muss übereinstimmen.
Eine Änderung der Sendernamen kann in kaffeine oder im TV-Browser erfolgen.
To Do
- Lösch-Funktion in kaffeine-Version <= 0.8.x.
Diese Funktionalität gibt es in kaffeine bis Version 0.8.8 nicht.
D.h. für kaffeine-Version <= 0.8.x sind alle Aufnahmedaten separat im TV-Browser und kaffeine zu löschen.