<h1>Beschreibung:</h1>


Das Skript 'script.service.gto' holt von diversen RSS-Feeds die TV-Highlights des Tages und stellt diese dann als RecentlyAdded Widget im Menüpunkt TV bereit (nach Skintegration).
Hierbei kann sich das Plugin anhand der im PVR befindlichen Sender richten und zeigt optional nur TV Highlights für diese an. Desweiteren besteht eine Integration des Dienstes service.kn.switchtimer in der Sendungs-Detailansicht mit welchem die Highlights zum Umschalten vorgemerkt werden können.

The script 'script.service.gto' fetches actual tv highlights from various RSS feeds and present them as widget in the home menu (skin integration is needed). It can show only those events optionally if they are present in the pvr channel list. Furthermore, there is an integration of the service addon 'service.kn.switchtimer' which switches to the broadcast at appropriated time.

Das Skript wird bei jedem Kodi Start ausgeführt und holt die Daten in Abhängigkeit vom eingestellten Intervall. Daneben erfolgt eine weitere Aktualisierung des Widgets, um z.B. abgelaufene Sendungen nach einem bestimmten Zeitpunkt aus der Anzeige zu entfernen.

The script has a service which runs at Kodi start and fetches the data depending on the selected interval. In addition to update all outdated broadcasts will removed from display.

## Skintegration:

Um die TV Highlights des Tages in Esturay zu integrieren, bitte die Hinweise in den README.md in den jeweiligen Ordnern unter `integration/<skinname>` beachten! Ansonsten lässt sich das Addon auch als TV-Widget in andere Skins einbinden. Dazu benutzt das Addon eine Methode namens "Dynamic List Content". Die Integration durch den Skinner erfolgt durch den Aufruf von

To integrate the TV highlights of the day in Estuary, please follow the instructions in the README.md  in the folders `integration/<skinname>`. Otherwise, the addon can be integrated into other skins as a TV Widget too. The addon use a method called "Dynamic List Content". The integration by the skinner is done by calling:

    <content target="pvr">plugin://script.service.gto?action=getcontent&amp;ts=$INFO[Window(Home).Property(GTO.timestamp)]</content>

Eine genaue Beschreibung der ListItem.Labels und ListItem.Properties erfolgt weiter unten.

For detailed description of ListItem.Labels and ListItem.Properties see below.

## Skriptaufrufe (Methoden):

Der Dienst für die Aktualisierung der Inhalte und des Widgets (starter.py) ruft das eigentliche Skript über den Parameter 'action' mit einem entsprechenden Wert auf. Dieser Parameter kann auch von anderen Plugins oder Scripten wie folgt verwendet werden:

The service for updating content and widgets (starter.py) calls the actual plugin via the parameter 'action' with a corresponding value. This parameter can be used by other plugins or scripts as follows:

#### Führt ein erneutes Einlesen der Feeds und Webseiten durch die Scraper durch / Perform a rescan of the feeds:

    XBMC.RunScript(script.service.gto,action=scrape)

#### Aktualisiert das GTO Widget / Actualize the Widget:

    XBMC.RunScript(script.service.gto,action=refresh)

#### Öffnet eine Liste vorhandener Scraper und speichert den ausgewählten Scraper als Standardscraper / Opens a scraper list and stores the selected scraper as default:

    XBMC.RunScript(script.service.gto,action=change_scraper)
    
#### Schreibt zusätzliche Informationen zur ausgewählten Sendung als Properties nach Window(Home) / writes additional Properties of the selected broadcast to Window(Home)

Die Properties für das Window(Home) werden weiter unten beschrieben und sind nach dem Schema ```'GTO.Info.<property>'``` benannt / You'll finde a description of all properties below. They are named as follows: ```'GTO.Info.<property>'```
    <onclick>
        RunScript(script.service.gto,action=sethomecontent&blob=$INFO[ListItem.Property(BlobID)])
    </onclick>

#### Öffnet ein Fenster mit zusätzlichen Informationen zur ausgewählten Sendung / Opens a window with additional details of the selected broadcast:

Beispiel 'onclick' für TV Highlights Element - Öffnet Popup generiert vom Plugin (script-GTO-InfoWindow.xml) / Example 'onclick' of a selected element - opens a popup window (script-GTO-InfoWindow.xml):

    <onclick>
        RunScript(script.service.gto,action=infopopup&amp;blob=$INFO[ListItem.Property(BlobID)])
    </onclick>
#### Setzt einen Aufnahmetimer im Info-Window

    <onclick>
        RunScript(script.service.gto,action=record&amp;broadcastid=$INFO[Window(Home).Property(GTO.Info.BroadcastID)]&amp;blob=$INFO[Window(Home).Property(GTO.Info.BlobID)])
    </onclick>
    
Als Condition lässt sich das Vorhandensein einer Broadcast-ID verwenden. Daneben existiert GTO.Info.hasTimer (True/False), sofern für die Broadcast-ID bereits ein Timer gesetzt/nicht gesetzt wurde.

#### ListItems, InfoLabels und Properties / ListItems, InfoLabels and Properties:

    - ListItem.label                  Titel der Sendung (Tatort) / Broadcast title
    - ListItem.title                  dto.
    - ListItem.label2                 PVR Sender (Das Erste HD) / PVR channel name
    - ListItem.Art(thumb)             Screenshot aus dem Titel der Sendung /screenshot of broadcast
    - ListItem.Art(logo)              Senderlogo / PVR station logo
    - ListItem.genre                  Genre (Krimi, Komödie, Doku etc.) / genre
    - ListItem.plot                   Beschreibung des Inhaltes der Sendung /content description of broadcast
    - ListItem.cast                   Darsteller / cast
    - ListItem.duration               Laufzeit in Sekunden / Runtime in seconds

    - ListItem.Property(DateTime)     Startdatum und Zeit, wie in Kodi Einstellungen Datum und Zeit (ohne Sek.) / Datetime of broadcast start
    - ListItem.Property(StartTime)    Startzeit / Starting time (20:15) of broadcast 
    - ListItem.Property(EndTime)      Ende der Sendung (22:00) / end time
    - ListItem.Property(RunTime)      Laufzeit der Sendung in Miunten / Runtime of broadcast in minutes
    - ListItem.Property(ChannelID)    PVR Channel ID, wird zum Umschalten per json benötigt / Channel ID of PVR, needed for channel switch
    - ListItem.Property(BlobID)       ID der Datenblase zur Sendung ID / data blob ID of the broadcast
    - ListItem.Property(isInDB)       'True|False' Film befindet sich in lokaler DB / movie exist in local database

    Wenn sich der Film einer Sendung bereits in der Datenbank befinden, werden zusätzliche Video-Infolabels gesetzt.
    If the movie of a show is already in the database, additional video info labels are set/added.

    - ListItem.Property(dbTitle)      Originaltitel aus Datenbank / original title from database
    - ListItem.originaltitle          dto.
    - ListItem.Art(fanart)            Fanart
    - ListItem.Trailer                Trailer
    - ListItem.Rating                 Rating
    - ListItem.Userrating             User rating

#### Properties in Window(Home / Properties for Home window (resides as properties in Window(Home)):

    - GTO.provider                    Provider/Anbieter (scraper.shortname)
    - GTO.blobs                       Anzahl Items / count of items
    - GTO.busy                        true/false - Scraper ist beschäftigt / scraper is busy
    - GTO.timestamp                   Zeitstempel der letzten Aktualisierung des Widgets / Timestamp of last refresh of the widget

#### Properties für Info-Window (werden als Properties in Window(Home) gesetzt) / Properties for info window (resides as properties in Window(Home)):

    - GTO.Info. BlobID                ID des Items / ID of item
    - GTO.Info.Title                  Titel der Sendung / title
    - GTO.Info.Picture                Screenshot aus dem Titel der Sendung / screenshot
    - GTO.Info.Description            Beschreibung des Inhaltes / description
    - GTO.Info.Genre                  Genre
    - GTO.Info.Channel                PVR Kanalname / PVR channel name
    - GTO.Info.ChannelID              PVR Channel ID / PVR channel id
    - GTO.Info.Logo                   PVR Kanallogo / PVR channel logo
    - GTO.Info.Date                   Datum und Uhrzeit 'dd.mm.yy hh:mm', wird benötigt für Switchtimer / datetime in format 'dd.mm.yy hh:mm'
    - GTO.Info.RunTime                Laufzeit in Minuten Run time in minutes
    - GTO.Info.EndTime                Endzeit (hh:mm) / end time
    - GTO.Info.Cast                   Darsteller / cast
    - GTO.Info.Rating                 Rating
    - GTO.Info.hasTimer               gesetzter Aufnahmetimer (True/False) /active recording timer
    - GTO.Info.BroadcastID            Broadcast-ID des Timers
    - GTO.Info.isInDB                 'True|False' (ähnlicher) Film existiert bereits in Bibliothek / (similar) movie already exists in database
    - GTO.Info.isInFuture             'True|False' Sendung liegt in der Zukunft / Broadcast is in Future
    - GTO.Info.isRunning              'True|False' Sendung läuft aktuell / Broadcast is currently running

    if Property(isInDB) = 'True':      Es werden zusätzliche Properties gesetzt (additional properties)

    - GTO.Info.dbTitle                Titel der Sendung aus Datenbank (DB)
    - GTO.Info.dbOriginalTitle        Originaltitel aus DB
    - GTO.Info.Fanart                 Fanart
    - GTO.Info.dbTrailer              Trailer
    - GTO.Info.dbRating               Rating
    - GTO.Info.dbUserRating           User Rating

#### Debugging:

Das Skript wird gesprächig, wenn in den Einstellungen von Kodi unter System, Logging das Debug-Logging aktiviert wird.

The script tells much more if You activate the debug mode within Kodi.


### FAQ (German only)

Q: Hinter den Sendernamen sind Sternchen (*), warum ist das so?

1. Der Sender ist nicht in Senderliste, kann also nicht empfangen werden. Ist der Film dieses Senders aber in der DB, wird er trotzdem ausgewiesen (er ist ja in der Bibliothek), Fanart, Trailer usw. werden aus der DB genommen. Da der Sender nicht in der Liste ist, exisitiert (in den meisten Fällen) auch kein Senderlogo, hier wird dann ein Fallback angezeigt.
2. Der ausgewiesene Sendername des Scrapers ist ein anderer als der aus der Senderliste (Bsp: RTLII <> RTL2). In diesem Fall musst die 'ChannelTranslate.json' angepasst werden, die diverse vom Scraper verwendete Sendernamen auf die PVR-Liste mappt. Damit die 'ChannelTranslate.json' nicht bei jedem Update überschrieben wird, liegt die unter

        Linux (Kodi, LibreElec): /storage/.kodi/userdata/addon_data/script.service.gto/ChannelTranslate.json)
        Windows: %APPDATA%\kodi\userdata\addon_data\script.service.gto\ChannelTranslate.json
    
    Die 'ChannelTranslate.json' kann mit jedem einfachen Texteditor bearbeitet werden
----------------------------------------------------------------------------------------------------------------------
![Screenshot](resources/lib/media/screenshots/screenshot_0.jpg)
[more screenshots](resources/lib/media/screenshots)

