Dies ist ein Plugin für den Video Disk Recorder (VDR).

von:                  Christian Wieninger <cwieninger@gmx.de>

Projektseite:         http://www.cwieninger.de.vu

letzte Version erhältlich: http://www.cwieninger.de.vu

Bitte die Datei COPYING für Lizenzinformationen beachten.

Übersicht
---------
EPG-Search kann als Ersatz für VDR's Standard-Programm-Menu verwendet
werden. Es sieht genauso aus, erweitert es aber um einige zusätzliche
Funktionen:

- Befehle für epg-Einträge mit 5 integrierten Befehlen wie
z.B. 'Wiederholungen anzeigen', 'Suche anlegen'. Man kann eigene
Befehle hinzufügen, um z.B. einen VDRAdmin Autotimer anzulegen.

- Bis zu 4 weitere Zeitpunkte im Menu 'Was läuft jetzt?' neben 'Jetzt'
und 'Nächste'

- Suche im EPG: Anlegen von wiederverwendbaren Abfragen, die auch als
'Suchtimer' verwendet werden können.

- Suchtimer: Sucht im Hintergrund nach Sendungen und erzeugt einen
Timer bei passenden EPG-Einträgen (ähnlich zu VDRAdmins Autotimern)
oder informiert über die Sendung via OSD

- Fortschrittsbalken in 'Jetzt' und 'Nächste'

- Zeit im Menu 'Jetzt', 'Nächste' kann per Tastendruck verschoben
werden,  z.B. was läuft 'Jetzt' + 30 Minuten

- Startmenu 'Programm' oder 'Jetzt' einstellbar.

- Prüfung auf Timer-Konflikte im Hintergrund (erfordert ein aktuelles
Timeline-Plugin)

- das Menu zur detaillierten EPG-Anzeige (Zusammenfassung) erlaubt den
Sprung zur vorherigen/nächsten Sendung

- Unterstützung erweiterter EPG-Infos in Suchtimern

- Erweiterung des Timer-Edit-Menus um Verzeichnisse und
  benutzerdefinierte Wochentage

Funktioniert nur mit vdr-1.3.x (x>=7). Getestet mit 1.3.10 bis 1.3.30.
Teile der Quelltexte basieren auf dem repeating-epg-patch von
Gerhard Steiner, der mir die Erlaubnis gab, diese zu verwenden.
(Danke für seine Arbeit!).


Installation
------------
Hier gibt nichts besonderes. Bitte wie jedes andere Standard-Plugin
installieren (entpacken, soft link, make plugins). Eine kleine
Besonderheit: Wer lieber mit Perl compatible regular expressions in
der Suche arbeitet, sollte einfach im Makefile des Plugins
#HAVE_PCREPOSIX=1 in HAVE_PCREPOSIX=1 ändern oder einfach
HAVE_PCREPOSIX an den 'make plugins'-Aufruf anhängen (dazu muss pcreposix
installiert sein, das in der libpcre von www.pcre.org enthalten ist,
sollte aber in den meisten Distributionen bereits enthalten sein).
HINWEIS: wenn alles normal kompiliert, aber beim Start von VDR
folgendes kommt:

ERROR: /usr/lib/libpcreposix.so.0: undefined symbol: pcre_free).

dann bitte libpcre von www.pcre.org updaten und Plugin neu kompilieren.

Beschreibung
------------
Auf den ersten Blick sieht EPG-Search wie der Programm-Menu-Punkt des
VDR aus.   
Ein Tastendruck auf '0' schaltet die Farbtasten um, sodass weitere
Funktionen erreicht werden können (die vorgegebene Zuweisung kann per
Setup angepasst werden):

Menu Befehle
------------
Dieses Menu zeigt Befehle an, die auf den ausgewählten Menueintrag
angewandt werden können. Es gibt 5 vorgegebene Befehle:
- Wiederholung: Zeigt Wiederholungen an
- Aufnehmen
- Umschalten
- Suche anlegen: schaltet zum Suchmenu und erzeugt eine Suche mit dem
Namen der aktuellen Sendung als Suchbegriff (um die manuelle Erfassung
zu vermeiden
- Suche in Aufnahmen: durchsucht die Aufnahmen nach einer Sendung mit
diesem Namen

Man kann eigene Befehle hinzufügen, indem man die Datei
epgsearchcmds.conf im Plugins-Konfig-Verzeichnis editiert. Eine
Beispiel-Datei mit Bespielscripts liegt dem Plugin bei (s. Unterverzeichnis
'scripts', stammt von vdr-wiki.de, Danke an die Autoren).

Das Format der Datei ist identisch zu VDRs commands.conf oder reccmds.conf.
Wenn ein Befehl ausgeführt wird, werden folgende Parameter übergeben:
$1: Titel des Programmeintrags
$2: Startzeit als time_t-Wert (wie im Shutdown-Skript)
$3: Endzeit
$4: Programmplatz
$5: langer Kanalname
$6: Untertitel des Programmeintrags, "" falls nicht vorhanden

Zum Ausführen eines Befehls aus dem Hauptmenu ohne Öffnen des
Befehlsmenus genügt es die zugehörige Nummer des Befehls zu drücken.

Menu Suche
----------
Hier kann man eine Suche im EPG erzeugen, editieren, löschen und
ausführen. Bedienung und Verhalten ist ähnlich zu VDR's Timer-Menu.

Menu Suche editieren
--------------------
Das meiste in diesem Menu ist selbsterklärend, deshalb nur einige
Anmerkungen zu:

- Suche: 

Suchbegriff. Will man nach mehrern Worten suchen, dann bitte
mit Leerzeichen trennen. Läßt man den Suchbegriff leer (in Verbindung
mit Suchmodus 'Ausdruck') wird alles akzeptiert. Das kann praktisch
sein, um z.B. alles zu suchen, was zu einer bestimmten Zeit auf einem
bestimmten Sender kommt.

- Suchmodus: 

'Ausdruck' sucht nach diesem Ausdruck innerhalb eines
EPG-Eintrags. 'alle Worte' erfordert, dass jedes Wort im EPG-Eintrag
vorkommt, 'ein Wort' dagegen nur, dass zumindest ein Wort auftaucht.
'exakt' vergleicht den gesamten Suchbegriff mit dem EPG-Eintrag
(praktisch bei kurzen Titeln wie z.B. "Alf").
'regulärer Ausdruck' erlaubt die Angabe eines regulären Ausdrucks zur
Suche. Ein führender und abschließender '/' ist nicht
notwendig. Als Standard werden POSIX extended regular expressions
verwendet. Wer lieber mit Perl kompatiblen regulären Ausdrücken
arbeitet, muss lediglich im Makefile des Plugins #HAVE_PCREPOSIX=1 in
HAVE_PCREPOSIX=1 ändern und neu kompilieren. (Dafür ist pcreposix
notwendig, das mit libpcre von www.pcre.org installiert wird, aber auf
den meisten Distributionen bereits vorhanden sein sollte).
Eine Beschreibung des Suchprozesses gibts im MANUAL.

- Verw. erweiterte EPG Info

(nur verfügbar, wenn konfiguriert. Siehe weiter unten 'Verwendung
erweiterter EPG Infos')

- Verw. Kanal:

sucht nur im angegebenen Kanalbereich oder der hinterlegten
Kanalgruppe (z.B. 'Öffentl. Rechtl. oder Sportsender...). 
ACHTUNG: Nach einer Änderung der Kanal-Reihenfolge sollten unbedingt
diese Einstellungen der Suchtimer kontrolliert werden!

- Verwende Wochentag: 

Neben den Wochentagen kann auch eine benutzerdefinierte Auswahl
getroffen werden, um z.B. nur Montags und Freitags zu suchen.

- Verwende als Suchtimer: 

falls ja, sucht das Plugin im Hintergrund nach passenden Sendungen und
erzeugt dafür einen Timer (im Setup muss dazu die Verwendung von
Suchtimern aktiv sein)

- Nur ankündigen (kein Timer):

mit dieser Einstellung wird kein Timer erzeugt, sondern lediglich eine
Nachricht per OSD über die Sendung angezeigt (allerdings nur, wenn
nicht bereits ein Timer dafür existiert)

- Serienaufnahme: 

falls ja, wird die Aufnahme in einem Ordner mit dem Seriennamen
gespeichert.  Die Aufnahme selbst erhält den Episondennamen
(falls es keinen gibt, wird Datum und Uhrzeit als Name verwendet)

- Verzeichnis: 

hier kann man ein Verzeichnis angeben, in dem die
Aufnahme gespeichert wird, z.B. 'SciFi'. Mit der Taste 'Blau' kann ein
Verzeichnis gewählt werden, das bereits bei anderen Sucheinträgen
verwendet wird. Die Liste kann ausserdem durch Einträge in der Datei
epgsearchdirs.conf erweitert werden (pro Zeile ein Verzeichnis, ohne
das führende video-Verzeichnis, s. auch MANUAL).
Wenn man erweiterte EPG-Infos von einem Provider erhält, können im
Verzeichnis-Eintrag auch Variablen wie "%Genre%" oder "%Category%"
verwendet werden. Diese werden durch die aktuellen erw. EPG-Infos
ersetzt, sobald ein Timer erzeugt wird.
(s. MANUAL 'Using variables in the directory entry of a search timer')

- Priorität, Lebensdauer, Zeitpuffer Anfang und Ende: 

Jeder Suchtimer kann für diese Parameter eigene Einstellungen haben. Die
Voreinstellung wird im Setup vorgenommen.

- VPS: 

aktiviert VPS, falls im VDR-Setup aktiv und für die gefundene
Sendung auch VPS-Informationen vorhanden sind.

(Um den Status 'Als Suchtimer verw.' zu ändern, ohne das Menu zu
öffnen, kann die Taste '0' verwendet werden.)

Menu Suchergebnisse
-------------------
Dieses Menu zeigt die Suchergebnisse an. Ein 'T' sagt aus, dass es zu
diesem Eintrag bereits einen Timer gibt, ein 't', dass es nur
teilweise aufgenommen wird, wie im Standard-Programm-Menu.

Erweitertes 'Jetzt' and 'Nächste'
---------------------------------
Im Setup können bis zu 4 zusätzliche Zeiten als Erweiterung zu 'Jetzt'
und 'Nächste' angegeben werden, um die Taste Grün zu erweitern,
z.B. 'nachmittags', 'abends', 'spätabends'. Zeiten, die bereits
verstrichen sind, werden übersprungen (man erhält abends also kein 'nachmittags').
In diesen Menu kann die aktuell angezeigte Zeit durch Drücken auf
FastRew und FastFwd verschoben werden, um die Zeit nach hinter oder
vorne zu verstellen. Falls diese Tasten auf der Fernbedienung nicht
existieren, kann diese Funktion durch Umschalten mit '0' erreicht
werden. Die Tasten Grün und Gelb wechseln dann zu '<<' und '>>' (Das
Umschalten kann über das Setup angepasst werden).
Man kann einen Fortschrittsbalken im Menu 'Jetzt'/'Nächste' anzeigen lassen,
entweder bestehend aus '|' oder einen der 'graphisch' aussieht.
Für letzteren gibt es 2 verschiedene Wege:

1. Zur Laufzeit patchen: Dazu einfach 'graphisch' auswählen. Damit ist
kein Patch des VDR notwendig, dieser wird zur Laufzeit ausgeführt. Um
den Patch zu aktivieren, muss VDR noch neu gestartet werden.

2. Falls man bereits das neue text2skin 1.0 benutzt, bitte 'Pipes'
einstellen. Text2skin hat bereits eine integrierte Unterstützung zum
Zeichnen von Progressbars.

Menu Setup
----------
- Hauptmenueintrag verstecken:
Damit wird der Eintrag 'Suche' im Hauptmenu ausgeblendet. Achtung:
Wenn das Plugin der Taste Grün zugeordnet ist, dann bewirkt das
Ausblenden, dass wieder das VDR-Standardmenu gerufen wird (um das zu
vermeiden s. unten)

- Startmenu: 
Auswahl von 'Programm' oder 'Jetzt' als Startmenu

- Taste Rot: 
Auswahl, ob man den Standard ('Aufnehmen') oder 'Befehle' als
Vorbelegung möchte

- Taste Blau: 
Auswahl, ob man den Standard ('Umschalten') oder 'Suche' als
Vorbelegung möchte

- Zeige Fortschrittsbalken in 'Jetzt': 
Im Menu 'Jetzt' kann ein Fortschrittsbalken angezeigt werden, der den
Fortschritt der laufenden Sendung anzeigt. Auswahl 'Pipes' zeigt einen
Balken bestehend aus '|' (bitte ebenfalls wählen, wenn schon text2skin
1.0 verwendet wird). Auswahl 'graphisch' zeigt einen Balken an, der
eher graphisch wirkt. Bei letzterem ist ein VDR-Neustart notwendig.

- Zeige Fortschrittsbalken in 'Nächste': 
Im Menu 'Nächste' kann ein Fortschrittsbalken angezeigt werden, der
die Zeit bis zur nächsten Sendung anzeigt (0 bis max. 30 Minuten, 15
Minuten entsprechen 50%). Auswahl 'Pipes' zeigt einen Balken bestehend
aus '|' (bitte ebenfalls wählen, wenn schon text2skin 1.0 verwendet
wird). Auswahl 'graphisch' zeigt einen Balken an, der eher graphisch
wirkt. Bei letzterem ist ein VDR-Neustart notwendig.

- Anzeigenbreite:
Abhängig vom verwendeten Skin ist der Fortschrittsbalken
evtl. abgeschnitten. In diesem Fall bitte den Wert erhöhen.

- Zeige Kanalnummer:
auswählen, um eine führende Programmnummer for jedem EPG-Eintrag anzuzeigen

- Kurze Sendernamen: (ab vdr 1.3.15)
Zeige die kurzen Sendernamen in 'Jetzt', 'Nächste', ...

- Kanalgruppen:
verwaltet die Kanalgruppen, die als Suchkriterium in einer Suche
verwendet werden können. Die Verwaltung ist auch im Edit-Menu einer
Suche möglich.

- Zeitintervall für FR/FF [min]:
In den Menus 'Programm', 'Jetzt', 'Nächste', 'Benutzerdef. Zeit 1', ... kann die
angezeigte Zeit durch drücken von FastRew, FastFwd verschoben werden. 
Die Anzahl Minuten für den Sprung kann hier angepasst werden.

- Grün/Gelb umschalten:
Falls die Tasten FastRew, FastFwd auf der Fernbedienung nicht
vorhanden sind, dann auf 'ja' setzen. Wenn die Taste '0' gedrückt
wird, wird somit auch die Taste Grün/Gelb auf z.B. '<<' und '>>' umgeschaltet

- Benutzerdef. Zeit 1..4:
Bis zu 4 benutzerdefinierte Zeiten können zu 'Jetzt' und 'Nächste'
hinzugefügt werden.

- Beschreibung:
Name der benutzerdef. Zeit, z.B. 'Nachmittags', 'Abends', 'Spätabends'

- Zeit:
zugehörige Uhrzeit

- Verwende Suchtimer:
falls ja, untersucht das Plugin im Hintergrund die EPG-Daten und
erzeugt Timer, falls passende Einträge gefunden werdne. Dies betrifft
nur Sucheinträge, die mit 'Als Suchtimer verwenden' markiert sind.

- Aktualisierungsintervall:
Das Intervall in Minuten, in dem die Hintergrundsuche vorgenommen wird.

- SVDRP Port:
Falls nicht der Standard-SVDRP-Port 2001 verwendet wird, dann bitte
hier anpassen, damit die Suchtimer funktionieren.

- Timer-Konflikte prüfen:
Nach jedem Hintergrund-Scan kann eine Prüfung auf Timer-Konflikte
durchgeführt werden. Falls welche gefunden werden, erfolgt eine
Warnmeldung im OSD. (erfordert eine aktuelles Timeline-Plugin)

- Priorität, Lebensdauer, Zeitpuffer für Anfang und Ende:
Voreinstellungen

Suchtimer
---------
Das ist ziemlich das gleiche wie VDRAdmin's Autotimer, benötigt jedoch
kein externes Programm. Beim Anlegen einer Suche kann man die Option
setzen, ob diese als Suchtimer verwendet werden soll. Das Plugin sucht
nun im Hintergrund in bestimmten Zeitabständen (->Setup->Update
Intervall [min ]) nach passenden Sendungen und erzeugt Timer für die
Ergebnisse. Gerade für Serien ist dies sehr praktisch, weshalb es in
der Suche die Option "Serienaufnahme" gibt. In diesem Fall wird eine
Timer mit zusätzlichem Episodennamen angelegt. Die Aufnahme erscheint
dann in einem Ordner mit dem Seriennamem. Falls es keinen Episodennamen gibt
wird automatisch Tag und Uhrzeit verwendet.

Die Suchtimer-Funktion muss ausserdem im Setup aktiviert werden.
Falls für SVDRP nicht der Standardport 2001 verwendet wird, bitte
ebenfalls im Setup eintragen.

Falls man eine Hintergrund-Suche manuell anstossen will, genügt ein

touch /etc/vdr/plugins/.epgsearchupdate

Das kann ebenfalls Teil des shutdown-Skripts sein (hier sollte man
dann noch einen sleep von ein paar Sekunden anhängen, damit das Plugin
Zeit hat, den Scan zu beenden).

Mehr Infos zu Suchtimern gibts im MANUAL unter 'Description of the
search process' und 'How do Search Timers work?'

Verwendung der Suche durch andere Plugins oder Skripte
------------------------------------------------------
(verschoben in MANUAL)


Verwendung erweiterter EPG Infos
--------------------------------
Einige EPG Provider liefern zusätzliche EPG Infos wie die Art der
Sendung, das Video und Audio Format, die Besetzung,...
Mit tvmovie2vdr oder epg4vdr können diese Daten in den VDR importiert
werden.
Somit kann man also z.B. einfach einen Suchtimer erzeugen, der alle
Tagestipps findet, die in 16:9 ausgestrahlt werden.
Um diese Informationen in Suchtimern zu verwenden, muss anhand der
Datei epgsearchcats.conf im Plugin-Konfig-Verzeichnis eine
Konfiguration vorgenommen werden.
Das Format dieser Datei ist folgendes:

ID|category name|name in menu|values separated by ','(option)|searchmode(option)

- 'ID' sollte eine eindeutige ganze Zahl sein
   (Achtung: Ändert man später aus irgendeinem Grund diese ID müssen
   die Suchtimer neu editiert werden!)
- 'category name' ist der Name der Info lt. EPG Provider, z.B. 'Genre'
- 'name in menu' ist der Name im Menu von epgsearch.
- 'values' ist eine optionale Liste von Werten für diese Info.
  Wird keine Liste angegeben, erstellt epgsearch im Menu daraus ein
  Eingabefeld, sonst wird daraus eine Auswahlliste.
- 'searchmode' gibt optional an, wie gesucht werden soll:
  0 - Der gesamte Begriff muss als Substring erscheinen
  1 - Die einzelnen Worte (getrennt durch ',', ';', '|' oder
      '~') müssen alle als Substring auftauchen. Diese Einstellung ist
      der Standardwert.
  2 - mindestens ein Wort (getrennt durch ',', ';', '|' oder
      '~') muss als Substring auftauchen
  3 - exakte Übereinstimmung
  4 - als regulärer Ausdruck

Beispiel-Dateien für epgsearchcats.conf kommen mit dem
Plugin. Einfach die passende ins Plugin-Konfig-Verzeichnis als
epgsearchcats.conf kopieren und dann das Eingabe-Menu eines Suchtimers
aufrufen (nach einem VDR-Neustart).

Weil das Aufsetzen einer neuen epgsearchcats.conf ziemlich lästig ist,
habe ich ein kleines Tool 'createcats' mitgeliefert, das den Großteil
der Arbeit erledigt. Es sollte mit dem Plugin übersetzt worden sein
und sich im Quellverzeichnis befinden. Einfach folgendermaßen aufrufen:

createcats /pfad_zu/epg.data

Dieses Tool scannt nun die vorhandenen EPG infos und versucht daraus
die erweiterten Infos zu extrahieren. Das Ergebnis ist eine neue
epgsearchcats.conf, die aber noch editiert werden muss, weil sicher
nicht alles genau paßt. Danach ins Plugin-Konfig-Verzeichnis kopieren.
(Mehr über createcats im Manual 'Using createcats')

(Details: epgsearch durchsucht die Zusammenfassung einer Sendung nach
dem Namen einer Kategorie gefolgt von ': '. Das geschieht für alle
Kategorien, für die im Suchtimer ein Wert gesetzt wurde. Die Suche
berücksichtigt die Groß/Kleinschreibung sowohl bezüglich des
Kategorie-Namens als auch des Wertes.)

Ersetzen des Standardmenu
-------------------------
Um das Plugin als Ersatz für VDR's standard menu zu verwenden, genügt
es die Zeile

Green	@epgsearch

in die Datei keymacros.conf zu setzen. Falls kein weiterer Menueintrag
im Hauptmenu erscheinen soll, dann den Eintrag des Plugins zunächst im
Setup ausblenden. Um das Plugin trotzdem mit der Taste "Grün" aufrufen
zu können, könnte man z.B. mein launcher-Plugin verwenden und
die Zeile

Green @launcher x 

in die keymacros.conf schreiben, wobei x die Position von epgsearch
innerhalb des launcher listings ist.
Achtung: Versteckt man das Plugin ohne die Verwendung des launcher
plugins oder anderer Patches, die das Aufrufen versteckter Plugins
erlauben, erhält man das VDR-Standard-Menu beim Drücken von Grün.

Ein weiterer Ansatz ist ein Patch gegen VDR, der das Standardmenu
'Programm' gegen epgsearch austauscht
(vdr-replace-schedulemenu.diff.gz im Patches-Verzeichnis, danke an den
Autor Uwe/egal@vdrportal).

Viel Spass!

Christian Wieninger
