Artykuł poświęcam opisowi klasy eEPGCache z pakietu Enigma2.
Funkcje i ich znaczenie wraz z API:
1. setCacheFile(String fileName)
Funkcja ustawia wartość ścieżki do pliku wykorzystywanego w ramach załadowania lub zapisania informacji z bazy EPG - patrz: load() i save(). Parametr fileName powinien być typu STRING.
przykład:
eEPGCache.getInstance().setCacheFile('/hdd/epg.dat')
2. save()
Funkcja służy do zapisu zawartości bazy EPG do wskazanego przy pomocy setChacheFile() pliku płaskiego.
3. load()
Funkcja służy do wciągnięcia zawartości pliku płaskiego wskazanego przez setCacheFile() do bazy EPG.
4. startTimeQuery(eServiceReference ref, NUMBER beginTime = -1, NUMBER minutes = -1)
ref | wymagany | referencja do serwisu |
beginTime | opcjonalny | czas startu dla zdarzeń zwracanych w kursorze; -1 oznacza brak definicji (dowolny) |
minutes | opcjonalny | długość odcinka czasowego dla zdarzeń zwracanych w kursorze; -1 oznacza brak definicji (dowolny) |
Funkcja służy do inicjalizacji kursora przechodzącego po zdarzeniach EPG. Przygotowany przy użyciu tej funkcji kursor zawiera zdarzenia przecinające odcinek czasu zdefiniowany poprzez beginTime i minutes. Jest powiązana z funkcją getNextTimeEntry(), która to funkcja służy do pobrania następnej w kolejności wartości z kursora. Funkcja zwraca wartość -1 w przypadku, gdy kursor jest pusty.
przykład:
if ptr.startTimeQuery(ref) != -1:
self.session.open(EPGSelection, ref)
else:
self.session.open(MessageBox, "Sorry no epg currently available for this service.", MessageBox.TYPE_INFO)
5. eServiceEvent getNextTimeEntry()
Funkcja zwraca następną w kolejności wartość z kursora zainicjalizowanego przez startTimeQuery(). Wywołanie funkcji możliwe jest jedynie po wcześniejszym zainicjalizowaniu.
6. eServiceEvent lookupEventTime(eServiceReference ref, NUMBER begin, NUMBER direction)
ref | wymagany | referencja do serwisu |
begin | opcjonalny | określenie horyzontu czasowego dla wyszukiwania zdarzenia; -1 oznacza bieżącą datę |
direction | opcjonalny | definicja kierunku przeszukiwania - wartości [-1,0,1] |
Funkcja przeszukuje EPG w celu znalezienia zdarzenia dla określonego przez ref serwisu. Zwracane w wyniku działania funkcji jest zdarzenie poprzednie (direction=-1), bieżące (direction=0) lub następne (direction=1) dla horyzontu czasowego określonego przez parametr begin. W przypadku ustawienia parametru begin na wartość -1, brana jest bieżąca data jako horyzont czasowy.
przykład:
queryTime=self.begin+(self.end-self.begin)/2
rec_ref = self.session.nav.getCurrentlyPlayingServiceReference()
evt = eEPGCache.getInstance().lookupEventTime(rec_ref, queryTime)
epg = eEPGCache.getInstance()
ref = self.session.nav.getCurrentlyPlayingServiceReference()
ptr = ref and ref.valid() and epg.lookupEventTime(ref, -1)
ptr = epg.lookupEventTime(ref, ptr.getBeginTime(), +1)
event = epg.lookupEventTime(serviceref, -1, 0)
def getEvent(self):
service = self.navcore.getCurrentService()
info = service and service.info()
ret = info and info.getEvent(self.now_or_next)
if not ret and info:
refstr = info.getInfoString(iServiceInformation.sServiceref)
ret = eEPGCache.getInstance().lookupEventTime(eServiceReference(refstr), -1, self.now_or_next and 1 or 0)
return ret
7. eServiceEvent lookupEventId(eServiceReference ref, NUMBER event_id)
ref | wymagany | referencja do serwisu |
event_id | wymagany | identyfikator zdarzenia do wyszukania |
Funcja służy do wyszukania w podanym serwisie zdarzenia o określonym parametrem identyfikatorze.
przykład:
event = eEPGCache.getInstance().lookupEventId(service.ref, eventid)
8. [][] lookupEvent([STRING fmt, (eServiceReference ref, NUMBER queryType, NUMBER pe1, NUMBER pe2)])
fmt | wymagany | Format zwracanych danych - opis niżej |
ref | wymagany | referencja do serwisu |
queryType | wymagany | typ zadawanego zapytania - możliwe wartości w tabeli poniżej |
pe1 | wymagany | parametr dodatkowy 1 - zależny od kontekstu ustawionego przez queryType - tabela poniżej |
pe2 | opcjonalny | parametr dodatkowy 2 - zależny od kontekstu ustawionego przez queryType - określa koniec zakresu czasowego - tabela poniżej |
Tabela możliwych wartości pola formatu:
WARTOŚĆ | OPIS |
0 | PyLong(0) |
I | Event Id (id zdarzenia) |
B | Event Begin Time (czas rozpoczęcia zdarzenia) |
D | Event Duration (czas trwania zdarzenia) |
T | Event Title (tytuł zdarzenia) |
S | Event Short Description (krótki opis zdarzenia) |
E | Event Extended Description (rozszerzony opis zdarzenia) |
C | Current Time (bieżący czas) |
R | Service Reference (referencja do serwisu) |
N | Service Name (nazwa serwisu) |
n | Short Service Name (krótka nazwa serwisu) |
X | Flaga nie związana ze zwracanym rezultatem określająca, że zwracana ma być minimum jedena pozycja w tabeli wynikowej odpowiadająca każdemu serwisowi nawet, gdy nie znaleziono zdarzeń dla serwisu. W przypadku, gdy nie znaleziono zdarzeń w wynikowym wierszy tabeli wartości nieokreślone są zwracane jako None |
Opis parametrów związanych z typem zapytania:
TYP | OPIS | PE1 | PE2 |
2 | zapytanie o identyfikator zdarzenia | wartość identyfikatora zdarzenia | Niedotyczy |
-1 | zapytanie o zdarzenia przed określonym parametrem pe1 czasem | horyzont czasowy dla wyszukania (-1 - obecna data) | data określająca datę końca dla zakresu przeszukiwania |
0 | zapytanie o zdarzenia przecinające określony parametrem pe1 czas | horyzont czasowy dla wyszukania (-1 - obecna data) | data określająca datę końca dla zakresu przeszukiwania |
+1 | zapytanie o zdarzenia po określonym parametrem pe1 czasie | horyzont czasowy dla wyszukania (-1 - obecna data) | data określająca datę końca dla zakresu przeszukiwania |
Funkcja służy do wyszukiwania informacji o zdarzeniach dla podanych parametrów. Informacja zwracana jest w postaci tablicy dwuwymiarowej, gdzie pierwszy wymiar definiuje poszczególne elementy kursora (wyszukane zdarzenia), a drugi wymiar to wartości odpowiadające zdarzeniu które są określone polem Format (dane pojedynczego zdarzenia). Pola czasowe typu NUMBER definiowane są jako liczba sekund od daty EPOCH (w systemach unixowych początek roku 1970).
Przykłady:
events = eEPGCache.getInstance().lookupEvent(['IBDTSENC', (ref, 0, begintime, endtime)])
search = ['IBDCTSERNX']
if services: # It's a Bouquet
search.extend([(service, 0, -1) for service in services])
events = eEPGCache.getInstance().lookupEvent(search)
search = ['IBDCTSERNX']
if services: # It's a Bouquet
search.extend([(service, 0, -1) for service in services])
events = eEPGCache.getInstance().lookupEvent(search)
print 'The first event duration: %s'%(str(events[0][2]))
event = eEPGCache.getInstance().lookupEvent(['ESX', (ref, 2, int(idev))])
9. [][] search((STRING fmt, NUMBER size, NUMBER queryType, pe1, pe2))
fmt | wymagany | Format zwracanych danych - opis niżej |
size | wymagany | maksymalna liczba zwróconych wierszy |
queryType | wymagany | typ zadawanego zapytania - możliwe wartości w tabeli poniżej |
pe1 | wymagany | parametr dodatkowy 1 - zależny od kontekstu ustawionego przez queryType - tabela poniżej |
pe2 | opcjonalny | parametr dodatkowy 2 - zależny od kontekstu ustawionego przez queryType |
Tabela możliwych wartości pola formatu:
WARTOŚĆ | OPIS |
I | Event Id (id zdarzenia) |
B | Event Begin Time (czas rozpoczęcia zdarzenia) |
D | Event Duration (czas trwania zdarzenia) |
T | Event Title (tytuł zdarzenia) |
S | Event Short Description (krótki opis zdarzenia) |
E | Event Extended Description (rozszerzony opis zdarzenia) |
R | Service Reference (referencja do serwisu) |
N | Service Name (nazwa serwisu) |
n | Short Service Name (krótka nazwa serwisu) |
Opis parametrów związanych z typem zapytania:
TYP | OPIS | PE1 | PE2 |
0 | wyszukaj zdarzenia podobne (SIMILAR_BROADCASTINGS_SEARCH) | referencja do serwisu w postaci stringa | identyfikator zdarzenia |
1 | wyszukaj zdarzenia o określonym dokładnie tytule (EXAKT_TITLE_SEARCH) | tekst do wyszukania | - 0 = wielkość liter ma znaczenia (CASE_CHECK)
- 1 = wielkość liter nie ma znaczenia (NO_CASECHECK)
|
2 | wyszukaj zdarzenia zawierające tekst w tytule (PARTIAL_TITLE_SEARCH) | tekst do wyszukania | - 0 = wielkość liter ma znaczenia (CASE_CHECK)
- 1 = wielkość liter nie ma znaczenia (NO_CASECHECK)
|
Funkcja służy do wyszukiwania informacji o zdarzeniach dla podanych parametrów. Informacja zwracana jest w postaci tablicy dwuwymiarowej, gdzie pierwszy wymiar definiuje poszczególne elementy kursora (wyszukane zdarzenia), a drugi wymiar to wartości odpowiadające zdarzeniu które są określone polem Format (dane pojedynczego zdarzenia).
Przykład:
l = eEPGCache.getInstance().search(('RIBND', 1024, eEPGCache.SIMILAR_BROADCASTINGS_SEARCH, refstr, event_id))
W ramach wykorzystania klasy eEPGCache polecam zapoznać się z klasami:
--- Component.ServiceList !!
--- ServiceReference
--- enigma.eServiceEvent
--- Navigation.Navigation
--- enigma.iStaticServiceInformationPtr
--- enigma.iServiceInformationPtr